蛇島伸吾メール蛇島伸吾     (前頁)<<      >>(次頁)          (Up)

4章  要素モデル自作の方法
 4.2  海洋モデル用要素モデルの親クラス(親モデルを提供するプレジェクト:McOceanBaseModel.csproj 」)



 海洋関連の要素モデルを作成するために、海洋に関連する共通の処理をまとめて親クラスを作成し、その派生として個々の要素モデルを作成します。
 本モデル作成においては、海洋は水深6000m以上深海領域を対象としています。
 そこで、海を単位面積の柱状に分割し、さらにその一本の柱を下記水深に分割します。 

水深別に表層混合層(surface mixed zone),真光層(Epipelagic zone),透光層(disphotic zone),中深層(Mesopelagic zone),漸深層(Bathypelagic zone),深海層(Abyssopelagic zone),海底(Bottom)に分割する
  図4.2.1 海洋モデルでは、一本の柱状の領域を水深別に分割する
            
       表4.2.1  分割する層の名称と水深

水深[m]

名称

備考

0 〜 15 

表層混合層
(surface mixed zone) 

海面の風等により海面付近の海水と、ある程度の深さの海水が混ぜられる層である。この深度では、植物プランクトンは光合成に必要な十分な光を受けられるものとする。

15 〜 100 

真光層
(Epipelagic zone)
 

植物プランクトンの光合成が可能な領域である。海水の透明度に依存するが、200mを過ぎると、ほぼ光合成は不可能となる。

100 〜 200 

透光層
(disphotic zone)
 

生物が光を感じる限界(海面の 1/109 くらいの光強度)までの層を示す。本モデルでは、植物プランクトンの光合成が可能な範囲(真光層)とは区別する。

200 〜 1000

中深層
(Mesopelagic zone) 

 

1000 〜 3000

漸深層
(Bathypelagic zone)
 

水温は4℃程度であり、光は全く届かない。生物の密度は低く、基礎生産はほとんどなされない。

3000 〜 5999 

深海層
(Abyssopelagic zone)
 

暗闇、貧栄養、低水温(2-4 ℃)の環境であり、生物有機物(バイオマス)は、上層からの沈降により供給される栄養素の量に大きく依存している。また、有孔虫などの動物プランクトンの石灰質の殻等は、4000mを超える深さに達すると溶解してしまうためシリカ成分が主な成分になる。

5999 〜 6000

海底
(Bottom)
 

上層からのデトリタスが蓄積する底。底部で生息する生物の他に、貴重なレアメタル等も存在する。

 この一つの柱(MzOceanAreaColumnModel)を単位として生態系モデルを作成します。
 将来的には、柱と柱の間の関係(例えば、海流による海水の移動等)を考えますが、最初は1つの柱のみを考えます。   

 海洋関連の親モデルを提供するプレジェクトとしは、「McOceanBaseModel.csproj 」を作成します。
 このプロジェクトでは、下記を行うクラスを提供します。

  @共通の名称や定数等の定義
     MzOceanBaseDefineクラス内に 海洋モデルに必要と思われる要素モデルの名称とID, 要素モデル間の接続の種類を表す名称とID 等を定義。
  A海洋関係演算モデル間を繋ぐ接続要素のモデル定義(接続要素の作成)
  B海洋関係生態系モデルを構成する要素モデルの親クラス(MzOceanModelElement)とその演算データ親クラス(MzOceanModelElementCalInfo)
  C海洋関係生態系モデルに関与する人間の行動を要素モデル化する場合の親クラス(MzOceanHumanAct)とその演算データ親クラス(MzOceanHumanActCalInfo)
  D経済関連要素モデルの親クラス(MzCashflowModelElement)とその演算データ親クラス(MzCashflowModelElementCalInfo)
  E海の地域1単位を示す柱としての要素モデル(MzOceanAreaColumnModel)とその演算データ(MzOceanAreaColumnModelCalInfo)
  F海と接する大気圏要素モデル(MzOceanAtmosphere)とその演算データ(MzOceanAtmosphereCalInfo)

  
 図4.2.2 プロジェクト 「McOceanBaseModel.csproj 」内のソースファイル

