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

4章  要素モデル自作の方法
 4.3  「植物プランクトン」要素モデル(その2:計算論理実装)
     〜 海洋モデル用要素モデルの作成例(サンプルプロジェクトプレジェクト:McOceanSampleModels.csproj 」)  〜



 植物プランクトンの数値モデルに関しては、「佐々木淳 数値植物プランクトン個体群モデルに関する基礎的検討 海岸工学論文集、第45巻(1998)」を参考にして制作します。

 要素モデルの計算処理部:Calculate()をオーバーライドします。
      モデル全体構造作成を優先していますので、ここの論理は不正確です。後ほど修正していく予定です。(知識のある方は、要素モデルを自作して、本サンプルと交換してください。)

protected override long Calculate(
    long lOnlyReceveDataNum, ref McReceiveOnlyTranInfo[] csOnlyReceiveCellData,
    long lOnlySendDataNum, ref McSendOnlyTranInfo[] csOnlySelDataCellData,
    long lRcvSndDataNum, ref McRdvSndTranInfoPair[] csRcvSndCelDataCellData
    )
{
    double dT = m_csDltTime.GetTime() / (3600.0 * 24.0);
    // δT:時間単位に変換

    // @成長
    GrowthModel(dT);

    // A枯死
    Withered(dT);

    // B被捕食(被捕食者として)
    CalCapture();

    // Cウイルス感染等による死
    CalDeath();

    return 0;
} 

 
1)光合成による成長

 計算する海面層(例えば、表層混合層)において、現在の植物プランクトンの量が M[g/m3]の時、光合成による増加分を儁とすると、
   儁 = Vmx ・ μ1 ・μ2 ・μ3 ・μ4 ・M     ……式(1)
 の式で表します。
 
   此処に
  ・Vmx :理想状態における最大増加量
  ・μ1  :光制限
  ・μ2  :温度制限
  ・μ3  :塩分濃度制限
  ・μ4  :肥料栄養制限
   ここで、光制限と温度制限については、Steele の式を適応する。
   塩分濃度制限については、ここでは考慮せずに常に1とする。
   また肥料栄養制限については、Droopの式を適応する。

    植物プランクトン成長の式
 此処で、I:光強度、T:温度 Iopt,Toptは種に依存した最適値である。
 また、リン肥料の場合、qp0、μPmax  は、それぞれ細胞内最小リン含量、および、リンを最大量投与した時の最大増殖速度であり、Qpt はリンの投与量である。 窒素、シリカ、鉄の場合も同様とし、どれか一つの栄養分が足りなくても成長は大きく損なわれることから、すべての積を取る。

 尚、必要とするCO2は十分に存在するものとします。

2)枯死

 生体維持の為、一定の割合で養分を消費し、CO2を放出する。
     double dltMass =  d_KConsume * .m_TotalSelfMas;     // 一定量のプランクトンが、総量×消費率だけ減る
     m_Death += dltMass * d_KWithered;                           // 減った分の一定量は死骸となる

3)捕食(親クラス側に論理を実装)

    全ての捕食要求量を TtlReqM 、 捕食確率  CRtio とすると 提供可能な量: availableM は
  現在の植物プランクトンの量: ttlM > TtlReqM * CRtio ならば
     availableM = ttlReqM
    そうでなければ
           availableM = ttlM * CRtio
  とする。

4)ウイルス等による感染
          
  死亡率をm_dDeathRatioとして
  m_Death +=  ttlM  * m_dDeathRatio;

として計算する。   

ここでは、鞭毛藻類などの日周鉛直移動等も考慮しておりません。

 <テスト>
 制作した植物プランクトンモデルのテストを行います
   (*注意):ユニットテストは別途行いますが、此処ではユニットテストの記述は省きます。
 最初にディバグ用に植物プランクトンの回りに接続される要素モデル群を、 先に示した方法で作成します。
 ここで、テスト用プロジェクトを「McOceanSampleTest」とし、 「namespace」 を「CommonMP.HYMCO.Ocean.McOceanSampleTest」 、実行体を「McOceanSampleTest」とします。 次に、植物プランクトンの回りに接続されるテスト用要素モデルを作成します。(尚、「海洋海域1単位面」要素モデルは特別な要素モデルで、何処の要素モデルとも接続されませんが、必ず1個のみ入れておくこととします。= モデルの全体で管理するグローバル変数管理の為)


 植物プランクトンテスト用プロジェクト
   図4.3.4 植物プランクトンに接続されるテスト用の要素モデル制作プロジェクト

 ディバッグする植物プランクトンと、テスト用に作成した海中溶融ガスと栄養成分要素モデルを接続し、テストを行ってみます。
 尚、溶融ガス要素モデルと、栄養成分モデルともに、必要なCO2と必要な栄養成分を十分に供給できるようにします。


 植物プランクトンのテストの様子
   図4.3.5 植物プランクトンをテストするモデル


