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

4章 CommonMPにおける計算制御 その1
4.1 要素モデルの種別と派生関係


 3章で要素モデル「MyDynamicWaveModel」を制作した時 親クラスを 未来型要素モデル親クラス(McForecastModelBase)から派生させました。
 ところで、3章で作成したDLLの元となった プロジェクト「MyModel」の中には、「モデル型紙」というフォルダーが有り、この中に3種類の 要素モデルの型紙が準備されています。
 ここで、型紙の親クラスについて 整理してみます。

 

 セル型要素モデルから派生して 未来予測型要素モデル親クラス「McForecastModelBase」、現状計算型要素モデル親クラス「McStateCalModelBase」が 存在します。 第3章で作成した要素モデル「MyDynamicWaveModel」は 未来予測型「McForcastModelBase」から派生しましたが、何故 未来予測型から派生させたかは説明していませんでした。
 実はこの2つの要素モデルは 演算の意味に大きな考え方の相違があります。

@未来予測型(McForecastModelBase)

 現在時刻(T)の値から δt 後の状態を計算する要素モデル
     y[T+δt] = f( x[T] )


A現状計算型(McStatecalModelBase)

 現在時刻(T)のある値から、 現在の別な側面(状態)を計算する要素モデル
     z[T] = g( x[T] )


 具体的例で説明すると
 未来予測型は 時刻:Tの加速度、速度から、 時刻:T+δt 後の 速度、位置を算出するモデルです。

 一方、現状計算型は、時刻:Tの速度から その時刻:T の運動エネルギーを算出するモデルです。



 CommonMPの要素モデルとして 2つのモデル間でどのような違いがあるのかを調べてみます。
 CommonMPをダウンロードした時に一緒にダウンロードされてくるプロジェクト「TutorialSampleModel」内に 「MyForecastModel」と「MyStateCalModel」があるので、この2つのモデルを利用してその動作を調べます。

 プロジェクト「TutorialSampleModel」を CommonMPディバッグ環境で動作させる方法は 3.2章で示しました。

  ここで、モデルの各メソッドがどのように呼ばれるかをトレースする為にログを設定します。 次に、下に示すように要素モデルを接続し、計算時間を2分として 計算を開始し、その時に得られたログを解析します。(ログが出力されるように HymcoModelDebug.cfg ファイル内にクラス名は設定しておきます)

   


 2分間の計算ログ(ModelDebugLog.txt)は下記の通りです。

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 <MyStateCalModel[E412-15422-2362013]::Initialize>

s2013/06/23 22:00:00 <MyForecastModel[E210-15422-2362013]::ReadyCalculation>
s2013/06/23 22:00:00 <MyStateCalModel[E412-15422-2362013]::ReadyCalculation>

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:00:00 <MyStateCalModel[E412-15422-2362013]::Calculate>
s2013/06/23 22:00:00 <MyStateCalModel[E412-15422-2362013]::DataFusion>

s2013/06/23 22:01:00 <MyStateCalModel[E412-15422-2362013]::Calculate>
s2013/06/23 22:01:00 <MyStateCalModel[E412-15422-2362013]::DataFusion>

s2013/06/23 22:02:00 <MyStateCalModel[E412-15422-2362013]::Calculate>
s2013/06/23 22:02:00 <MyStateCalModel[E412-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]::CompleteCalculation>
s2013/06/23 22:03:00 <MyStateCalModel[E412-15422-2362013]::CompleteCalculation>

 ここで Calculate()メソッドと DataFusion()メソッドの呼ばれた シミュレーション時刻に着目します。

  未来予測型(MyForcastModel)は Calculate がコールされたシミュレーション時刻 と DataFusion がコールされたシミュレーション時刻は異なっています。
   DataFusionシミュレーション時刻 = Calculateシミュレーション時刻+δt 

 一方、
 現状計算型は、Calculate がコールされたシミュレーション時刻 と DataFusion がコールされたシミュレーション時刻は同じです。
   DataFusionシミュレーション時刻 = Calculateシミュレーション時刻


 これは、要素モデル内部の時間の進め方が異なっているためです。


 未来予測型は Calculsteメソッドがコールされた直後、 モデル内のシミュレーション時刻:m_csSimTime をδt 進めます。
 従って、DataFusionメソッドがコールされた時には、モデル内のシミュレーション時刻:m_csSimTime は T+δt となっており、DataFusionメソッド内でデータ送信処理を行うと、T+δt 時刻の情報として データが送信されます。
  

 現状計算型は、 Calculateメソッドがコールされたのち、シミュレーション時刻は進めずに そのままDataFusionメソッドがコールされます。 モデル内のシミュレーション時刻:m_csSimTime を進めるのは、 DataFusionメソッドコールの後になります。
 従って、DataFusionメソッドコール時のモデル内のシミュレーション時刻:m_csSimTime は Calculateの時刻と同一時刻であり、DataFusionメソッド内でデータ送信処理を行うと、T 時刻の情報として データが送信されます。 基本的に現状計算型要素モデルにおいて、δt(m_csDltTime)を計算に使用することはありません。

  


 第3章で作成した要素モデル「MyDynamicWaveModel」は 上流端に T 時刻の各ブロックの水位、流量、流速から T+δt 時刻の水位、流量、流速を計算しています。 このため 未来予測型「McForcastModelBase」から派生しました。

 現状計算型の要素モデル例は、CommonMPと一緒にダウンロードされる「\CommonMP\Source\HYMCO\PublicModelElement」に下記の要素モデルがあります。

 
 McAdjustMultiフォルダー           倍率調整要素モデル: McAdjustMultiModel
 McAdjustSlideフォルダー           スライド調整(I+α)モデル: McAdjustSlideModel
 McDimensionConversionフォルダー     次元変換モデルクラス: McDimensionConversionModel
 McSumフォルダー               入力値加算モデル: McSumModel
 
 
 ディバッグ用CommonMPからソースレベルで動作のトレースが行えます。
  (動作させるためには \CommonMP\Source\HYMCO\PublicModelElement\「公開要素モデルのディバッグ方法.pdf」 の手順に従って、各プロジェクトをディバッグ用CommonMPソリューション:\CommonMP\Source\HYMCO\OptionImpl\ModelDeveloperExpressEdition\TestModelDeveloperMainExp.sln に組み込む必要があります。)


 ここで作成したテスト用のCommonMP計算プロジェクト(Ex08_CommonMP.lzh

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

 


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

初版:2013/06/26 |