Dsl (Digital Simulation Library) for .Net

The Processor type exposes the following members.

コンストラクター

  名前 説明
Public method Processor()()()()
デフォルトのコンストラクター
Public method Processor(String)
Processorオブジェクトの名前を指定したコンストラクター

メソッド

  名前 説明
Public method AddVariables
Processor オブジェクトに Variable(複数可)を登録します。 既に登録されている Variable は登録されません(二重登録のチェックが実行されます)。
Public method DeterminateOrder()()()()
Processor オブジェクトが保持する配列 Variables に登録された Variable の(非定常状態)計算順序を決定し、必要なら連立方程式を組み立てます。
Public method DeterminateOrder(Boolean)
配列 Variables に登録された Variable の計算順序を決定し、必要なら連立方程式を組み立てます。
Public method Equals
指定した Object が、現在の Object と等しいかどうかを判断します。
(Inherited from Object.)
Protected method Finalize
Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。
(Inherited from Object.)
Public method GetHashCode
特定の型のハッシュ関数として機能します。
(Inherited from Object.)
Public method GetType
現在のインスタンスの Type を取得します。
(Inherited from Object.)
Public method GetValueBeforeIntegration
与えられた Variable の各時間ステップ毎の積分計算開始前における値を返します。 <I>型以外の変数は単にその時の値(Value)が返ります。<I>型変数の場合 積分計算開始前に内部で保存されている(1ステップ前の)値が帰ります。
Public method IsLeafVariable
代数計算時、指定した Variable が「右辺変数」を持たないとき true、値(Value)が別な変数から計算される場合は false になります。 <S>型や<T>型変数等(代数計算時に「定数」とみなされるもの)からのみ直接または間接的に計算される変数も true と なります(これは DeterminateOrder() の結果に依存します)。
Public method LogFlush
ログファイル出力を確定(Flush)させる。
Public method LogString
ログファイルに文字列を書き込む
Public method LogTime
Processor オブジェクトが作成された時刻(BornTime)からの経過時間と現在時刻を文字列として返します。
Public method LogWrite
"LogTime()+st"の形式でログファイルに出力する。
Public method LogWriteLine
"LogTime()+st"の形式でログファイルに出力後、改行する。
Protected method MemberwiseClone
現在の Object の簡易コピーを作成します。
(Inherited from Object.)
Public method OnAfterAlgebraicComputation
代数計算実行直後に呼ばれる メソッドです。 Run()が代数計算実行直後に呼び出します。 本メソッドは virtual です。base は AfterAlgebraicComputation が設定されていればそちらを呼び出します。 設定されていなければ単にリターンします。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。
Public method OnAfterBlockComputation
代数計算中の連立方程式を解いた直後に呼ばれるメソッドです。 Run()が連立方程式計算実行直後に呼び出します。 本メソッドは virtual です。base は AfterBlockComputation が設定されていればそちらを呼び出します。 代数計算は各積分ステップ毎に計算されます。通常、代数計算には複数の連立方程式が含まれますので、それぞれの 連立方程式が計算された直後に本メソッドが呼ばれることになります(連立方程式が無ければ呼ばれません)。
Public method OnAfterComputation
計算実行後に呼ばれる メソッドです。 DeterminateOrder()Run()が実行直後に呼び出します。 どちらのメソッドから呼び出されたかは ExecutionStatus で区別できます。本メソッドは virtual です。 base は AfterComputation が設定されていればそちらを呼び出します。設定されていなければ 単にリターン。
Public method OnAfterIntegration
各積分ステップで常微分方程式を解いた直後に呼ばれるメソッドです。 Run()が常微分方程式を解いた直後に呼び出します。 本メソッドは virtual です。base は AfterIntegration が設定されていればそちらを呼び出します。 代数計算は各積分ステップ毎に計算されます。
Public method OnAfterRestore
Processor オブジェクトの情報を TextReader から読み込む Restore(Object, TextReader)RestoreContents(Object, TextReader) メソッドの終了時に 呼び出されるメソッドです。最初は Restore() の終了時、次に RestoreContents() の終了時です。 終了処理が必要な場合は override します。 base クラスでは AfterRestore が設定されていればそれを呼び出します。 AfterRestore が設定されていなければ何もせず true をリターンします。
Public method OnAfterSave
Processor オブジェクトの情報を TextWriter に出力するSave(Object, TextWriter)SaveContents(Object, TextWriter)メソッドの終了時に 呼び出されるメソッドです。呼び出しは2回です。最初は Save() の終了時、次に SaveContents() の終了時です。 終了処理が必要な場合は override します。 base クラスでは AfterSave が設定されていればそれを呼び出します。 AfterSave が設定されていなければ何もせずリターンします。
Public method OnBeforeAlgebraicComputation
代数計算実行直前に呼ばれるメソッドです。 Run()が代数計算実行直前に呼び出します。 本メソッドは virtual です。base は BeforeAlgebraicComputation が設定されていればそちらを呼び出します。 設定されていなければ単に true をリターンします。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。
Public method OnBeforeBlockComputation
代数計算中の連立方程式を解く直前に呼ばれるメソッドです。 Run()が代数計算中の連立方程式を解く直前に呼び出します。 本メソッドは virtual です。base は BeforeBlockComputation が設定されていればそちらを呼び出します。 設定されていなければ単に true をリターンします。 代数計算は各積分ステップ毎に計算されます。通そして、通常、代数計算には複数の連立方程式が含まれますので、それぞれの 連立方程式が計算される直前に本メソッドが呼ばれることになります(連立方程式が無ければ呼ばれません)。
Public method OnBeforeComputation
計算実行前に呼ばれるメソッドです。 DeterminateOrder()Run()が実行直前に呼び出します。 どちらのメソッドから呼び出されたかは ExecutionStatus で区別できます。本メソッドは virtual です。 base は BeforeComputation が設定されていればそちらを呼び出します。設定されていなければ 単に true を返します。
Public method OnBeforeIntegration
各積分ステップで常微分方程式を解く直前に呼ばれるメソッドです。 Run()が常微分方程式を解く直前に呼び出します。 本メソッドは virtual です。base は BeforeIntegration が設定されていればそちらを呼び出します。 代数計算は各積分ステップ毎に計算されます。
Public method OnBeforeRestore
Processor オブジェクトの情報を TextReader から読み込むRestore(Object, TextReader)RestoreContents(Object, TextReader)メソッドの直前に 呼び出されるメソッドです。呼び出しは2回です。最初は Restore() の開始時、次に RestoreContents() の開始時です。 開始処理が必要な場合は override します。 base クラスでは BeforeRestore が設定されていればそれを呼び出します。 BeforeRestore が設定されていなければ何もせず true をリターンします。
Public method OnBeforeSave
Processor オブジェクトの情報を TextWriter に出力するSave(Object, TextWriter)SaveContents(Object, TextWriter) メソッドの開始直前に 呼び出されるメソッドです。呼び出しは2回です。最初は Save() の呼び出し時、次に SaveContents() の呼び出し時です。 開始処理が必要な場合は override します。 base クラスでは BeforeSave が設定されていればそれを呼び出します。 BeforeSave が設定されていなければ何もせず true をリターンします。
Public method OnIncrementTime
積分計算実行前に呼ばれるメソッドで、次の積分開始時間を計算します。 Run()が積分計算実行後に呼び出します。 積分は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。
Public method OnIsPrintTime
代数計算実行前に呼ばれる delegate で、与えられた時刻が「印刷」時刻かどうかを判定します。 「印刷」時刻の場合、COMPUTED_PRINT_TIME のフラグを持つ Variable が計算対象に追加されます。 Run()が代数計算実行直前に呼び出します。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。
Public method Reset
Processorの状態を DeterminateOrder() 呼び出し前の状態に戻します。
Public method ResetIndex
変数の Index と OrderIndex を設定します。DeterminateOrder() が終了したときに自動的に Processor 内部で呼び出されますが、 変数を Processor に追加したり削除したりした場合、呼び出すことができます。ただし、当然ですが OrderIndex は DeterminateOrder() が 正常終了した後以外は意味がありません。また、これらの整数領域は DeterminateOrder() が内部で作業用に使用します。従って、 DeterminateOrder() 呼び出しの途中(delegate内部などで)に呼び出さないでください。
Public method Restore
Processor オブジェクトの情報を TextReader から読み込み復元します。