●共通の名称や定数等の定義(MzOceanBaseDefineクラス内での定義内容)
 要素モデルを作成する可能性のあるものとして、以下の名称とID(ユニーク識別子)を定義しておきます。
(1)海洋の生態系を構成する要素モデル
  ・植物プランクトン(Phytoplankton)、・珪藻類(Diatoms)、・円石藻 えんせきそう(Coccolithales)、・動物プランクトン(Zpoplankton)、 ・カイアシ類(Copepods) 動物プランクトンの一種、・ネクトン類(Nekton) (魚類含む)、・細菌(Bacteria)、・ウイルス(Virus)、・デトリタス(Detritus)、・海中の栄養素(Nutrient)、・溶融ガス(主にO2,CO2)、・溶存有機物(DOM)、・粒子状有機物(POM)、・粒子状無機物(Inorganic_Particulates_Mdl)、・海の地域1単位面(Ocean Column)、・大気圏(atmosphere) 、・海面(sea surface)

(2)人間の海洋上での行為
  ・人間による施肥、・人間による漁獲、・C02排出調査、・その他の洋上での人間活動(不法操業取り締まり等) 

(3)陸上での経済活動に関連する組織や社会
  ・遠海洋開発事業者、・海洋肥料工場、・バイオ燃料生成(洋上)プラント、・陸上の社会(経済活動)、・日本国、・諸外国

●接続要素の作成
 要素モデル間の接続として、CommonMP従来の一方向接続に対し、双方向接続を追加したことを述べました。

 先ず伝送データの定義として、先のMzOceanBaseDefineクラス内に下記の伝送データ識別子を定義します。
(1)海洋の生態系を構成する要素モデル間の伝送データ
 ・気体の大気圏からの海洋への溶け込み、・光合成による栄養吸収(植物プランクトンによる)、・光合成CO2吸収、・呼吸(一般生物)
 ・捕食、・腐敗decompose又は消化digestion、・排泄excretion又は死death、・感染infection

(2)人間による海洋環境への働きかけ
 ・人間の施肥、・調査:C02吸収量 、・C02排出(人間活動による) 

(3)経済活動における通貨、物品等のながれ
 ・売買、・キャッシュフロー、・投資、・雇用、・税金

 次に定義された識別子に対応する伝送データを設定します。これは、伝送情報パターンプロパティ(McTranInfoPattern)クラスに設定されます。
 識別子毎に対応する伝送情報パターンプロパティ(McTranInfoPattern)の生成は、伝送情報パターンファクトリ( MzFlowObjBaseFactory )が行います。
 例として 「捕食」の伝送パターンを生成する場合を考えます。

「捕食」に関する伝送情報パターンは、下記の通りで取得します。
ソースコード:4.2.1
 
McTranInfoPattern csTrnPtn
  = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PREDATION,  csModelKind);
                                                                                        
                        伝送パターン識別子「捕食」  本接続を設定する要素モデル種別

 ここで、生成する論理をもう少し詳しく見ると、下記のような論理となっています。
ソースコード:4.2.2

