namespace CommonMP.HYMCO.Ocean.McOceanSampleModels
{
// ファクトリークラス
public class MzOceanSmplFactory :
McBasicModelFactoryBase
{
//
●演算モデル生成
public override
McCalModel CreateCalModel( HySObjectKind csModelKind
)
{
McCalModel csCalModel =
null;
if( csModelKind == ………
………
else if (csModelKind == MzOceanBaseDefine.FERTILIZER_KIND)
{
// 栄養成分
csCalModel = new
MzOceanNutrient();
}
………
return cCalModel;
}
//
●要素内演算中データクラス生成
public
override McCalInfo CreateCalInfo( HySObjectKind csModelKind
)
{
McCalInfo csCalInfoData =
null;
if( csModelKind == ………
………
else if (csModelKind == MzOceanBaseDefine.FERTILIZER_KIND)
{
//栄養成分
csCalInfoData = new
MzOceanNutrientCalInfo();
}
………
return csCalInfoData ;
}
//
●要素モデルに対する変数値、入出力データの設定等のプロパティ情報生成
public override McCellModelPropertyIF CreateModelProperty(HySID
csLibraryID, HySObjectKind
csModelKind)
{
McCellModelPropertyInfo csRtnCellPrptyDt = new
McCellModelPropertyInfo(csLibraryID, csModelKind);
if(
csModelKind == ………
………
else if (csModelKind == MzOceanBaseDefine.FERTILIZER_KIND)
{ //
栄養成分
……… 各種プロパティ情報の設定
……
csRtnCellPrptyDt.AddInfoType("m_Density_Si", "SiO2密度 [g/cm^3]",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("m_Density_Si",
2.65);
csRtnCellPrptyDt.AddInfoType("m_Dissolve_Si", "SiO2溶解度係数",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("m_Dissolve_Si",
30.0E-3);
……… 各種プロパティ情報の設定
……
// 受信可能なパターンを設定
{
//
デトリタス分解による海洋肥料生成
McTranInfoPattern csTrnPtn =
MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.BCT_FERTILIZER,
csModelKind);
csRtnCellPrptyDt.AddReceivePattern(csTrnPtn); //
受信可能パターンの追加
//
海洋施肥:人間による施肥
csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.HUMAN_FERTILIZER,
csModelKind);
csRtnCellPrptyDt.AddReceivePattern(csTrnPtn); //
受信可能パターンの追加
}
// 送信パターンの設定
{
//
光合成によって消費される栄養素
McTranInfoPattern csTrnPtn =
MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PHOTOSYNTHESIS,
csModelKind);
csRtnCellPrptyDt.AddSendPattern(csTrnPtn);
//
送信可能パターンの追加
}
}
………
return csRtnCellPrptyDt ;
}
//
● 要素モデル初期値データ生成
public
override McPropertyInfoRoot CreateModelInitialInfo(HySID csLibraryID,
HySObjectKind csModelKind)
{
McInitialInfo csRtnDt = new McInitialInfo(csLibraryID,
csModelKind);
if( csModelKind == ………
………
else if (csModelKind == MzOceanBaseDefine.FERTILIZER_KIND)
{
//
栄養成分
this.SetInitMass(ref csRtnDt, 1E-6, 1E-9, 1E-9, 0, 0, 0,
0);
csRtnDt.AddInfoType("m_dDtrtsSize", "デトリタスサイズ[mm]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("m_dDtrtsSize",
30.0E-3);
csRtnDt.AddInfoType("m_dDcty", "密度",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("m_dDcty",
1.2);
}
………
return csRtnDt ; }
//
● 作成した要素モデルをライブラリ管理画面に表示するための情報を生成する。
public override HySDataLinkedList
GetCalModelInfoList()
{
McModelInfo csModelInfo =
null;
…………………
//--
栄養成分
csModelInfo = new
McModelInfo(
(HySID)this.GetFactoryID(),
McModelLibraryDefine.DIVISION_CALCULATION_MODEL, // <--
演算モデルは、必ずこの値にして下さい(LibraryCategoryXML.xmlに記述されている)
new HySObjectKind("CAL_OCEAN_MODELS"), // LibraryCategoryXML.xmlに記述されている
<Category>タグ内のIDに対応します。
MzOceanBaseDefine.FERTILIZER_KIND, //
モデルの識別子
SMPL + MzOceanBaseDefine.FERTILIZER_NAME
//
モデルの名称
);
csModelInfo.SetVersionInf("Ver1.0
");
csModelInfo.SetSummaryInf("栄養素(Nutrient)
");
csModelInfo.SetCreatorInf("S.H.");
csModelInfo.SetIconName(@"Ocean\Nutrient");
csModelInfo.SetManualFileName(@".\Ocean\SampleModelExplanation.pdf"); //
<-- モデル解説書
//--
return
m_csCalModelInforList;
}
} // end of
class
} |