※Processorに登録されている変数は一旦全て解放され、再作成されてから登録されます。 従って、以下の例の変数 x は Rsstore() 後に Processor とは無関係になります。さらに再作成された 変数は Save() 時の値や属性は保持しますが計算式 ComputeValueAt 等の delegate は再構築されません。 Restore()後に必ず、delegate 等を別途再設定してください。詳細はリファレンスの例題等を参照してください。

 コピー イメージコードをコピー
Processor pr = new Processor("Example");
Variable  x  = new Variable(pr,"x");
............ 
x.ComputeValueAt = delegate (Processor p,Variable v,double time,double step)
{
    return v[1]+v[2];
};
............ 
pr.Save(...); pr.SaveContents(...);
............ // x は pr に登録されています。
int ix = x.Index;
pr.Restore(...);pr.RestoreContents(...);
............ // x は pr から削除され、登録されていません。
x = pr.Variables[ix];  // 同じ x を使用してプロパティは x.Name 等と以前と同様にアクセスできます。
// しかし、delegate は以下のように再定義する必要があります。
x.ComputeValueAt = delegate (Processor p,Variable v,double time,double step)
{
    return v[1]+v[2];
};

Public method RestoreContents
Processor オブジェクトの情報を TextReader から読み込み復元します。
Public method Static member ResultString
リザルトコード res の文字列表現を返す。
Public method Run()()()()
DeterminateOrder()で決定された計算順序に従って、時刻 Time から TimeLimit まで刻み Step で計算します。
Public method Run(Double)
DeterminateOrder()で決定された計算順序に従って、時刻 Time から endTime まで刻み Step で計算します。 TimeLimit には endTime が代入されます。
Public method Run(Double, Double)
DeterminateOrder()で決定された計算順序に従って、時刻 Time から endTime まで刻み step で計算します。 TimeLimit には endTime が、Step には step が代入されます。
Public method Run(Double, Double, Double)
DeterminateOrder()で決定された計算順序に従って、開始時刻 startTime、刻み幅 step で時刻 endTime まで計算します。 Time には startTime、TimeLimit には endTime 、Step には step が代入されます。
Public method Save
オブジェクト(obj)の作成情報を TextWriter sw に出力します。 Dslオブジェクトを継承した独自オブジェクトを使用している場合、 必要なら本メソッドをoverrideしてください。
IDsiSerializer メンバ
Public method SaveContents
Processor オブジェクトの情報を TextWriter に出力します。出力した情報は後に RestoreContents() メソッドで 復元することができます。
IDslSerializableメンバ
Public method SetLogItem
個々のログ項目をオン、またはオフに設定します。
Public method ToString
現在の Object を表す String を返します。
(Inherited from Object.)
Public method Variable(Int32)
Processor オブジェクトに登録されている Variable を返します。
Public method Variable(String)
指定した名前と一致した Variable を返します。
Public method VariableIndex(String)
指定した名前の Variable の登録インデックスを返します。 Processorは登録に際して名前の重複はチェックしません。従って同じ名前が複数ある時は一番小さいインデックス値が返ります。
Public method VariableIndex(Variable)
指定した Variable の登録インデックスを返します。

