3章 CommonMPの要素モデルを作成する
3.5 計算結果を 他の要素モデルへ送る
3.5.5 要素モデルへの実装
いよいよ 「MyDynamicWaveModel」の計算結果を 別な要素モデルへ送信できる様にします。
送信するパターンは次の2つを考えます。
(1)下流端出力
下流端からの流量と水位を出力します。
セルは1個で済むので ポイント時系列形式(McTranInfoDefine.SINGLE_CELL_SERIAL)とします。
(2)断面出力
河道全断面の流量、水位、流速を出力します。
河道内の全区間分のセルを準備するため、1次元時系列(McTranInfoDefine.D1_CELL_SERIAL)とします。
送信パターンを決めた所で、この送信パターンを実現するためのコーディングを行います。
(1)送信パターンの設定
送信パターンにはそれを識別するIDが必要です。 このIDはコーディング時に 再々使用するので、 Defineクラスに定義しておきます。
public class
MyExerciseModelDefine { ・・・・ /// <summary>下流端出力</summary> public static readonly HySID OUT_PATTERN_BOTTOM = new HySID("BottomOut"); /// <summary>全セル内容出力</summary> public static readonly HySID OUT_PATTERN_ALL = new HySID("AllCellOut"); ・・・・ } |
McCellModelPropertyIF CreateModelProperty(HySID csLibraryID,
HySObjectKind
csModelKind) |
protected override bool SendConnectionCheck(ref McStructErrorInfo
csErrorInf, long lOutputDataNum, McSendCellDataIF[]
csOutputCellData) { bool bRtn = true; if (lOutputDataNum == 0) { csErrorInf.AddCheckInformationData(this.GetID(), MyExerciseModelDefine.MY_DYNAMIC_MODEL_KIND, "出力側に接続が有りません。"); } |
protected override bool SendConnectionCheck(ref McStructErrorInfo
csErrorInf, long lOutputDataNum, McSendCellDataIF[]
csOutputCellData)
//
断面出力パターンならば
if (lDim1 <=
m_csMyInf.NX) |
protected override long DataFusion(long lOutputDataNum, ref
McSendCellDataIF[]
csOutputCellData) csSndPttnID = csOutputCellData[lLp].GetSendPatternID();
if
(MyExerciseModelDefine.OUT_PATTERN_BOTTOM.Equals(csSndPttnID) ==
true) |
protected override long DataFusion(long lOutputDataNum, ref
McSendCellDataIF[]
csOutputCellData) csSndPttnID = csOutputCellData[lLp].GetSendPatternID();
if (MyExerciseModelDefine.OUT_PATTERN_BOTTOM.Equals(csSndPttnID) ==
true) |
(雑談)
出力メソッドの名前(DataFusion)について
CommonMPの要素モデルで 計算結果を出力するメソッド名は 「DataFusion」です。 数々の要素モデルが計算を行い、それぞれ計算した結果が 出力時に混ざり合って より高度な意味を持つ情報に生まれ変わるという意味で そのような名称にしましたが、 送信者と受信者が1:1に決っている構造を考えると、単純に 「DataOut」の方が解り易かったかもしれません。 全ての情報が統合される様な接続方法(例えば、1対多、多対1、多対多の様な接続方法)が導入されると もう少し「DataFusion」らしくなるかもしれません。
(注意)
同一送信パターンが複数本出ることも可能です。
この場合、注意して頂きたいのは、下図の様に同一送信パターンの送信線が2本出ても、それは決して分岐ではなく、単に情報を送信する先が2箇所あるという事です。
つまり、送信情報は2本とも計算によって算出された情報をそのまま送信します。(接続線が2本あっても 1/2にはしません。)
ここで作成した要素モデル開発プロジェクト(Ex05_MyExerciseModel.lzh)
ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます。
解凍して生成されたプロジェクト:MyExerciseModel.csproj を ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。
またテスト用のCommonMP計算プロジェクト(Ex05_MyExerciseStep1.lzh)
解凍して生成された、「MyExerciseStep1」フォルダーを \CommonMP\CommonMPData\ 下に置きます。
初版:2013/06/23 |