Dsl の主体は以下の2つで、非常に単純なクラス構造となっています。
クラス | 概説 |
Processor | 計算順序の決定と計算処理の実行 |
Variable |
個々の変数。以下のプロパティ(属性)を持ちます。
- 右辺変数の配列 (List<Variable> RightSideVariables)
- 値 (double Value)
- 計算式 (delegate ComputeValueAt)
- 属性 (USERFLAG Flag)
※CやFORTRANでは変数は double 等のスカラーですが Dsl では、それに属性が追加されます。
|
右のソースコードが最も単純なプログラミングイメージとなります。
※ y = x1 + 1.0 → 0 (計算式 y=x1+x2 で x2 が 1.0 の時、y が 0 になる x1 を計算します。)
|
Processor pr = new Processor("Test"); // Processorオブジェクトの作成
Variable x1 = new Variable (pr,"x1"); // y,x1,x2 の各変数作成
Variable x2 = new Variable (pr,"x2");
Variable y = new Variable (pr,"y");
y.SetRightSideVariables(x1,x2); // y = f(x1,x2) の因果関係定義
// y = f(x1,x2) の具体的な計算式定義(y = x1 + x2)。
y.ComputeValueAt = delegate(Processor pr, Variable self,double time,double step)
{
// selfは y、rhsvsは y の右辺変数配列。rhsvs[0]は x1、rhsvs[1]は x2
List<Variable> rhsvs = self.RightSideVariables;
return rhsvs[0].Value + rhsvs[1].Value; // x1+x2 の計算値を返す。
};
// 属性と値: Y は計算結果として 0 となる、その時の X1 を求める(X2は定数)。
y.Flag =USERFLAG.TARGETED; y.Value=0;
x1.Flag=USERFLAG.REQUIRED; x2.Flag = USERFLAG.SET; x2.Value = 1.0;
...................................
// 計算順序や連立方程式の構築
if (pr.DeterminateOrder()==RESULT.OK)
{
// 成功したら計算実行
pr.Run();
}
|