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

4章  要素モデル自作の方法
 4.10  「バイオ燃料用資源捕獲」要素モデル
     〜 海洋モデル用要素モデルの作成例(サンプルプロジェクトプレジェクト:McOceanSampleModels.csproj 」)  〜


 第1章の植物プランクトンを原点とする生態系の中で、ネクトン(魚)を捕獲してそれをバイオ燃料材料にする図を描いておりました しかしながら、バイオ燃料を考えるならば、動物プランクトンをそのまま原料とする方が効率が良いとの報告もあり、ここでは、バイオ燃料資源として「動物プランクトン捕獲」要素モデルを制作し、前回までの生態モデルに追加しました。
 
 バイオ燃料用プランクトン捕獲要素モデルの追加
  図4.10.1 バイオ燃料用原料として「プランクトンを捕獲する」要素モデルを追加する

 「プランクトン捕獲」要素モデルは、「バイオ燃料」の資源として海洋の「表層混合層」と「真光層」の「動物プランクトン」を対象とします。それよりも深い所は、沈降したデトリタスを栄養素とするプランクトンが主であり、それを引き上げることは、折角海底へ沈降している炭素分を引き戻すことになると思われます。
 他の要素モデルと同様に、ファクトリークラスのプロパティ情報生成メソッド( CreateModelProperty( ) )で、「プランクトン捕獲」要素モデルのプロパティ情報として、送受信情報を設定します。

プログラムソース:4.10.1

namespace CommonMP.HYMCO.Ocean.McOceanSampleModels
{
    /// <para>モデルファクトリクラス</para>
    public class MzOceanSmplFactory : McBasicModelFactoryBase  // MzOceanModelBaseFactory
    {
        /// <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.HUMAN_PLNKTNCPTR_KIND)
            {  // プランクトン捕獲
                SetHumanActionSpanTime(ref csRtnCellPrptyDt, "操業間隔[日]", 0.5);
                SetHumanActionCO2Emission(ref csRtnCellPrptyDt, "CO2排出量[Kg/日]", 28E3 / 365);
                csRtnCellPrptyDt.AddInfoType("m_dNowUnitCost", "単価[万円/小売り単位]", McDefine.ValKind.DOUBLE);
                csRtnCellPrptyDt.SetInfo("m_dNowUnitCost", 100.0);
                csRtnCellPrptyDt.AddInfoType("m_LayerRatio", "捕獲層の比[混合層/真光層]", McDefine.ValKind.DOUBLE);
                csRtnCellPrptyDt.SetInfo("m_LayerRatio", 1.0);

                // 層設定
                this.SetLayer(ref csRtnCellPrptyDt, 7, 6000);

                // 受信可能なパターン
                {
                    // 捕獲:他の生物からの捕食と見なす
                    McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PREDATION, csModelKind);
                    csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);  // 送信可能パターンの追加 
                    //  運用経費
                    csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.CHASH, csModelKind);
                    csRtnCellPrptyDt.AddReceivePattern(csTrnPtn);  // 受信可能パターンの追加 
                }
                // 送信パターンの設定
                {
                    // 捕獲物売却
                    McTranInfoPattern csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.PRODUCT_FISH, csModelKind);
                    csRtnCellPrptyDt.AddSendPattern(csTrnPtn);  // 送信可能パターンの追加
                    // 人間の行為によるCO2排出
                    csTrnPtn = MzFlowObjBaseFactory.CreateFlow(MzOceanBaseDefine.CO2_EMISSION, csModelKind);
                    csRtnCellPrptyDt.AddSendPattern(csTrnPtn);  // 送信可能パターンの追加
                }
            }

            else if ( …………
            …………………
            return csRtnCellPrptyDt;
        }
        …………………………
    }    // end of class
} 


 入力としては、
1) プランクトンの捕獲 
  これは、他の生物からの捕食と同じと考えます。
