(前頁)<<      >>(次頁)          (Up)

4章 CommonMPにおける計算制御 その1
4.2 全体の計算制御(シミュレーション時間の進行)


 これまでの勉強で 1つの要素モデルの動作は大体理解できたとおもいます。
 一方で、複数の要素モデルがどのような仕組みで計算されるか等ついては、考慮してきませんでした。(全体を知らなくても 自分が開発する要素モデルの事だけを考えていれば CommonMPフレームワークに組み込むことが可能であることを強調するため、敢えて「CommonMPフレームワーク」と一言で片付けてきました。) この頁では CommonMP計算プロジェクト内での要素モデルの計算方法について説明します。
 
 CommonMPの解説書等にも説明されている様に、CommonMPの計算には、「同期」・「非同期」 の2種類の方法があります。
 プロジェクトの全体系タグを選択し、マウスの右クリックで表示されたポップアップメニューから「パラメータ設定」を選択します。


 

 表示されたダイアローグでは、「演算制御」の欄で「非同期」/「同期」の選択ができます。(デフォルトは 非同期です)
 

   

 ここで、非同期/同期の動作の違いを見ていきます。

 動作を確認するため、前頁と同様に プロジェクト「TutorialSampleModel」を使用します。
 


非同期計算の場合

 下記のように3つの未来型要素モデルをカスケード状に接続します。(末端は何もしないモデル)
 要素モデルを区別するためのID値は 上流から
     E459
     E51
     E210
 となっています。
  
 また、全体系の計算パラメータを
  演算制御: 非同期
  タイムステップ: 600 秒 (10分)
 とします。

 計算期間を10分間( 2013/06/23 22:00:00 〜 2013/16/23 22:10:00 )として計算を開始します。

  

 計算が終了した所で、ログを見てみます。
 10分間の計算ログ(ModelDebugLog.txt)は下記の通りです。

s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::Initialize>
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::DataFusion>
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::Initialize>
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::DataFusion>
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::Initialize>
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::DataFusion>
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::ReadyCalculation>
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::ReadyCalculation>
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::ReadyCalculation>

s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::Calculate>
s2013/06/23 22:01:00 <MyForecastModel[E459-13921-2462013]::DataFusion>
s2013/06/23 22:01:00 <MyForecastModel[E459-13921-2462013]::Calculate>
s2013/06/23 22:02:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:10:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 

s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:01:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:01:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:02:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:10:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 

s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:01:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:01:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:02:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:10:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 

s2013/06/23 22:10:00 <MyForecastModel[E210-15422-2362013]::CompleteCalculation>
s2013/06/23 22:10:00 <MyForecastModel[E459-13921-2462013]::CompleteCalculation>
s2013/06/23 22:10:00 <MyForecastModel[E51-14021-2462013]::CompleteCalculation>


 ここで、要素モデルの計算順序に着目します。  
  最上流の要素モデル(ID=E459) から計算が始まり、22:00:00 から 22:10:00 まで一気に計算を行います。次に中間の要素モデル(ID=E51)が 22:00:00 から 22:10:00 まで計算を行います。 最後に 最下流の要素モデル(ID=E210)が計算を開始し、22:00:00 から22:10:00 まで計算を行います。
 非同期制御の場合には 各要素モデルのシミュレーション時刻は異なっています。



同期計算の場合

 次に 同じモデルを使用して
 全体系の計算パラメータを
  演算制御: 同期
  タイムステップ: 600 秒 (10分) 設定はできません(自動的に最適値に設定されます)
  とします。

 計算期間を10分間( 2013/06/23 22:00:00 〜 2013/16/23 22:10:00 )として計算を開始します。
 
 計算が終了した所で、ログを見てみます。
 10分間の計算ログ(ModelDebugLog.txt)は下記の通りです。

s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::Initialize> 
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::ReadyCalculation> 
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::ReadyCalculation> 
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::ReadyCalculation> 

s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::Calculate
s2013/06/23 22:00:00 <MyForecastModel[E459-13921-2462013]::Calculate
s2013/06/23 22:00:00 <MyForecastModel[E51-14021-2462013]::Calculate
s2013/06/23 22:01:00 <MyForecastModel[E210-15422-2362013]::DataFusion
s2013/06/23 22:01:00 <MyForecastModel[E459-13921-2462013]::DataFusion
s2013/06/23 22:01:00 <MyForecastModel[E51-14021-2462013]::DataFusion
s2013/06/23 22:01:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:01:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:01:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:02:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:02:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:02:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:02:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:03:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:03:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:04:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:04:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:05:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:05:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:06:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:06:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:07:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:07:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:08:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:08:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E210-15422-2362013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E459-13921-2462013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E51-14021-2462013]::DataFusion> 
s2013/06/23 22:09:00 <MyForecastModel[E210-15422-2362013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E459-13921-2462013]::Calculate> 
s2013/06/23 22:09:00 <MyForecastModel[E51-14021-2462013]::Calculate> 
s2013/06/23 22:10:00 <MyForecastModel[E210 -15422-2362013]::DataFusion> 
s2013/06/23 22:10:00 <MyForecastModel[E459 -13921-2462013]::DataFusion> 
s2013/06/23 22:10:00 <MyForecastModel[E51 -14021-2462013]::DataFusion>
 
s2013/06/23 22:10:00 <MyForecastModel[E210-15422-2362013]::CompleteCalculation> 
s2013/06/23 22:10:00 <MyForecastModel[E459-13921-2462013]::CompleteCalculation> 
s2013/06/23 22:10:00 <MyForecastModel[E51-14021-2462013]::CompleteCalculation> 


 同期の場合には 接続の上下には無関係に計算が行われ、 全要素モデルの シミュレーション時刻が一致しています。
 計算順序は 全ての要素モデルについて Calculate を行い、一通り計算が終了したら一斉に時刻を進め 次に全要素モデルの DataFusion が行われます。
 これを、目標時刻になるまで行います。
 「同期」という名称は 全ての要素モデルのシミュレーション時刻が「同期している」という事に由来しています。



 要素モデルの動作を纏めると次のようになります。

非同期計算の場合

 最初に最上流部の「E459」が目標時刻まで計算し、 次に中間の「E51」が計算を開始します。
    
   中間の「E51」が目標時刻まで達すると、最後に最下流の「E210」の計算が開始され、目標時刻まで計算が進行します。
  
 

 最終目標時刻が非常に遠い時には、中間目標を設定して各期間毎に計算を完結させつつ 最終目標時刻まで計算を進行させます。
 
 

 

全体系のポップアップメニュー「パラメーター設定」で開かれたダイアローグ上で「タイムステップ」に設定される時間は中間目標間のインターバルになります。
 下記の例では、中間目標時刻:1と中間目標時刻:2の間は 600 秒です。

      



同期計算の場合

 同期計算の場合には、全体系(プロジェクト)のシミュレーション時刻を考えます。 全体系のシミュレーション時刻が進行するに従って、各要素モデルは全体系のシミュレーション時刻に追いつくように 自らの計算を行います。 

 

 全体系の時刻が進行するのに追いつくため、各要素モデルは自分のδtで計算します。
 しかし、その計算時に どの要素モデルから計算するかは規定しません。
 
 
 



 テスト用のCommonMP計算プロジェクト(Ex09_CommonMP.lzh

 解凍して生成された、「MyExerciseStep1」フォルダーを \CommonMP\CommonMPData\ 下に置きます。

 




(前頁)<<      >>(次頁) 

初版:2013/06/26 |