プロパティ

  名前 説明
Public property AfterAlgebraicComputation
代数計算実行後に呼ばれる delegate です。 Run()が代数計算実行後に呼び出します。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。 詳細はOnAfterAlgebraicComputationを参照してください。
Public property AfterBlockComputation
代数計算中の連立方程式を解いた直後に呼ばれる delegate です。 Run()が呼び出します。 詳細はOnAfterBlockComputationを参照してください。
Public property AfterComputation
計算実行後に呼ばれる delegate です。 DeterminateOrder()Run()が計算実行直後に呼び出します。 どちらのメソッドから呼び出されたかは ExecutionStatus で区別できます。
Public property AfterIntegration
積分計算実行後に呼ばれる delegate です。 Run()が積分計算実行後に呼び出します。 積分は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。 詳細はOnAfterIntegrationを参照してください。
Public property AfterRestore
Processor オブジェクトの情報を TextReader から読み込む Restore() メソッドの終了時に 呼び出されるメソッドです。
Public property AfterSave
Processor オブジェクトの情報を TextWriter に出力する Save() メソッドの処理終了時に 呼び出されるメソッドです。
Public property BeforeAlgebraicComputation
代数計算実行前に呼ばれる delegate です。 Run()が代数計算実行前に呼び出します。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。
Public property BeforeBlockComputation
代数計算中の連立方程式を解く直前に呼ばれる delegate です。 Run()が呼び出します。 詳細はOnBeforeBlockComputationプロパティを参照してください。
Public property BeforeComputation
計算実行前に呼ばれる delegate です。 DeterminateOrder()Run()が実行直前に呼び出します。 どちらのメソッドから呼び出されたかは ExecutionStatus で区別できます。
Public property BeforeIntegration
積分計算実行前に呼ばれる delegate です。 Run()が積分計算実行前に呼び出します。 積分は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。 詳細はOnBeforeIntegrationを参照してください。
Public property BeforeRestore
Processor オブジェクトの情報を TextReader から読み込む Restore() メソッドの開始直前に 呼び出されるメソッドです。
Public property BeforeSave
Processor オブジェクトの情報を TextWriter に出力する Save() メソッドの直前に 呼び出されるメソッドです。
Public property BornTime
Processorオブジェクトが作成された時刻。
Public property ComputingOrder
計算順序に従って並べられた Variable の配列です。 DeterminateOrder()が正常に終了した後でないと意味を持ちません。 また配列の順序や登録されている Variable の属性などを変更すると以後のRun()メソッドが正常に 実行できなくなります。
Public property DerivativeRatio
連立方程式(y=f(x))を解く場合 Jacobian 行列 dy/dx を計算します。 dy/dx を計算する場合 Dsl では数値微分を実行します。 (数式微分は現バージョンではサポートしていません)。ここで数値微分を計算する場合 まず x を dx だけ変化させた時の y の変化分 dy を計算して「数値微分値 = dy/dx」とするわけですが、 このときの dx の初期値を決定する際に DerivativeRatio が使用されます(初期値は 100.0)。 最初に dx = |x| / DerivativeRatio を計算して、 dx がゼロ(に近い)なら次に dx = |y| / DerivativeRatio 、それでも小さければ dx = DerivativeRatio / 1000 と計算します。 dx は計算の過程で自動的に調節されるので DerivativeRatio の値を変更する必要性は少ないと考えられます。
Public property Eps
収束判定誤差定数(デフォルト値は 1.0E-6) 全て|<T>変数の (現在値-目的地)の二乗和 < Eps なら収束とみなします。
Public property ExecutionStatus
実行中の状態を返します。 詳細はEXECUTION_STATUSを参照してください。
Public property FileVersion
Processorオブジェクトの内容を Restore() した場合のバージョン番号配列。 つまり、Save() した Dsl のバージョン番号になりますので、Restore() 後でなければ意味がありません。
Public property FtCheckLimit
連立方程式を組み立てる際に<F>型と<T>型変数の個数が一致して、かつ、<F>型から<T>型に達する 独立したルートが存在する必要があります。 ただ「独立したルートが存在」のチェックは比較的コストの高い処理なので、<F>型(または<T>型)変数の数が FtCheckLimit 以上のときは 実行されません。もし「独立したルートが存在」しない場合、計算実行時に Jacobian 行列の行列式がゼロ(Singular)になり連立方程式を解くことはできません (もちろん「独立したルートが存在」しても連立方程式が解けない場合はあります)。その場合は FtCheckLimit を大きくして再度 DeterminateOrder() を 実行してみて下さい(デフォルト値は 500 です)。
Public property IncrementTime
積分計算実行前に呼ばれる delegate で、次の積分開始時間を計算します。 Run()が積分計算実行後に呼び出します。 積分は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。 詳細はOnIncrementTimeを参照してください。
Public property IntegrationMethod
常微分方程式の解法を指定します。 詳細はINTEGRATORを参照してください。
Public property IsPrintTime
代数計算実行前に呼ばれる delegate で、与えられた時刻が「印刷」時刻かどうかを判定します。 「印刷」時刻の場合、COMPUTED_PRINT_TIME のフラグを持つ Variable が計算対象に追加されます。 Run()が代数計算実行直前に呼び出します。 代数計算は各積分ステップ毎に計算されるので終了時間に達するまで繰り返し呼び出されます。 詳細はOnIsPrintTimeを参照してください。
Public property LogFile
Processor の実行状況を書き込むログファイル(StreamWriter)オブジェクト。 デフォルトは null ですので設定しなければログファイルは作成されません。 ログファイルに書き込まれる内容はLOG_ITEMSetLogItem()等を利用して設定します。 書き込まれる内容は Processor のバージョン等により変更されます。
Public property LogItem
ログ出力する項目。個々のログ項目は直接設定することができます。または SetLogItem()で オン、またはオフに設定できます。
Public property Name
プロセッサーオブジェクトの名前(任意)です。タブ等の特殊文字を含めないでください。
Public property NumDivided
<DD>型変数の個数(ループの数)です。DeterminateOrder()が正常終了した後でないと意味がありません。
Public property Static member Silent
true ならエラー時等にメッセージを表示しない、falseならメッセージを表示します。 デフォルトは false です。
Public property SolverMethod
代数計算中の連立方程式の解法をです。現状は EQUATION_SOLVER.NEWTON 固定です。
Public property SparseCriteria
Jacobian行列の非ゼロ要素の割合(%)が SparseCriteria を下回るとスパース専用の解法に移行します。 つまり、SparseCriteria = 100 なら常にスパース専用解法が用いられます。 逆に SparseCriteria = 0 ならスパース専用解法は用いられません。 デフォルトは 20(%)。
Public property SteadyStateComputation
DeterminateOrder()に定常状態計算の指定をした場合(引数の値) true になります。
Public property Step
積分の時間ステップ値です。積分実行中に調節することも可能です。
Public property Tag
ユーザが任意のオブジェクトを設定できます。 Processor が参照することはありません。
Public property Time
積分開始時刻であると同時に積分進行中の現在時刻です。 Run()()()()メソッド中での計算進行時間です。 積分開始時刻として設定できますが、Run() メソッド実行中は値をセットできません。
Public property TimeLimit
Run()メソッドで指定された積分終了時間です。
Public property UseMklSolver
true の場合、CPU に最適化されたインテル社の高速な Mkl を使用します。 true ならJacobian行列の非ゼロ要素の割合(%)が SparseCriteria を下回るとスパース専用の解法に移行します。 ここで「ゼロ要素」とは「計算の結果たまたまゼロ」という意味ではなく関数関係が無いため「恒久的にゼロ」という意味です。 false なら Mkl とスパース専用の解法は使用せず、C# で記述された内部の行列解法を用います。 特に2つの解法を比較するような場合を除いて、true でご使用ください。 デフォルトは true。
Public property Variables
Processor オブジェクトに登録されている Variable の配列です。グラフ処理の対象になります。

参照