2) 運用経費
  プランクトン捕獲だけで独立採算とするのではなく、遠海洋開発(CO2排出権の売買、バイオ燃料供給を事業とする)全体で事業を存続させると考えて、バイオ燃料製造プラントへの売却で利益が出なくとも、事業者からの運用費により事業を継続するとします。

 出力としては、
3) 捕獲物売却
  捕獲したプランクトンをバイオ製造プラントに対して、売却します。 もしも、海洋開発開発事業者が全体のキャッシュフローを全て管理するならば、売却値をゼロとして、その分を運用経費側で運用しても良いかもしれません。
 図4.10.1に於いては、「テスト用バイオ燃料製造プラント」をと接続し、採取可能な最大量の資源を受注します。

4) 排出CO2量
  プランクトン捕獲にで排出したCO2の量を「大気圏要素モデル」に与えます。 

 プランクトンを捕獲するにあたって、大型の生物(数cm以上)や、微細な植物プランクトン(1mm以下)を避けて、その間のサイズの生物を捕獲します。
 概念的には、図4.10.2に示す様に前方に目の大きな網を配し、後方に前方よりも少し小さな目の網を配します。すると、前方では、網の目より小さな生物が囲いの中に入り、後方からは、網の目より小さな生物が通り抜けます。したがって、網の中には一定の大きさの生物が集まるので、それを海水ごと吸い上げて、濾し取ったものを原料として採取します。
 前方と後方の網目の大きさは、バイオ燃料として最良の生物が集まるように調整します。

 動物プランクトン捕獲方法の概念図
  図4.10.2 動物プランクトン捕獲の概念図

<動作処理>
     モデル全体構造作成を優先していますので、ここの論理は不正確です。後ほど修正していく予定です。(知識のある方は、要素モデルを自作して、本サンプルと交換してください。)

 「バイオ燃料生成プラント」から 接続線:3)捕獲物売却を通じて、要求された買い付け額(親クラスメンバー:m_dNextDealingChash)と、単価(親クラスメンバー:m_dNowUnitCost)から捕獲しようとする資源の量を計算してし、m_TotalReqPlanktonMass に格納します。
 捕獲しようとする資源量を 接続線:1)プランクトンの捕獲を通じてプランクトンを捕獲します(動物プランクトンが植物プランクトンを捕食する時の方法と同様の方法で行います:前頁 1)「捕食」 m_ReqFoodMassに設定 )。この時注意すべき点は、海の層のうち「表面混合層」と「真光層」にのみ捕食量の要求を出し、それ以深の層に対してはゼロとします。捕獲された動物プランクトンは、前頁の植物プランクトンと同様に m_EatenMass に格納されますので、これを単位海域からとれた量[ton]に変換し、m_CatchPlanktonMass へ格納します。
 捕獲した資源は、接続線:3) 捕獲物売却によって、取得された資源の量:m_CatchPlanktonMass、現在の資源総量:m_dFeedCapability を「バイオ燃料生成プラント要素モデル」へ送信します。
 また、本要素モデルによって排出されるCO2を、接続線:4)排出CO2量 を通じて大気圏へ放出されます。

プログラムソース:4.10.2

using CommonMP.HYMCO.Ocean.McOceanBaseModel;
namespace CommonMP.HYMCO.Ocean.McOceanSampleModels
{
    /// <para> プランクトン捕獲作業 モデル内演算中データクラス</para>
    [Serializable]
    public  class MzOceanHmnPlanktonCaptureCalInfo : MzOceanHumanActCalInfo
    {
        /// <summary> 捕獲要求漁獲量(総量) </summary>
        public double m_TotalReqPlanktonMass = 0.0;

        /// <summary> 各レイヤーからの漁獲量  [t] </summary>
        public double[] m_CatchPlanktonMass = null;

        /// <summary> 捕獲層の比 混合層/真光層 </summary>
        public double m_LayerRatio = 1.0;
      }
}
 
