namespace CommonMP.HYMCO.Ocean.McOceanSampleModels
{ public
class MzOceanSmplFactory : McBasicModelFactoryBase //
MzOceanModelBaseFactory
{
///
<para>演算モデルクラス生成</para>
public override McCalModel CreateCalModel(HySObjectKind
csModelKind)
{
McCalModel csCalModel =
null;< /FONT
>
if
(csModelKind ==
MzOceanBaseDefine.NEKTONS_KIND)
{
……………
}
else if (csModelKind == MzOceanBaseDefine.DISSOLVE_GAS_KIND
)
{
csCalModel = new MzOceanDissolveGass
( );
}
//else if (csModelKind == MzOceanBaseDefine.ATMOSPHERE_KIND
)
//{
// <-- 本クラスは McOceanBaseModel.dll
側で生成する為、ここでは生成しない
// MzOceanAtmosphere OceanAtmosphereModel = new
MzOceanAtmosphere< /STRONG
>
();
// MzOceanModelElement.OceanAtmosphereModel =
OceanAtmosphereModel;
// csCalModel =
OceanAtmosphereModel;
//}
………………
return csCalModel;
}
///
<para>要素内演算中データクラス生成</para>
public override McCalInfo CreateCalInfo(HySObjectKind
csModelKind)
{
McCalInfo csCalInfoData =
null;< /FONT
>
if
(csModelKind ==
MzOceanBaseDefine.NEKTONS_KIND)
{
……………
}
else if (csModelKind == MzOceanBaseDefine.DISSOLVE_GAS_KIND
)
{
csCalInfoData = new MzOceanDissolveGassCalInfo
(
);
}
//else if (csModelKind == MzOceanBaseDefine.ATMOSPHERE_KIND
)
//{
// <-- 本クラスは McOceanBaseModel.dll
側で生成する為、ここでは生成しない
// csCalInfoData = new
MzOceanAtmosphereCalInfo
(
);
//}
………………
return csCalInfoData;
}
///
<para>モデルプロパティ表示/設定情報クラス生成</para>
public override McCellModelPropertyIF CreateModelProperty(HySID
csLibraryID, HySObjectKind
csModelKind)
{
McCellModelPropertyInfo csRtnCellPrptyDt = new
McCellModelPropertyInfo(csLibraryID,
csModelKind);
………………
if
(csModelKind ==
MzOceanBaseDefine.OCEAN_COLUMN_KIND)
{ // 海洋の層 (Ocean
layer)クラス
……………
}
else if (csModelKind == MzOceanBaseDefine.DISSOLVE_GAS_KIND
)
{ // 溶融ガス(Gas)クラス
csRtnCellPrptyDt.AddInfoType("O2_L0", "真光層へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L0",
1.0);
csRtnCellPrptyDt.AddInfoType("O2_L1", "透光層へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L1",
0.01E-2);
csRtnCellPrptyDt.AddInfoType("O2_L2", "中深層へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L2",
0.01E-2);
csRtnCellPrptyDt.AddInfoType("O2_L3", "漸深層へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L3",
0.025E-1);
csRtnCellPrptyDt.AddInfoType("O2_L4", "深海層へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L4",
0.05E-1);
csRtnCellPrptyDt.AddInfoType("O2_L5", "海底へのO2流れ込み:海洋ベルトコンベア等で運ばれてくるO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("O2_L5", 0.025E-2);
csRtnCellPrptyDt.AddInfoType("CO2_L0",
"真光層へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("CO2_L0",
1.0);
csRtnCellPrptyDt.AddInfoType("CO2_L1",
"透光層へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("CO2_L1",
0.01E-2);
csRtnCellPrptyDt.AddInfoType("CO2_L2",
"中深層へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("CO2_L2",
0.01E-2);
csRtnCellPrptyDt.AddInfoType("CO2_L3",
"漸深層へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("OC2_L3",
0.025E-1);
csRtnCellPrptyDt.AddInfoType("CO2_L4",
"深海層へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("CO2_L4",
0.05E-1);
csRtnCellPrptyDt.AddInfoType("CO2_L5",
"海底へのCO2流れ込み:海洋ベルトコンベア等で運び出されるCO2の量",
McDefine.ValKind.DOUBLE);
csRtnCellPrptyDt.SetInfo("CO2_L5", 0.025E-2);
//
層設定
this.SetLayer(ref csRtnCellPrptyDt, 7, 6000); //, 10 * 10);
// 受信可能なパターンの設定
{
// 大気からの溶け込み
McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.GASS_DISSOLVE<
/FONT
>
,
csModelKind);
csRtnCellPrptyDt.AddReceivePattern
(csTrnPtn); //
受信可能パターンの追加
}
// 送信パターンの設定
{
// 光合成によるCO2吸収
McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.CO2_ABSORPTION<
/FONT
>
,
csModelKind);
csRtnCellPrptyDt.AddSendPattern (csTrnPtn); //
送信可能パターンの追加
// 呼吸
csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.BREATHING< /FONT
> ,
csModelKind);
csRtnCellPrptyDt.AddSendPattern (csTrnPtn); //
受信可能パターンの追加
}
}
//----------------
//else if (csModelKind == MzOceanBaseDefine.ATMOSPHERE_KIND
)
//{ //
大気圏(atmosphere)クラス
// <-- 本クラスは McOceanBaseModel.dll
側で生成する為、ここでは生成しない
// //
層設定
// this.SetLayer(ref csRtnCellPrptyDt, 7, 6000); //, 10
*
10);
// // 受信
可能なパターン
//
{
// //
人間の行為によるCO2排出量
// McTranInfoPattern csTrnPtn =
MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.CO2_EMISSION< /FONT
>
,
csModelKind);
//
csRtnCellPrptyDt.AddReceivePattern
(csTrnPtn); //
受信可能パターンの追加
//
}
// // 送信
パターンの設定
//
{
// //
大気からの溶け込み
// McTranInfoPattern csTrnPtn =
MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.GASS_DISSOLVE< /FONT
>
,
csModelKind);
//
csRtnCellPrptyDt.AddSendPattern (csTrnPtn);
//
// //
CO2調査
// csTrnPtn =
MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.RESEARCH_CO2_ABSORPTION,
csModelKind);
//
csRtnCellPrptyDt.AddSendPattern(csTrnPtn);
//
}
//}
………………
return csRtnCellPrptyDt;
}
///
<para>モデル初期化表示/設定情報生成</para>
public override McPropertyInfoRoot CreateModelInitialInfo(HySID
csLibraryID, HySObjectKind
csModelKind)
{
if
(this.EqualFactory(csLibraryID) ==
false)
{
return
null;
}
McInitialInfo csRtnDt =
new McInitialInfo(csLibraryID, csModelKind);<
/FONT
>
if
(csModelKind ==
MzOceanBaseDefine.OCEAN_COLUMN_KIND)
{
……………
}
else if (csModelKind == MzOceanBaseDefine.DISSOLVE_GAS_KIND
)
{ //
溶融ガス(Gas)クラス
csRtnDt = new McInitialInfo(csLibraryID,
csModelKind);
csRtnDt.AddInfoType("O2_TotalMass_L0", "海面表層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L0",
8.11);
csRtnDt.AddInfoType("O2_TotalMass_L1", "真光層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L1",
2.0);
csRtnDt.AddInfoType("O2_TotalMass_L2", "透光層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L2",
5.0);
csRtnDt.AddInfoType("O2_TotalMass_L3", "中深層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L3",
5.0);
csRtnDt.AddInfoType("O2_TotalMass_L4", "漸深層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L4",
6.0);
csRtnDt.AddInfoType("O2_TotalMass_L5", "深海層:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L5",
6.0);
csRtnDt.AddInfoType("O2_TotalMass_L6", "海底:O2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("O2_TotalMass_L6", 6.0);
csRtnDt.AddInfoType("CO2_TotalMass_L0", "海面表層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L0",
1.452);
csRtnDt.AddInfoType("CO2_TotalMass_L1", "真光層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L1",
2.0);
csRtnDt.AddInfoType("CO2_TotalMass_L2", "透光層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L2",
3.0);
csRtnDt.AddInfoType("CO2_TotalMass_L3", "中深層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L3",
3.0);
csRtnDt.AddInfoType("CO2_TotalMass_L4", "漸深層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L4",
4.0);
csRtnDt.AddInfoType("CO2_TotalMass_L5", "深海層:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L5",
4.0);
csRtnDt.AddInfoType("CO2_TotalMass_L6", "海底:CO2_初期存在量[g/m3]",
McDefine.ValKind.DOUBLE);
csRtnDt.SetInfo("CO2_TotalMass_L6", 4.0);
}
//----------------
//else if (csModelKind == MzOceanBaseDefine.ATMOSPHERE_KIND
)
//{
// <-- 本クラスは McOceanBaseModel.dll
側で生成する為、ここでは生成しない
// csRtnDt = new McInitialInfo(csLibraryID,
csModelKind);
//}
………………
return csRtnDt;
}
///
<para>モデル情報提供</para>
public override HySDataLinkedList
GetCalModelInfoList()
{
McModelInfo csModelInfo =
null;< /FONT
>
………………
//--
csModelInfo = new
McModelInfo(
(HySID)this.GetFactoryID(),
McModelLibraryDefine.DIVISION_CALCULATION_MODEL, // <--
演算モデルは、必ずこの値にして下さい(LibraryCategoryXML.xmlに記述されている)
new HySObjectKind("CAL_OCEAN_MODELS"), // LibraryCategoryXML.xmlに記述されている
<Category>タグ内のIDに対応します。
MzOceanBaseDefine.DISSOLVE_GAS_KIND
, //
モデルの識別子 MzOceanBaseDefine.DISSOLVE_GAS_NAME
//
モデルの名称
);
csModelInfo.SetVersionInf("Ver1.0
");
csModelInfo.SetSummaryInf("溶融ガス(主にO2,CO2)");
csModelInfo.SetCreatorInf("S.H.");
csModelInfo.SetIconName(@"Ocean\dissolveGas");
csModelInfo.SetManualFileName(@".\Ocean\SampleModelExplanation.pdf"); //
<-- モデル解説書
m_csCalModelInforList.AddLast(csModelInfo);
//--
////--
// <-- 本クラスは McOceanBaseModel.dll
側で生成する為、ここでは生成しない
//csModelInfo = new
McModelInfo(
//
(HySID)this.GetFactoryID(),
//
McModelLibraryDefine.DIVISION_CALCULATION_MODEL, // <--
演算モデルは、必ずこの値にして下さい(LibraryCategoryXML.xmlに記述されている)
// new
HySObjectKind("CAL_OCEAN_MODELS"), // LibraryCategoryXML.xmlに記述されている
<Category>タグ内のIDに対応します。
// MzOceanBaseDefine.ATMOSPHERE_KIND
, //
モデルの識別子
// MzOceanBaseDefine.ATMOSPHERE_NAME
//
モデルの名称
//
);
//csModelInfo.SetVersionInf("Ver1.0
");
//csModelInfo.SetSummaryInf("大気圏(atmosphere)
");
//csModelInfo.SetCreatorInf("S.H.");
//csModelInfo.SetIconName(@"Ocean\Atmosphere");
//csModelInfo.SetManualFileName(@".\Ocean\SampleModelExplanation.pdf"); //
<--
モデル解説書
//m_csCalModelInforList.AddLast(csModelInfo);
………………
return
m_csCalModelInforList;
}
}
}
|