static public McTranInfoPattern CreateFlow(
   HySID objID,     <-- 伝送パターン識別子
   HySObjectKind csModelKind,
   string sName = "")
{
  ………
// 生成する伝送データパターン
McTranInfoPattern csTrnPtn = null;

if (objID == MzOceanBaseDefine.PREDATION )
{   // 伝送パターン識別子が捕食の場合
  // 「捕食」は双方向伝送パターンなので、伝送データパターンの派生として、双方向伝送パターンを生成する。
  McMutualTranInfoPattern csMutualTrnPtn = McExpansionModelFactory.CreateMutualTranInfo(
         "捕食/被捕食",   objID ,  McTranInfoDefine.MUTUAL_D1_TRAN_SERIAL,  "捕食(捕食量) ",  "被捕食(必要量) " );
      ↑          ↑               ↑                    ↑            ↑
  伝送データ名称  伝送パターン識別子  1次元双方向伝送配列データ      上→下方向名称   下→上方向名称

  // 上流要素モデル → 下流要素モデルへ伝送する情報
  {
     // 順方向伝送データ取得(上→下方向伝送データ)
     McTranInfoPattern csDownTrnPtn = csMutualTrnPtn.GetDwnPattern();
     // セル内変数設定
     HySDataCharacteristicInCell csCellChara = csDownTrnPtn.CreateCellDataCharacteristic(5);  // セル内の変数は5個
     {
         csCellChara.SetDataKind(0, "捕食した有機物", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
         csCellChara.SetDataKind(1, "捕食した有機物中の炭素量", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
         csCellChara.SetDataKind(2, "捕食した無機物", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
         csCellChara.SetDataKind(3, "現在の全有機物量(資源量)", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3");
         csCellChara.SetDataKind(4, "捕食物の密度", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/cm3"); 
     }
     csDownTrnPtn.SetCellDataCharacteristic(csCellChara);
     csDownTrnPtn.SetInterpolateType(HySDefine.InterpolateType.LINEAR); // 内挿方法設定
  }
  // 下流要素モデル → 上流要素モデルへ伝送する情報
  {
     // 逆方向伝送データ取得(下→上方向伝送データ)
     McTranInfoPattern csUppTrnPtn = csMutualTrnPtn.GetUpPattern();
     // セル内変数設定
     HySDataCharacteristicInCell csCellChara = csUppTrnPtn.CreateCellDataCharacteristic(1);  // セル内の変数は1個
     {
         csCellChara.SetDataKind(0, "要求する有機物量", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3)"); 
     }
     csUppTrnPtn.SetCellDataCharacteristic(csCellChara);
     csUppTrnPtn.SetInterpolateType(HySDefine.InterpolateType.LINEAR); // 内挿方法設定
  }

  csTrnPtn = csMutualTrnPtn;

  ………


 上記プログラムでは、
 上流要素モデルから下流要素モデルへは、5つ変数を持つセルで接続され、そのセル内の変数は順に、捕食した有機物(g/m3) 、捕食した有機物内の炭素量(g/m3)、捕食した無機物(g/m3)、現在の資源量[被捕獲物の総量](g/m3)、捕食物の密度(g/cm3)であり、
 下流要素モデルから上流要素モデルへは1つの変数を持つセルでせ接続されて、そのセル内の変数は 要求する有機物量(捕食したい量)(g/m3)
 となります。 
 これを、CommonMPの伝送データ設定画面(プロパティ画面)で見ると下記の通りとなります。
 
 植物プランクトンと動物プランクトンの接続   
   図4.2.3 (例)動物プランクトンと植物プランクトンの接続プロパティ画面

 ここで、生成した接続プロパティ情報は、
 植物プランクトン(被捕食側:上流側)に対しては、送信パターンとして設定します。
ソースコード:4.2.3

 McCellModelPropertyInfo csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);
   ………
 if (csModelKind == MzOceanBaseDefine.PHYTOPLANKTONS_KIND)
 {   // 植物プランクトン(Phytoplankton)クラス
   ………
     // 送信可能なパターンの設定
     {
         // 被捕食
         McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PREDATION, csModelKind);
         csRtnCellPrptyDt.AddSendPattern(csTrnPtn);  // 送信可能パターンの追加
     }
   ………
}  


 動物プランクトン(捕食側:下流側)に対して、は受信パターンとして設定します。
ソースコード:4.2.4

 McCellModelPropertyInfo csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);
   ………
 if (csModelKind == MzOceanBaseDefine.ZOOPLANKTONS_KIND)
 {   // 動物プランクトン(Zpoplankton)クラス
   ………
     // 受信可能なパターンの設定
     {
        // 捕食
        McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PREDATION, csModelKind);
        csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);    // 受信可能パターンの追加
     }
   ………
 }
   ………
}


 上記は、双方向接続でしたが、一方向接続では下記の通りに設定します。
 例として、「排泄excretion又は死death」の場合を考えます。
「捕食」に関する伝送情報パターンは、下記の通りで取得します。
ソースコード:4.2.6
 
McTranInfoPattern csTrnPtn
  = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.EXCRETION_DEATH,  csModelKind);
                                                                                             
                        伝送パターン識別子「排泄又は死」   本接続を設定する要素モデル種別

 ここで、生成する論理をもう少し詳しく見ると、下記のような論理となっています。