親クラス
namespace CommonMP.HYMCO.Ocean.McOceanBaseModel
{
    /// <para> 人間の行動 (HumanAct) モデル内演算中データクラス(親クラス)</para>
    [Serializable]
    public class MzOceanHumanActCalInfo : MzOceanModelElementCalInfo
    {
        /// <summary> 人間の行為間隔  </summary>
        public double m_HmnActTimeSpan = 24 * 3600;

        /// <summary>要求O2</summary>
        public double m_HmnReqO2 = 0.0;
        /// <summary>受け取ったO2</summary>
        public double m_HmnRcvO2 = 0.0;
        /// <summary> 排出CO2</summary>
        public double m_HmnCO2Emission = 0.0;
        /// <summary> 1日当たりの排出CO2 g/Day </summary>
        public double m_HmnCO2EmissionDay = 0.0;

        //-----------------------------------
        /// <summary>設備  [億円]</summary>
        public double m_Facility = 100.0;
        /// <summary>減価償却率 :年利(1〜0) </summary>
        public double m_DepreciationRate = 0.03;
        /// <summary>累積:負債 [億円]</summary>
        public double m_Debt = 100.0;
        /// <summary>(負債と返却)利率:年利(1〜0)</summary>
        public double m_DebtInterestRate = 0.03;
        /// <summary>累積:自己資本 [億円]</summary>
        public double m_CapitalStock = 0.0;
        /// <summary>自己手持ちキャッシュ [億円]</summary>
        public double m_Chash = 100.0;

        //------------ 物品売買用 ------------------
        // 例えば、原料の購入、製品の販売等
        /// <summary> 購入資材・原料  [t]  製品を生産するために使用するもの</summary>
        public double m_Materials = 0;
        /// <summary> 購入資材・原料単価</summary>
        public double m_MaterialsUnitCost = 0;
        /// <summary> 製品の量  [t] 生産したもの:売るもの</summary>
        public double m_dProduct = 0;
        /// <summary> 供給能力  [t] </summary>
        public double m_dFeedCapability = 0;
        /// <summary> 購入・小売り単価   万円/小売り単位 </summary>
        public double m_dNowUnitCost = 1;
        /// <summary> 購買用意金   億円 </summary>
        public double m_dNowDealingChash = 0;
        /// <summary> 次回購入予定額   億円 </summary>
        public double m_dNextDealingChash = 0;
    }
}

 
 ここで、「外海洋開発事業者」からの運用については、現時点(2022/08/07)では省略します。


<テスト> 
     (*注意) :ユニットテストは別途おこないますが、ここではユニットテストの記述は省きます。
 図4.10.1の「プランクトン捕獲」要素モデルの「プランクトン捕獲量」と、「テスト用バイオ燃料プラント」要素モデルの「購入プランクトン量」を図4.10.3 に示します。プランクトンは表層混合層と真光層からのみ捕獲する為、捕獲した動物プランクトンの量は、海面に近い動物プランクトンの量に応じて増減しています。「テスト用バイオ燃料プラント」では、購入したプランクトン(バイオ燃料の原料)は、使用しないので内部に蓄積されていきます。


 捕獲した動物プランクトンと購入した動物プランクトン
   図4.10.3 捕獲プランクトン量

 
 遠海への海洋施肥の一番の目的は、温暖化ガス:CO2をブルーカーボンとして海洋に吸収して、大気中のCO2を減らすことです。そのためには、海洋施肥行動を継続できるだけの経済的裏付けが必要であり、その一つの方法としてCO2排出権の売買を考えます。その為に、CO2排出権の根拠となるCO2の吸収量を「JAXAの温室効果ガス観測技術衛星「いぶき」(GOSAT)」等を活用することを考え、また、本頁で示したプランクトン等を再生可能な資源としてバイオ燃料化した場合、十分にそれが経済的に継続可能かを調べる必要があります。
 次の頁では、CO2吸収量の測定、バイオ燃料の製造と販売の経済性のモデルを考えてみます。


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

初版:2022/08/08 |