4章 CommonMPにおける計算制御 その1
4.5 制御に関連する注意/補足事項
(送信するデータの時刻の独自設定)
この頁は、初心者向けの内容ではないので、必要のない方は読み飛ばして下さい。
(より高度な要素モデルを作成する必要が生じた時に参考にして下さい)
(1) 送信するデータの時刻を独自で設定する方法
要素モデルからデータを送信する際、送信データには 要素モデル内の現在のシミュレーション時刻(m_csSimTime)
が自動的に設定されます。 しかし、処理によっては、現在のシミュレーション時刻以外の情報も送信したい場合があるかもしれません。
現在時刻:T として、 δt 前の時刻、δt 後の時刻の 各データを送信する場合を例にとり 任意の時刻の情報を送信する方法を説明します。
送信側接続線に対して、あるデータを送信する手順は 次の4つの手順で一纏まりです。
@送信する時刻データをセットする。 (SetCurrentTimeメソッド)
A送信するデータを格納するレコードを生成する。(PrepareSendCellD1メソッド等)
Bレコード内のセルに送信するデータを設定する。
Cレコードを 送信する回線に追加する。(SendData メソッド)
通常はAとBの処理を派生クラス側で行い、@、Cの処理は 親クラス側で行なっています。
親クラスでは、@に設定する時刻は 現在のシミュレーション時刻(m_csSimTime)です。
そこで、任意の時刻を送信する場合には、 上記@〜Cの処理を自前で行えば良いということになります。
送りたい時刻が 現在時刻より δt 前の時刻:prvTime
であるときには、以下の様なコーディングになります。
McSendCellDataIF[] csOutputCellData ←引数 HySCellData[] csSndCellData; csSndCellData = csOutputCellData[lLp].PrepareSendCellD1(); // レコードを生成(1次元配列の場合) csSndCellData[0].m_dData[0] = 。。。。。セルに情報を設定する ・・・・・・・ |
McSendCellDataIF[] csOutputCellData ←引数 // ↓↓ 以降は通常の処理と同じ ↓↓ |
McSendCellDataIF[]
csOutputCellData ←引数 HySCellData[] csSndCellData; csSndCellData = csOutputCellData[lLp].PrepareSendCellD1(); // レコードを生成(1次元配列の場合) csSndCellData[0].m_dData[0] = 。。。。。セルに情報を設定する csOutputCellData[lLp].SendData(); // 接続線にレコードを追加する。 // 現在時刻のデータを送信 csOutputCellData[lLp].SetCurrentTime( this.m_csSimTime ); // 時刻を 現在時刻 に設定 // ↓↓ 以降は通常の処理と同じ ↓↓ HySCellData[] csSndCellData; csSndCellData = csOutputCellData[lLp].PrepareSendCellD1(); // レコードを生成(1次元配列の場合) csSndCellData[0].m_dData[0] = 。。。。。セルに情報を設定する csOutputCellData[lLp].SendData(); // 接続線にレコードを追加する。 // δt後のデータを送信 HySTime nxtTime = this.m_csSimTime + this.m_csDltTime; csOutputCellData[lLp].SetCurrentTime( nxtTime ); // 時刻を nxtTime に設定 //
↓↓ 以降は通常の処理と同じ ↓↓ |
public override bool IsConverged(
) { bool bRtn = base.IsConverged( ); // 親クラスのIsConverged()処理を行わせる if( bRtn != true ) { // 親クラスの判断では 計算が必要と判断された場合 // 独自の判断を加えて bRtn の値を設定する 。。。。。。。。。 } return bRtn ; } |
コーディングの中で this.m_csSimTime の様に "this" が使用されていますが、this は自分自身を表すキーワードです。 this は省略可能です。
一方、base.IsConverged( ); の様に "base"は 親クラスを意味します。 オーバーライドしたメソッド内で 親クラスのオーバライド前の処理をコールしたい時等で用います。.
初版:2013/06/26 |