ソースコード:4.3.11  テスト用のコード(植物プランクトンからの要求量をそのまま送信する)

 public class MzTestDissolveGass : MzOceanModelElement
 { 
       protected override long Calculate(
            long lOnlyReceveDataNum, ref McReceiveOnlyTranInfo[] csOnlyReceiveCellData,
            long lOnlySendDataNum, ref McSendOnlyTranInfo[] csOnlySelDataCellData,
            long lRcvSndDataNum, ref McRdvSndTranInfoPair[] csRcvSndCelDataCellData
            )
        {
          //-------------
          // テスト用:::要求された量分全て送信する

          for (int ll = 0; ll < m_csOcnBacedlInf.m_lLayerNumber; ll++)
          {
              m_OcLyrMdlInf.m_AvailableCO2[ll] = m_OcLyrMdlInf.m_ReqedCO2[ll];
          }
          return 0;
          //-------------
      } 
}
public class MzTestNutrient : MzOceanModelElement
{
    protected override long Calculate(
        long lOnlyReceveDataNum, ref McReceiveOnlyTranInfo[] csOnlyReceiveCellData,
        long lOnlySendDataNum, ref McSendOnlyTranInfo[] csOnlySelDataCellData,
        long lRcvSndDataNum, ref McRdvSndTranInfoPair[] csRcvSndCelDataCellData
        )
    {
         ………………
         // ★★★ テスト用:::要求された量分全て送信する ★★★
        for (int ll = 0; ll < m_csOcnBacedlInf.m_lLayerNumber; ll++)
        {
            m_OcLyrMdlInf.m_AvailableN[ll] =  m_OcLyrMdlInf.m_ReqN[ll];
            m_OcLyrMdlInf.m_AvailableP[ll] =  m_OcLyrMdlInf.m_ReqP[ll];
            m_OcLyrMdlInf.m_AvailableSi[ll] =  m_OcLyrMdlInf.m_ReqSi[ll];
            m_OcLyrMdlInf.m_AvailableFe[ll] =  m_OcLyrMdlInf.m_ReqFe[ll];
        }
        return 0;
    }
}


 このテストモデルでの植物プランクトンの量を出力した結果を図4.3.6に示します。表層混合層では日光が十分なので、植物プランクトンは増殖しています。しかしながら、一定以上増殖すると、海水の透明度が保てなくなり、日光量が減る為、ある程度増えたところで、一定の値になっています。光合成に必要な日光が多少届く真光層ではわずかに植物プランクトンは増殖しています。
 
 植物プランクトンのテスト結果
  図4.3.6 植物プランクトンのテスト結果(CO2も栄養分も十分に与えられた時) 

 次に、ソース4.3.11において、赤字部分をコメントアウトし、使用した分は、肥料分が減るようにします。
 また、図4.3.7に示す様に、栄養をある程度の量設定しておき、それ以降は栄養の補給を無しとします。


  
  図4.3.7 栄養成分の初期量をある程度多く与えておく。以後、栄養分を与えることはしない。

 この条件で、モデルを動作させた様子を図4.3.8に示します。
 図に示す様に、最初に肥料を吸収して植物プランクトンが増殖しますが、肥料を消費してしまうと植物プランクトンも枯死しています。真光層では光の量が少ないため、植物プランクトンの生育が遅く緩やかに肥料成分を消費していきます。肥料成分を消費し切ると表層混合層と同様に植物プランクトンの量が減少していきます。

   
  図4.3.8 栄養成分を初期に与えたのち、補給無状態で植物プランクトンを生育させたときの植物プランクトンの量の推移


  
   図4.3.9 植物プランクトン死骸数

 図4.3.9に植物プランクトンの死骸数を示します。なお、死骸は沈降も浮揚もしません。この図が示す様に、植物プランクトンが減少した分は、死骸として水中に浮遊していることがわかります。
 次の頁では、植物プランクトンの死骸を扱う「デトリタス」要素モデルの作成を作成します。




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

初版:2022/07/15 |