6章 再び要素モデルの作成
6.2 色々な要素モデル
(タンクモデル)
気象庁のホームページで公開されている 土壌雨量指数計算用の直列3段タンクモデル(Ishihara & Kobatake
1979)を、CommonMPの要素モデル化してみます。
原理は 同ホームページを参照して下さい。(インターネット検索エンジンで キーワード ”タンクモデル” ”気象庁” ”土壌雨量指数”で検索して下さい。)
要素モデルは、現在の降雨量から儺時間後の貯留量と流出量を計算するので、未来型の要素モデルとして制作します。
制作する要素モデルは、雨量(mm/Hr)を入力し、その入力に応じて儺(10分)後の流出量量(m3/sec)と、貯留高を計算する仕様とします。
第1タンクの流出孔の高さ:L1,L2 第2タンクの流出孔の高さ:L3, 第3タンクの流出孔の高さ:L4, 各流出孔の側面流出係数:α1,α2,α3,α4,及び、各タンクからの浸透流出孔の浸透係数:β1,β2,β3、及び、メッシュの大きさ(デフォルトは5Km)をプロパティ画面から設定できるようにします。 また、初期値として 各タンクの貯留高:S1,S2,S3、 書くタンクの側面流出量:Q1,Q2,Q3、を与えることができる事とします。 プロパティデータクラス、初期化データクラスはそれぞれ、CommonMPが提供する親クラス:McCellModelPropertyInfo、McInitialInfo を使用します。
作成する要素モデルは、これまで演習用に作成してきたMyExerciseModelプロジェクトに追加します。
要素モデルの制作手順を復習すると
<スタブ作成>
(1)型紙(MyHydraulicsModel、MyHydraulicsCalInfo)をコピーして要素モデルクラスと演算データクラスファイルを作成します。
(2)コピーして作成した2つのファイルを プロジェクトに追加します。
(3)追加した2つのファイルを開き namespace 名称を DLLの namespace 名に一致させます。
(4)要素モデルクラスと演算データクラスの名称を変更します。
(5)ファクトリークラスの下記メソッドに 新しい要素モデルに関連するクラスのインスタンス生成処理を追加します。
@CreateCalModel メソッド
ACreateCalInfo メソッド
BCreateModelProperty メソッド
CCreateModelInitialInfo メソッド
DGetCalModelInfoList メソッド
<演算データクラス内メソッドの実装>
(6)メンバー変数追加
(7)CopyInfo メソッド実装
<要素モデルクラス内メソッドの実装>
(8)プロパティ設定、チェックメソッドの実装
@SetProperty メソッド
AReceiveConnectionCheck、SendConnectionCheck メソッド
(9)初期化(Initialize) メソッドの実装
(10)計算に必要なメソッド実装
@Calculate メソッド
ADataFusion メソッド
となります。
モデルを作成する前に 必要なディファインを MyExerciseModelDefineクラス内に定義しておきます。
public class
MyExerciseModelDefine public static readonly HySID IN_PATTERN_RAIN = new HySID("RainIN");
|
namespace CommonMP.HYMCO.OptionImpl.MyExerciseModelLIB { public class MyTankModel : McForecastModelBase { |
namespace CommonMP.HYMCO.OptionImpl.MyExerciseModelLIB { public class MyTankCalInfo : McCalInfo { |
public class MyExerciseModelFactory :
McBasicModelFactoryBase m_csCalModelInforList.AddLast(csModelInfo); // 演算モデル情報の追加 |
[Serializable] public class MyTankCalInfo : McCalInfo { public double dS1 = 0.0; public double dS2 = 0.0; public double dS3 = 0.0; public double dQ1 = 0.0; public double dQ2 = 0.0; 。。。。。。 public override bool CopyInfo(McCalInfo csOrgInfo) { MyTankCalInfo csOrdDt = csOrgInfo as MyTankCalInfo; if (csOrdDt != null) { dS1 = csOrdDt.dS1; dS2 = csOrdDt.dS2; 。。。。。。。。 |
public class MyTankModel :
McForecastModelBase
csInDt.GetInfo("Q1", ref
m_csMyInf.dQ1); //
プロパティ設定
csPrptyInfo.GetInfo("dL1", ref
m_csMyInf.dL1); for
(long lLp = 0; lLp < lInputDataNum;
lLp++)
//
セル内の0番目の情報を取得します
//q3(t)=α4{S3(t)−L4}
//S1(t+Δt)=(1-β1Δt)・S1(t)−q1(t)・Δt+R
//S2(t+Δt)=(1-β2Δt)・S2(t)−q2(t)・Δt+β1・S1(t)・Δt
//S3(t+Δt)=(1-β3Δt)・S3(t)−q3(t)・Δt+β2・S2(t)・Δt
return 0; |
ここで作成した要素モデル開発プロジェクト(Ex14_CommonMP.lzh)
ダウンロードしたら解凍して生成されたフォルダー「MyExerciseModel」を \CommonMP\Source\HYMCO\OptionImpl\ 下に置きます。
解凍して生成されたプロジェクト:MyExerciseModel.csproj を ディバッグ用ソリューションに追加し、スタートアッププロジェクト(TestModelDeveloperMainExp)の依存関係に追加します。
また、 解凍して生成された、「MyExerciseStep1」フォルダーを \CommonMP\CommonMPData\ 下に置きます。
初版:2013/08/13 |