ソースコード:4.2.7

static public McTranInfoPattern CreateFlow(
   HySID objID,     <-- 伝送パターン識別子
   HySObjectKind csModelKind,
   string sName = "")
{
  ………
// 生成する伝送データパターン
McTranInfoPattern csTrnPtn = null;

if (objID == MzOceanBaseDefine.EXCRETION_DEATH )
{   // 伝送パターン識別子が排泄または死の場合

  csTrnPtn  = csRtnCellPrptyDt.CreateTranInforPattern(
         objID,  McTranInfoDefine.D1_CELL_SERIAL,  "死:Death 又は、排泄:excretion ")  as McTranInfoPattern;
     ↑               ↑                  ↑            
 伝送パターン識別子  1次元伝送配列データ           名称

  // 上流要素モデル → 下流要素モデルへ伝送する情報
  {
        // セル内変数設定
        HySDataCharacteristicInCell csCellChara = csTrnPtn.CreateCellDataCharacteristic(8);
        {
            csCellChara.SetDataKind(0, "排泄物:有機物", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
            csCellChara.SetDataKind(1, "排泄物:有機物中の炭素量", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
            csCellChara.SetDataKind(2, "排泄物:平均サイズ", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "mm"); 
            csCellChara.SetDataKind(3, "排泄物:密度", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/cm3"); 
            csCellChara.SetDataKind(4, "死体:有機物", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
            csCellChara.SetDataKind(5, "死体:有機物中の炭素量", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/m3"); 
            csCellChara.SetDataKind(6, "死体:平均サイズ", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "mm"); 
            csCellChara.SetDataKind(7, "死体:密度", HySDataCharacteristicInCell.DATA_KIND.ANY_VALUE, "g/cm3"); 
        }
        csTrnPtn.SetCellDataCharacteristic(csCellChara);
        csTrnPtn.SetInterpolateType(HySDefine.InterpolateType.LINEAR); // 内挿方法設定

  }
  ………


 上記プログラムでは、
 上流要素モデルから下流要素モデルへは、8つ変数を持つセルで接続され、そのセル内の変数は順に、
  排泄物:有機物(g/m3) 、排泄物:有機物中の炭素量(g/m3) 、排泄物:平均サイズ(mm) 、排泄物:平均密度(g/cm3)
  死体:有機物(g/m3) 、死体:有機物中の炭素量(g/m3) 、死体:平均サイズ(mm) 、死体:平均密度(g/cm3)
 となります。

 これを、CommonMPの伝送データ設定画面(プロパティ画面)で見ると下記の通りとなります。

 動物プランクトンとデトリタスを接続する  
   図4.2.4 (例)動物プランクトンとデトリタスの接続プロパティ画面

 ここで、生成した接続プロパティ情報は、
 動物プランクトン(上流側)に対しては、送信パターンとして設定します。
ソースコード:4.2.8

 McCellModelPropertyInfo csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);
   ………
 if (csModelKind == MzOceanBaseDefine.ZOOPLANKTONS_KIND)
 {   //  動物プランクトン(Zpoplankton)クラス
   ………
     // 送信可能なパターンの設定
     {
         // 排泄 or 死
         McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.EXCRETION_DEATH, csModelKind);
         csRtnCellPrptyDt.AddSendPattern(csTrnPtn);  // 送信可能パターンの追加
     }
   ………
}  


 デトリタス(下流側)に対して、は受信パターンとして設定します。
ソースコード:4.2.9

 McCellModelPropertyInfo csRtnCellPrptyDt = new McCellModelPropertyInfo(csLibraryID, csModelKind);
   ………
 if (csModelKind == MzOceanBaseDefine.DETRITUS_KIND)
 {   // デトリタス(Detritus)クラス
   ………
     // 受信可能なパターンの設定
     {
        // 排泄 or 死
        McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.EXCRETION_DEATH, csModelKind);
        csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);    // 受信可能パターンの追加
     }
   ………
 }
   ………
}


 「McOceanBaseModel.csproj 」内であらかじめ準備した伝送パターンは下記の通りです。

    表4.2.2 伝送パターン

伝送パターン名

種別

順方向接続

逆方向接続

 捕食
MzOceanBaseDefine.PREDATION
 双方向 "捕食した有機物", "g/m3"
"捕食した有機物中の炭素量", "g/m3"
"捕食した無機物", "g/m3"
"現在の全有機物量(資源量)", "g/m3"
"捕食物の密度", "g/cm3"
 "要求する有機物量", "g/m3"
 死:Death 又は、排泄:excretion
 MzOceanBaseDefine.EXCRETION_DEATH
 一方向 "排泄物:有機物",  "g/m3" 
"排泄物:有機物中の炭素量",  "g/m3"
"排泄物:平均サイズ",   "mm"
"排泄物:密度",   "g/cm3"
"死体:有機物",   "g/m3 
"死体:有機物中の炭素量",  "g/m3" 
"死体:平均サイズ",  "mm"
"死体:密度",   "g/cm3"

―――

 分解 又は 腐敗
MzOceanBaseDefine.DECOMPOSE 
(細菌がデトリタスを分解する場合の伝送パターン)
 双方向 "有機物分解物量",  "g/m3"
"現在の全有機物量(資源量)", "g/m3"
"原料沈降量(割合)",  "0〜1"
"捕食物の密度", "g/cm3"
"捕食した有機物中の炭素量", "g/m3  
"N含有量", "g/cm3"
"P含有量",  "g/cm3"
"Si含有量",  "g/cm3"
"Fe含有量",  "g/cm3"
"予備データ",  "--" 
"必要有機物(原料)", "g/m3" 
 呼吸
MzOceanBaseDefine.BREATHING
 双方向 "O2", "g/m3" "要求O2", "g/m3"
"排出CO2",  "g/m3"
"その他の排出ガス:1",  "g/m3"
"その他の排出ガス:2",  "g/m3"
 光合成CO2吸収
MzOceanBaseDefine.CO2_ABSORPTION
 双方向 "CO2", "g/m3" "O2 排出量", "g/m3"
"CO2 要求量","g/m3"
 各種ガス大気からの吸収/
 大気への放出
MzOceanBaseDefine.GASS_DISSOLVE
 双方向 "O2:海水へ溶け込む", "g/m2"
"CO2:海水へ溶け込む",  "g/m2"
"その他(CH4等):海水へ溶け込む",  "g/m2"
"O2:海水から放出", "g/m2"
"CO2:海水から放出",  "g/m2"
"現在の溶け込み量:O2", "g/m3"
"現在の溶け込み量:CO2",  "g/m3"
"その他(CH4等):海水から放出",  "g/m2"
 光合成による養分使用
MzOceanBaseDefine.PHOTOSYNTHESIS
 双方向 "消費:N", "g/m3"
"消費:P", "g/m3"
"消費:Si", "g/m3"
"消費:Fe", "g/m3"
"要求:N", "g/m3"
"要求:P", "g/m3"
"要求:Si", "g/m3"
"要求:Fe", "g/m3"
 有機物分解による肥料要素生成
MzOceanBaseDefine.BCT_FERTILIZER
 一方向  "N", "g/m3"
 "P", "g/m3"
 "Si", "g/m3"
 "Fe", "g/m3"

―――

 人間による海洋施肥
MzOceanBaseDefine.HUMAN_FERTILIZER
 一方向 "N", "g/m3"
"P", "g/m3"
"Si", "g/m3"
"Si_Size, "mm"
"Fe", "g/m3"
"Fe_Size", "mm"

―――

 感染(ウイルス感染)
MzOceanBaseDefine.INFECTION
 ?    
 生産品:Product
MzOceanBaseDefine.PRODUCT
 双方向 "主)生産品","t"
"現在単価", "万円/取引単位"
"共有能力", "t"
"副)生産品1:" "t"
"副)生産品2:", "t"
"購入代金/費用","億円"
"発注(次回購入予定)", "億円"
 キャッシュフロー
McTranInfoDefine.CASH
 双方向 "発注額", "億円"
"支払額", "億円"
"請求額","億円"
"見積額(次回)","億円"
"生産への寄与率", "0.0〜1.0"
"調査・サービス等の結果1","任意単位"
"調査・サービス等の結果2","任意単位"
"調査・サービス等の結果3","任意単位"
 売買
MzOceanBaseDefine.DEALING
 双方向 "納品(物品/成果)","億円"
"現在単価", "万円/取引単位"
"供給能力",億円"
"購入代金/費用","億円"
"発注(次回購入予定)","億円"
 生産品:Product
MzOceanBaseDefine.PRODUCT
 双方向 "主)生産品",  "t"
"現在単価", "万円/取引単位"
"供給能力","t"
"副)生産品1:","t"
"副)生産品2:", "t" 
"購入代金/費用", @"億円"
"発注(次回購入予定)", @"億円"
 
 CO2排出権
MzOceanBaseDefine.CO2_EMISSION_CREDIT
 双方向 "CO2排出権",  "権利数[t]"
"CO2排出権単価", "億円/取引単位"
"CO2排出権供給能力","[t]" 
"購入代金/費用", @"億円"
"発注(次回購入予定)", "億円"  
 雇用
MzOceanBaseDefine.SC_EMPLOYMENT
 双方向 "賃金支払い額","億円"
"次の雇用数", "人・日"
"次の賃金単価","万円/人/日" 
"応募雇用", "人・日"
 税金
MzOceanBaseDefine.SC_TAX
 双方向 "税金支払額","億円"
"税金支払申告額:性善説に基づく","億円"
"利益申告","億円"  
"税金請求額", "億円"
"支払い期日:請求日からX日後","日" 
 投資  ?    
 バイオ燃料
MzOceanBaseDefine.PRODUCT_BIO_FUEL
 双方向 "バイオ燃料", "t"
"現在単価","万円/取引単位"
"供給能力","t" 
"購入代金/費用","億円"
"発注(次回購入予定)","億円"
 食品
McTranInfoDefine.MUTUAL_D1_TRAN_SERIAL
 双方向 "食品", "t"
"現在単価","万円/取引単位"
"供給能力","t" 
"購入代金/費用","億円"
"発注(次回購入予定)","億円"
       
       
       
       


●海洋モデルに関連するモデルのクラス体系
 図4.2.5に「McOceanBaseModel.csproj 」が提供するクラスを示します。

  
   図4.2.5  海洋モデル作成に関連するクラス体系
  
 例えば、植物プランクトンが、図4.2.6に示す様に「人間による採取」、「動物プランクトンによる捕食」、「小魚による捕食」の様に複数から捕食される場合を考えます。植物プランクトンから移動する有機物量は、「植物プランクトン」要素モデルが計算して送信しますがその量は、下流の「人間」、「動物プランクトン」、「小魚」から要求された量に応じて計算されます。図4.2.6では人間の採取で10、動物プランクトンから35、小魚から15、合計で60の要求があります。しかしながら、植物プランクトン自身は総量で60しかありません。ここで、捕食者によって植物プランクトンを捕獲される確率を10%とすると、植物プランクトンが提供可能な量は 60/10=6 です。ここで、供給可能量を要求量に応じて分配するならば、人間の採取に1、動物プランクトンから3.5、小魚から1.5 に分配します。

  
  図4.2.6 (例)捕食時、複数の要素から要求された時の分配

 親クラスでは、この様な論理を、表4.2.2に示した各伝送パターンに応じて組み込んでいます。
 ★具体的には、 MzOceanModelElementは、
  ・捕食関係: McOceanBaseDefine.PREDATION、 
  ・ 排泄:excretion、または 死、関係: McOceanBaseDefine.EXCRETION_DEATH、
  ・呼吸関係: McOceanBaseDefine.BREATHING
 に対する接続線の終端(終端に対して伝送するデータを入れる/伝送されてきたデータを取り出す)をメンバー変数として持っています。
 また、それらを使用して送受信を行うメソッドを持っています。
 下記にそれらを示します。
ソースコード:4.2.10

namespace CommonMP.HYMCO.Ocean.McOceanBaseModel
{
    /// 海洋モデルモデル基底クラス(モデルは本クラスを派生して作成する)
    public abstract class MzOceanModelElement : McInterCnnctModel
    { 
       // ↓ 下記は接続線の終端を表すインスタンスである。このインスタンスを通じて伝送、受信を行う
        //========================================================
        // 捕食関係: McOceanBaseDefine.PREDATION
        // 捕食接続の下流側のモデルが使用する
        protected McPatternRdvSndTranInfoPair m_csRcvPredationCnnct = new McPatternRdvSndTranInfoPair();
        // 捕食接続の上流側のモデルが使用する
        protected McPatternRdvSndTranInfoPair m_csSndPredationCnnct = new McPatternRdvSndTranInfoPair();

        // 排泄または 死、関係: McOceanBaseDefine.EXCRETION_DEATH
        //  排泄または 死  接続の上流側のモデルが使用する
       protected McPatternRdvSndTranInfoPair m_csSndExcretionDeathCnnct = new McPatternRdvSndTranInfoPair();

        // 呼吸関係: McOceanBaseDefine.BREATHING
        // 捕食接続の下流側のモデルが使用する(一般の生物はこちらのみを使用する)
        protected McPatternRdvSndTranInfoPair m_csRcvBreathingCnnct = new McPatternRdvSndTranInfoPair();
        // 捕食接続の上流流側のモデルが使用する(要素モデル「溶融ガス」)が使用する
        protected McPatternRdvSndTranInfoPair m_csSndBreathingCnnct = new McPatternRdvSndTranInfoPair();

        //---------------------------------------------------
        //   送受信に関する実装済みメソッド
        //---------------------------------------------------
        /// 捕食者側:要求量の送信
        protected virtual void SendReqPREDATION (double[] dReqFoodDt)
        /// 捕食者側:捕食した量を計算 
        protected virtual void ReceivePREDATION ()
        /// 被捕食者:要求捕食量を計算 
        protected virtual void ReceiveReqPREDATION ()
        /// 被捕食者:提供捕食量の送信
        protected virtual void SendPREDATION (double[] dSendFoodDt, double dCRatio, double dMRatio)

       /// 糞の排出、死体(送信側)
        protected virtual void SendEXCRETION _DEATH( double[] dDensityExt, double dDensityDth)
        /// 呼吸:O2 受信
        protected virtual void ReceiveBREATHING ()
       /// 呼吸:CO2 排出
        protected virtual void SendBREATHING()

    }   // end of class
}


 ★また、海上での人間行動を示す親クラス MzOceanHumanAct では、上記に加えて下記メンバー変数、メソッドを有します。
ソースコード:4.2.11

namespace CommonMP.HYMCO.Ocean.McOceanBaseModel
{
    /// 海洋関連 人間の行動 (HumanAct) モデルクラス
    public class MzOceanHumanAct : MzOceanModelElement
    { 
        // CO2排出: McOceanBaseDefine.CO2_EMISSION
        protected McPatternRdvSndTranInfoPair m_csSndCO2EmissionCnnct = new McPatternRdvSndTranInfoPair();

        // 運航コスト
        protected McPatternRdvSndTranInfoPair m_csRcvECCostCnnct = new McPatternRdvSndTranInfoPair();
        protected McPatternRdvSndTranInfoPair m_csSndECCostCnnct = new McPatternRdvSndTranInfoPair();

        /// 人間行為によって消費するO2:受信
        protected virtual void ReceiveO2Consumption()
        /// 人間行為によって排出するCO2:送信
        protected virtual void SendCO2Emission()

    }   // end of class
}   


  ★経済活動に関する親クラス MzCashflowModelElement では、下記メンバー変数とメソッドを実装しています。
ソースコード:4.2.12

namespace CommonMP.HYMCO.Ocean.McOceanBaseModel
{
    /// 海洋モデルモデル経済基底クラス(経済側のモデルは本クラスを派生して作成する)
    public abstract class MzCashflowModelElement : McInterCnnctModel
    {
        //----------------MzOceanBaseDefine.CO2_EMISSION-------------------------
        // CO2排出: McOceanBaseDefine.CO2_EMISSION
        protected McPatternRdvSndTranInfoPair m_csSndCO2EmissionCnnct = new McPatternRdvSndTranInfoPair();

        //----------------McOceanBaseDefine.DEALING-------------------------
        // 売買:売り手
        protected McPatternRdvSndTranInfoPair m_csRcvECBuyCnnct = new McPatternRdvSndTranInfoPair();
        // 売買:買い手
        protected McPatternRdvSndTranInfoPair m_csSndECSellCnnct = new McPatternRdvSndTranInfoPair();

        //----------------McOceanBaseDefine.PRODUCT-------------------------
        // 製品売買:購入者
        protected McPatternRdvSndTranInfoPair m_csRcvProductBuyCnnct = new McPatternRdvSndTranInfoPair();
        // 製品売買:生産者
        protected McPatternRdvSndTranInfoPair m_csSndProductSellCnnct = new McPatternRdvSndTranInfoPair();

        //----------------McOceanBaseDefine.CHASH-------------------------
        // キャッシュ:請求者
        protected McPatternRdvSndTranInfoPair m_csRcvECCashINCnnct = new McPatternRdvSndTranInfoPair();
        // キャッシュ:支払者
        protected McPatternRdvSndTranInfoPair m_csSndECCashOUTCnnct = new McPatternRdvSndTranInfoPair();

        //----------------McOceanBaseDefine.DEALING-------------------------
        /// 人間行為によって消費するO2:受信
        protected virtual void ReceiveO2Consumption()
        /// 人間行為によって排出するCO2:送信
        protected virtual void SendCO2Emission()

        //------------McOceanBaseDefine.DEALING--------------
        /// 品物受け取り:買い手
        protected virtual void BuyerReceive()
        /// 代金支払い:買い手
        protected virtual void BuyerSend()
        /// 代金受け取り:売り手
        protected virtual void SellerReceive()
        /// 品物納入:売り手
        protected virtual void SellerSend()

        //----------- McOceanBaseDefine.PRODUCT----------------
        /// 製品受け取り:買い手
        protected virtual void ProductBuyerReceive()
        /// 製品代金支払い:買い手
        protected virtual void ProductBuyerSend()
        /// 製品代金受け取り:生産者
        protected virtual void ProductSellerReceive()
        /// 製品納入:生産者
        protected virtual void ProductSellerSend()

        //---------McOceanBaseDefine.CHASH-----------------
        /// 成果受け取り:支払者
        protected virtual void OutcomeReceive()
        /// 出費、支出:支払者
        protected virtual void CostingSend()
        /// 経費受け取り:受取人
        protected virtual void ExpenseReceive()
        /// 成果送付:受取人
        protected virtual void OutcomeSend()


    }   // end of class
}   


 


(前頁)<<      >>(次頁)

初版:2022/07/08 |