Unit

バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"BioSTEAM"の各種機器ユニットの抽象クラスであるUnitクラスの説明をしています。

オリジナルのページはUnitです。本家ページは巨大なので、調査した部分のみ、記載しています。徐々に充実させていく予定です。 ソースコードは以下の実行環境で確認しています。

  • Visual Studio Code バージョン: 1.104.2
  • 拡張機能:Jupyter バージョン 2025.8.0
  • Python 3.12.10
  • biosteam 2.52.13
  • graphviz-14.0.2

Unit

class Unit(ID='', ins=None, outs=(), thermo=None, **kwargs)[source]

Unit オブジェクトのための抽象クラス。継承する子のオブジェクトは、ストリームの出力や、設計およびコスト情報を取得するために、_run_design、および _cost メソッドを含んでいなければなりません。

  • パラメータ
    • ID (str、省略可)
    • 他で使われていない、一意の識別子(ID)。IDが None の場合、ストリームはフローシートに登録されません。IDが指定されていない場合は、自動的に一意のIDが付与されます。
    • ins (シーケンス(順序付きコレクション)[Stream | str]、省略可)
    • 流入ストリームか、流入ストリームを初期化するためのID。もし、空のタプルやストリームの場合、デフォルトのID が設定されます。初期状態ではストリームは未定義です。
    • outs (シーケンス(順序付きコレクション)[Stream | str]、省略可)
    • 流出ストリームか、流出ストリームを初期化するためのID。デフォルトでは一意のIDが設定されます。もし、Noneの時は未定義になります。
    • thermo (thermo、省略可)
    • 流入、流出ストリームを初期化するThermo オブジェクト。デフォルトはsettings.thermo
  • 詳細
  • 辞書型配列のbaseline_purchase_costsに含まれる本船渡し(FOB)購入価格と基本モジュール価格(ベアモジュールコスト)のような設備設置コストや補助ユニットのコストは自動的に辞書型配列のpurchase_costsinstalled_costsに追加されます。

    文献[1]にあるように、本船渡し(FOB)購入価格は次のように表されます。 \[ C_P = C_{Pb}F_DF_PF_M \] そして、設備設置コストは次のように表されます。 \[ C_{BM} = C_{Pb}(F_{BM} + F_DF_PF_M -1) \] ここで、

    • \( C_{Pb} \): ベースライン購入価格(baseline purchase cost)
    • \( C_P \) : 購入価格(purchase cost)
    • \( C_{BM} \) : 設備設置コスト(installed_cost)
    • ※ \( C_{BM} \)はinstalled equipment costのこと[2]です。
    • \( F_{BM} \) : 設置に関する係数(Bare module factor)
    • \( F_D \) : 購入費用に対する設計の係数(Design factor)
    • \( F_P \) : 購入費用に対する圧力の係数(Pressure factor)
    • \( F_M \) : 購入費用に対する材料の係数(Material factor)

    各設備の設置に関する係数、設計の係数、圧力の係数、材料の係数はF_BMF_DF_PF_Mに保存されます。

  • 補足1
  • ここで計算している設備の設置費用は、構築したシミュレーションモデルで生産量の拡大等を試算した際に、同時にプラントの費用がどれくらいになるかを計算するものです。ベースとなるプラントの費用に、生産拡大分の補正を以下のような係数を使うことで推定しています。

    • 設置に関する係数 F_{BM}:
    • 実際に稼働状態にするための据付・配管・電気・計装なのどの補助設備費を推定するための係数
    • 購入費用に対する設計の係数 F_D:
    • 標準設計からの外れた仕様に対する追加コストを反映するための係数
    • 購入費用に対する圧力の係数 F_P:
    • 使用圧力が高くなることによる機器の構造強化等
    • 購入費用に対する材料の係数 F_M:
    • 耐腐食性や高温対応などで炭素鋼(標準材)以外の材質(ステンレス鋼、チタンなど)を使用する場合の係数
  • 補足2
  • 各機器ユニットのモデルでは、それぞれのベースライン購入価格(baseline purchase costs)を推定しており、例えば蒸留塔は計算諸元から搭径、トレイ数を決め、さらに化学工学プラント費用指数(CEPCI)に基づいて最新の価格レベルに調整しています。購入価格(purchase_costs)は、ベースライン購入価格に、設計係数、圧力計数、材料係数を加味した価格で、標準的な仕様から外れた分を補正します。さらに設置に関する係数を加味することで設備設置コスト(installed_costs)としています。各機器ユニットは、さらに細かい部品から構成するものもありますから、それらの構成単位ごとに辞書型配列に格納されます。

    • 機器ユニットの計算結果にもある蒸留塔のモデルの場合、ベースライン購入価格(baseline purchase costs)は以下のようになります。
      from biosteam import Stream, settings
        import biosteam as bst
        bst.nbtutorial()
      
        # 最初に使用する物質の物性を設定します
        settings.set_thermo(['Water', 'Ethanol'])
      
        feed = Stream('feed', Water=1.08e+03, Ethanol=586)
        bp = feed.bubble_point_at_P()
        feed.T = bp.T # 供給ストリームfeedの温度をその沸点にセット
        D1 = bst.BinaryDistillation(
            'D1', ins=feed,
            outs=('distillate', 'bottoms_product'),
            LHK=('Ethanol', 'Water'), # 軽質成分と重質成分としたい成分を設定します
            y_top=0.79, # 塔頂の軽質成分のモル分率
            x_bot=0.001, # ボトムの重質成分のモル分率
            k=1.25, # 分離係数、実環流比/最少還流比 
            is_divided=True, # 濃縮部と還元部が分離されているかどうか
        )
        D1.simulate()
        D1.baseline_purchase_costs
      {'Rectifier trays': 90196.5633778153,
         'Stripper trays': 19469.130282277605,
         'Rectifier tower': 154208.58287314902,
         'Stripper platform and ladders': 48573.03764079211,
         'Stripper tower': 69659.36129843778,
         'Rectifier platform and ladders': 17028.394866860577,
         'Condenser - Floating head': 67010.087893455,
         'Reflux drum - Vertical pressure vessel': 40913.03779781813,
         'Reflux drum - Platform and ladders': 10650.872732593733,
         'Pump - Pump': 4526.29514053799,
         'Pump - Motor': 440.8000416276018,
         'Reboiler - Floating head': 65878.39139313529}
      購入価格(purchase costs)は以下のようになります。
      D1.purchase_costs
      {'Rectifier trays': 90196.5633778153,
         'Stripper trays': 19469.130282277605,
         'Rectifier tower': 154208.58287314902,
         'Stripper platform and ladders': 48573.03764079211,
         'Stripper tower': 69659.36129843778,
         'Rectifier platform and ladders': 17028.394866860577,
         'Condenser - Floating head': 65776.36616982374,
         'Reflux drum - Vertical pressure vessel': 40913.03779781813,
         'Reflux drum - Platform and ladders': 10650.872732593733,
         'Pump - Pump': 4526.29514053799,
         'Pump - Motor': 440.8000416276018,
         'Reboiler - Floating head': 65109.223990066734}
      このとき、\( F_D \)は
      D1.F_D
      {'Trays': 1, 'Stripper trays': 1, 'Rectifier trays': 1}
      \( F_P \)は、該当なし
      D1.F_P
      {}
      \( F_M \)は
      D1.F_M
      {'Rectifier tower': 1.0,
         'Stripper tower': 1.0,
         'Tower': 1.0,
         'Rectifier trays': 1,
         'Stripper trays': 1}
      でした。さらに\( F_{BM} \)は
      D1.F_BM
      {'Rectifier tower': 4.3,
         'Stripper tower': 4.3,
         'Rectifier trays': 4.3,
         'Stripper trays': 4.3,
         'Platform and ladders': 1.0,
         'Rectifier platform and ladders': 1.0,
         'Stripper platform and ladders': 1.0,
         'Tower': 4.3,
         'Trays': 4.3,
         'Vacuum system': 1.0}
      となっているので、設置コストは
      D1.installed_costs
      {'Rectifier trays': 387845.22252460575,
         'Stripper trays': 83717.26021379369,
         'Rectifier tower': 663096.9063545407,
         'Stripper platform and ladders': 48573.03764079211,
         'Stripper tower': 299535.25358328247,
         'Rectifier platform and ladders': 17028.394866860577,
         'Condenser - Floating head': 211188.25689862107,
         'Reflux drum - Vertical pressure vessel': 170198.2372389234,
         'Reflux drum - Platform and ladders': 10650.872732593733,
         'Pump - Pump': 14936.773963775366,
         'Pump - Motor': 1454.6401373710858,
         'Reboiler - Floating head': 208065.33331317033}
      となりました。このように、それぞれ辞書型配列に、対象としている機器の構成部品単位でまとめられています。
  • 補足3
  • 機器ユニットごとに計算される単数形のベースライン購入価格(baseline purchase cost)、購入価格(purchase cost)、設置コスト(installed_cost)は辞書型配列に格納された構成部品単位のベースライン購入価格(baseline purchase costs)、購入価格(purchase costs)、設置コスト(installed_costs)のそれぞれの合計という関係になります。

    • 今回の例で行くと、単数形のベースライン購入価格(baseline purchase cost)、購入価格(purchase cost)、設置費用(installed_cost)は以下のようでした。
      D1.baseline_purchase_cost
      588554.5553385002
      D1.purchase_cost
      586551.6662118004
      よく見ると、CondenserとReboilerの購入価格がベースライン購入価格よりちょっと安くなってますね。別途調査します。最後に設置コストは
      D1.installed_cost
      2116290.1894683302

_units : dict [str, str] = {}

class-attribute 計算結果である辞書型配列 design_results の値の単位。

_F_BM_default : dict [str, float] = {}

class-attribute 設置に関するコストを見積るための係数をクリア。設備単体の価格から、実際に稼働状態にするための据付・配管・電気・計装なのどの補助設備費を推定する係数。

baseline_purchase_cost : プロパティ, float

設計、圧力、材料の係数を考慮しないベースライン購入価格の(機器ユニット単位の)合計[USD]。化学工学プラント費用指数(CEPCI)によるコスト上昇分は加味されています。
  • D1.baseline_purchase_cost
    588554.5553385002

purchase_cost : プロパティ, float

購入価格の(機器ユニット単位の)合計[USD]。
  • D1.purchase_cost
    586551.6662118004

installed_cost : プロパティ, float

設置コストの(機器ユニット単位の)合計[USD]。
  • D1.installed_cost
    2116290.1894683302

utility_cost : プロパティ, float

ユーティリティ コストの(機器ユニット単位の)合計[USD/hr]。
  • D1.utility_cost
    394.50754490071785

baseline_purchase_costs : dict [str, float]

設計、圧力、材質の係数を考慮しない設備の標準的な購入費用(ベースライン購入価格)。機器ユニットの構成部品(部位)単位ごとに分解した詳細。化学工学プラント費用指数(CEPCI)によるコスト上昇分は加味されています。
  • D1.baseline_purchase_costs
    {'Rectifier trays': 90196.5633778153,
     'Stripper trays': 19469.130282277605,
     'Rectifier tower': 154208.58287314902,
     'Stripper platform and ladders': 48573.03764079211,
     'Stripper tower': 69659.36129843778,
     'Rectifier platform and ladders': 17028.394866860577,
     'Condenser - Floating head': 67010.087893455,
     'Reflux drum - Vertical pressure vessel': 40913.03779781813,
     'Reflux drum - Platform and ladders': 10650.872732593733,
     'Pump - Pump': 4526.29514053799,
     'Pump - Motor': 440.8000416276018,
     'Reboiler - Floating head': 65878.39139313529}

purchase_costs : dict [str, float]

設計係数F_D、圧力係数F_P、材料係数F_Mを考慮した購入費用(補助ユニットを含む)。機器ユニットの構成部品(部位)単位ごとに分解した詳細が辞書型配列に格納されます。各項目はユニットシミュレーションの終了時に自動的に更新されます。
  • D1.purchase_costs
    {'Rectifier trays': 90196.5633778153,
     'Stripper trays': 19469.130282277605,
     'Rectifier tower': 154208.58287314902,
     'Stripper platform and ladders': 48573.03764079211,
     'Stripper tower': 69659.36129843778,
     'Rectifier platform and ladders': 17028.394866860577,
     'Condenser - Floating head': 65776.36616982374,
     'Reflux drum - Vertical pressure vessel': 40913.03779781813,
     'Reflux drum - Platform and ladders': 10650.872732593733,
     'Pump - Pump': 4526.29514053799,
     'Pump - Motor': 440.8000416276018,
     'Reboiler - Floating head': 65109.223990066734}

installed_costs : dict [str, float]

ベアモジュール、設計、圧力、材質の係数を考慮したすべての設置費用。機器ユニットの構成部品(部位)単位ごとに分解した詳細。
  • D1.installed_costs
    {'Rectifier trays': 387845.22252460575,
     'Stripper trays': 83717.26021379369,
     'Rectifier tower': 663096.9063545407,
     'Stripper platform and ladders': 48573.03764079211,
     'Stripper tower': 299535.25358328247,
     'Rectifier platform and ladders': 17028.394866860577,
     'Condenser - Floating head': 211188.25689862107,
     'Reflux drum - Vertical pressure vessel': 170198.2372389234,
     'Reflux drum - Platform and ladders': 10650.872732593733,
     'Pump - Pump': 14936.773963775366,
     'Pump - Motor': 1454.6401373710858,
     'Reboiler - Floating head': 208065.33331317033}

F_BM : dict [str, float]

設備コスト計算時の、設置に関する係数。設備単体の価格から、実際に稼働状態にするための据付・配管・電気・計装なのどの補助設備費を推定するための係数。通常3.0~6.0程度(機器の種類によってことなる)。機器ユニットの構成部品(部位)単位ごとに分解した詳細。
  • D1.F_BM
    {'Rectifier tower': 4.3,
     'Stripper tower': 4.3,
     'Rectifier trays': 4.3,
     'Stripper trays': 4.3,
     'Platform and ladders': 1.0,
     'Rectifier platform and ladders': 1.0,
     'Stripper platform and ladders': 1.0,
     'Tower': 4.3,
     'Trays': 4.3,
     'Vacuum system': 1.0}

F_D : dict [str, float]

設備コスト計算時の、設計の係数。標準設計からの外れた仕様に対する追加コストを反映するための係数。標準状態を1.0として、複雑な設計なら1.5以上。仕様ごとの係数を辞書型配列にしたもの。
  • D1.F_D
    {'Trays': 1, 'Stripper trays': 1, 'Rectifier trays': 1}

F_P : dict [str, float]

設備コスト計算時の、圧力の係数。使用圧力が高くなることによる機器の構造強化等。\( F_P = a + b \cdot \log_{10}(P) \) などという式があるらしい。
  • D1.F_P
    {}

F_M : dict [str, float]

設備コスト計算時の、材料の係数。耐腐食性や高温対応などで炭素鋼(標準材)以外の材質(ステンレス鋼、チタンなど)を使用する場合の係数。炭素鋼を1.0として、ステンレス鋼1.5~2.0、チタンで3.0~5.0などになるらしい。
  • D1.F_M
    {'Rectifier tower': 1.0,
     'Stripper tower': 1.0,
     'Tower': 1.0,
     'Rectifier trays': 1,
     'Stripper trays': 1}

ID

ID(str)。もし、設定がない場合は、デフォルトのIDが選択されます。
  • D1.ID
    'D1'

diagram(radius=0, upstream=True, downstream=True, file=None, format=None, display=True, auxiliaries=-1, **graph_attrs)

当該機器ユニットと周辺の機器のGraphviz図を指定のサイズで表示します。
  • パラメータ
    • radius (int、省略可) - 隣接するユニット間のストリーム数の最大値。デフォルトは0。
    • downstream (bool、省略可) - 下りのストリームを表示するかどうか。デフォルトはTrue。
    • upstream (bool、省略可) - 上りのストリームを表示するかどうか。デフォルトはTrue。
    • file (str、省略可) - ファイルに出力したい場合はファイル名(拡張子は不要の様子)。指定ない場合はモニター画面に表示。
    • format (str、省略可) - ファイルのフォーマット。
    • display (bool、省略可) - モニター画面に表示するか、graphviz オブジェクトとして出力するか。
    • auxiliaries (bool、省略可) - 表示する補助機器の階層。
  • D1.diagram(format='png')
    pngファイルに書き出します。
    D1.diagram(file='BinaryDistillation',format='png') # BinaryDistillation.png

specifications : プロパティ, list [ProcessSpecification]

プロセスの追加仕様のリストを返します。

  • プロセス・パラメータの動的変更に記載のある例をここでも示します。

    from biosteam import settings, Chemical, Stream, units, main_flowsheet
    import biosteam as bst; bst.nbtutorial()
    # フローシートに名前を付けます
    main_flowsheet.set_flowsheet('mix_ethanol_with_denaturant')
    
    # 使用する成分の熱力学特性を設定します
    # 実際のプロセスではもっと多くの物質を扱うと思いますが、
    # ここでは例として少ない種類で試行します。
    settings.set_thermo(['Water', 'Ethanol', 'Octane'])
    
    # 330日の操業で年間 40 ミリオン ガロンのエタノール生産されているとします。
    dehydrated_ethanol = Stream('dehydrated_ethanol', T=340,
                                Water=0.1, Ethanol=99.9, units='kg/hr')
    operating_days_per_year = 330
    dehydrated_ethanol.set_total_flow(40e6 / operating_days_per_year, 'gal/d')
    denaturant = Stream('denaturant', Octane=1)
    M1 = units.Mixer('M1', ins=(dehydrated_ethanol, denaturant), outs='denatured_ethanol')
    
    # 仕様を満たすための関数(specification function)を設定します。
    # 変性剤が質量比で2%になるように設定します。
    @M1.add_specification(run=True) # 適用後に物質収支およびエネルギー収支を計算します。
    def adjust_denaturant_flow():
        denaturant_over_ethanol_flow = 0.02 / 0.98 # A mass ratio
        denaturant.imass['Octane'] = denaturant_over_ethanol_flow * dehydrated_ethanol.F_mass
    
    # 実行と結果の確認
    M1.simulate()
    M1.specifications
    [ProcessSpecification(f=adjust_denaturant_flow(), args=(), impacted_units=())]
    追加した関数adjust_denaturant_flow()が追加されていることが確認できました。
 

add_bounded_numerical_specification( f=None, *args, **kwargs)

逆二次補間ソルバーを用いて、\( f(x)=0 \)を満たす\( x \)を解くための境界付き数値解析的仕様追加関数を追加します。

  • パラメータ
    • f (Callable、省略可) - f(x,*args)の形の目的関数
    • x(float、省略可) - 初期値
    • x0,x1(float) - 根の存在範囲。解は \( x_0 \) と \( x_1 \) の間に存在しなければならない。
    • xtol(float、省略可) - ソルバーは、解が許容誤差 xtol の範囲内にあるとき停止します。デフォルトは0です。
    • ytol(float、省略可) - ソルバーは、f(x)が許容誤差 xtol の範囲内にあるとき停止します。デフォルトは0です。
    • ytol(float、省略可) - ソルバーは、f(x)が許容誤差 xtol の範囲内にあるとき停止します。デフォルトは0です。
    • args(tuple 、省略可) - fに渡す引数。
    • maxiter(int 、省略可) - 最大繰り返し計算回数。デフォルトは50。
    • checkiter (bool 、省略可) - 最大反復回数に達するまでに許容誤差を満たせなかった場合、Runtime エラーを発生させるかどうかを指定します。デフォルトは True です。
    • checkroot (bool 、省略可) - xtol と ytol の両方の許容誤差を満たす必要があるかどうかを指定します。デフォルトは False です。
    • checkbounds (bool 、省略可) - 境界付きソルバーを使用する際に、根が境界内に存在することが確実でない場合(例: f(x0) * f(x1) > 0)、ValueError を発生させるかどうかを指定します。デフォルトは True です。
  • プロセス・パラメータの動的変更に記載のある例をここでも示します。 エタノールとプロパノールの混合液を、モル分率ではなく質量分率で50%蒸発させます。これは温度を変化させたときの蒸発率を繰り返し計算し、蒸気の質量と液体の質量が50%になる温度を数値解析的に計算することで解くことが出来ます。このとき、目的関数 f(x) = 0 となる x を求める解き方なので、目標が満足する状態で計算した結果がゼロになるような関数を与えます。ここでは、今の蒸発率が0.5のときにゼロになる → 蒸発率V - 0.5 を返す関数をセットします。

    # 新しいフローシートに名前を付ける
    main_flowsheet.set_flowsheet('flash_specification_example')
    
    # 使用する成分の熱力学特性を設定
    settings.set_thermo(['Water', 'Ethanol', 'Propanol'])
    
    # 供給ストリーム
    mixture = Stream('mixture', T=340,
                     Water=1000, Ethanol=1000, Propanol=1000,
                     units='kg/hr')
    
    # フラッシュ蒸留器を設定
    F1 = units.Flash('F1',
                     ins=mixture,
                     outs=('vapor', 'liquid'),
                     T=373, P=101325)
    
    # 呼び出されたときに目的関数を解く数値解析的仕様変更関数を設定
    @F1.add_bounded_numerical_specification(x0=351.4, x1=373, xtol=1e-9, ytol=1e-3)
    def f(x):
        # 目的関数 f(x) = 0 となる x を求める
        # ここでは蒸発率 50 wt. % となる温度を求める
        F1.T = x
        F1.run() # 重要: 質量およびエネルギーバランスは新しい条件で計算
        feed = F1.ins[0]
        vapor = F1.outs[0]
        V = vapor.F_mass / feed.F_mass
        return V - 0.5
    
    # Now create the system, simulate, and check results.
    system = main_flowsheet.create_system()
    system.simulate()
    system.diagram(format='png')
    system.show('cwt')
    System: SYS2
    ins...
    [0] mixture  
        phase: 'l', T: 340 K, P: 101325 Pa
        composition (%): Water     33.3
                         Ethanol   33.3
                         Propanol  33.3
                         --------  3e+03 kg/hr
    outs...
    [0] vapor  
        phase: 'g', T: 357.66 K, P: 101325 Pa
        composition (%): Water     28.3
                         Ethanol   40.7
                         Propanol  31.1
                         --------  1.5e+03 kg/hr
    [1] liquid  
        phase: 'l', T: 357.66 K, P: 101325 Pa
        composition (%): Water     38.4
                         Ethanol   26
                         Propanol  35.6
                         --------  1.5e+03 kg/hr
    outs[0]の蒸気と、[1]の液体の質量流量が同じ(蒸気分率が50%)になり、温度が 357.66 K(84.51℃)と決まりました。
  • 注記
  • このメソッドは上記の例のようにPythonのデコレータ[3]としても動作します。

add_specification( f=None, run=None, args=(), impacted_units=None, prioritize=None)

仕様を追加します。
  • パラメータ
    • f (Callable、省略可) - 質量収支およびエネルギー収支のための仕様を追加する関数
    • run (bool 、省略可) - 仕様追加後に質量、エネルギー収支を再計算するかどうか、デフォルトはFalse。
    • args(tuple 、省略可) - fに渡す引数。
    • impacted_units(tuple [AbstractUnit, ...]、省略可) - 仕様追加により影響を受ける機器ユニットを指示します。システムは仕様追加した機器の上流機器の再計算を実施します。
    • prioritize (bool 、省略可) - 再循環ループのある場合に再循環ループ内の機器の計算を優先するかどうか。
  • プロセス・パラメータの動的変更に記載のある例をここでも示します。 以下では、バイオエタノールの流量に応じて添加する変性剤の量を、出来上がり時に変性剤の比率が質量比で2%になるように調整します。

    from biosteam import settings, Chemical, Stream, units, main_flowsheet
    import biosteam as bst; bst.nbtutorial()
    # フローシートに名前を付けます
    main_flowsheet.set_flowsheet('mix_ethanol_with_denaturant')
    
    # 使用する成分の熱力学特性を設定します
    # 実際のプロセスではもっと多くの物質を扱うと思いますが、
    # ここでは例として少ない種類で試行します。
    settings.set_thermo(['Water', 'Ethanol', 'Octane'])
    
    # 330日の操業で年間 40 ミリオン ガロンのエタノール生産されているとします。
    dehydrated_ethanol = Stream('dehydrated_ethanol', T=340,
                                Water=0.1, Ethanol=99.9, units='kg/hr')
    operating_days_per_year = 330
    dehydrated_ethanol.set_total_flow(40e6 / operating_days_per_year, 'gal/d')
    denaturant = Stream('denaturant', Octane=1)
    M1 = units.Mixer('M1', ins=(dehydrated_ethanol, denaturant), outs='denatured_ethanol')
    
    # 仕様を満たすための関数(specification function)を設定します。
    # 変性剤が質量比で2%になるように設定します。
    @M1.add_specification(run=True) # 適用後に物質収支およびエネルギー収支を計算します。
    def adjust_denaturant_flow():
        denaturant_over_ethanol_flow = 0.02 / 0.98 # A mass ratio
        denaturant.imass['Octane'] = denaturant_over_ethanol_flow * dehydrated_ethanol.F_mass
    
    # 実行と結果の確認
    M1.simulate()
    M1.show(composition=True, flow='kg/hr')
    Mixer: M1
    ins...
    [0] dehydrated_ethanol  
        phase: 'l', T: 340 K, P: 101325 Pa
        composition (%): Water    0.1
                         Ethanol  99.9
                         -------  1.43e+04 kg/hr
    [1] denaturant  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        composition (%): Octane  100
                         ------  292 kg/hr
    outs...
    [0] denatured_ethanol  
        phase: 'l', T: 339.31 K, P: 101325 Pa
        composition (%): Water    0.098
                         Ethanol  97.9
                         Octane   2
                         -------  1.46e+04 kg/hr
    outs[0]のOctaneの比率が質量比で2%になっていることが確認できます。
  • 注記
  • このメソッドは上記の例のようにPythonのデコレータ[3]としても動作します。

show(layout=None, T=None, P=None, flow=None, composition=None, N=None, IDs=None, sort=None, data=True)

当該機器ユニットの情報を表示します。
  • パラメータ
    • layout (str、省略可) - 流量・組成・成分数 N をまとめて設定するための簡易的な表現。最初の文字が'%'または'c'の時はcompostion=True、'wt'はflow='kg/hr'、その後に数字があればN=で設定できる。例えば、‘%wt100’は compostion=True, flow='kg/hr',and N=100と同じ。
    • T(str、省略可) - 表示される温度の単位。摂氏は'degC'、デフォルトは'K'。
    • P(str、省略可) - 表示される圧力の単位。気圧は'atm'、使用可能な単位は'kPa'、'mmHg'、'psi'等。デフォルトは'Pa'。
    • flow(str、省略可) - 表示される流体流量の単位。質量流量は例えば'kg/hr'、'L/hr'、デフォルトは'kmol/hr'。
    • composition(bool、省略可) - 成分割合(%)を表示する場合はTrue、不要の場合はFalse。デフォルトはTrue。
    • data(bool、省略可) - データの表示なしで流入、流出ストリームの確認のみで良い場合はFalse、デフォルトはTrue。
  • D1.show()
    BinaryDistillation: D1
    ins...
    [0] feed  
        phase: 'l', T: 354.28 K, P: 101325 Pa
        flow (kmol/hr): Water    1.08e+03
                        Ethanol  586
    outs...
    [0] distillate  
        phase: 'g', T: 351.63 K, P: 101325 Pa
        flow (kmol/hr): Water    156
                        Ethanol  585
    [1] bottoms_product  
        phase: 'l', T: 372.79 K, P: 101325 Pa
        flow (kmol/hr): Water    924
                        Ethanol  0.925
    単位を指定したい場合。
    D1.show(T='degC',P='kPa',flow='kg/hr')
    BinaryDistillation: D1
    ins...
    [0] feed  
        phase: 'l', T: 81.125 degC, P: 101.325 kPa
        flow (kg/hr): Water    1.95e+04
                      Ethanol  2.7e+04
    outs...
    [0] distillate  
        phase: 'g', T: 78.484 degC, P: 101.325 kPa
        flow (kg/hr): Water    2.8e+03
                      Ethanol  2.7e+04
    [1] bottoms_product  
        phase: 'l', T: 99.64 degC, P: 101.325 kPa
        flow (kg/hr): Water    1.67e+04
                      Ethanol  42.6
    分率なし。
    D1.show(composition=False)
    BinaryDistillation: D1
    ins...
    [0] feed  
        phase: 'l', T: 354.28 K, P: 101325 Pa
        flow (kmol/hr): Water    1.08e+03
                        Ethanol  586
    outs...
    [0] distillate  
        phase: 'g', T: 351.63 K, P: 101325 Pa
        flow (kmol/hr): Water    156
                        Ethanol  585
    [1] bottoms_product  
        phase: 'l', T: 372.79 K, P: 101325 Pa
        flow (kmol/hr): Water    924
                        Ethanol  0.925
    省略形で指定。Cはcomposition=True,wtはflow='kg/hr'と同じ。
    D1.show('cwt')
    BinaryDistillation: D1
    ins...
    [0] feed  
        phase: 'l', T: 354.28 K, P: 101325 Pa
        composition (%): Water    41.9
                         Ethanol  58.1
                         -------  4.65e+04 kg/hr
    outs...
    [0] distillate  
        phase: 'g', T: 351.63 K, P: 101325 Pa
        composition (%): Water    9.42
                         Ethanol  90.6
                         -------  2.98e+04 kg/hr
    [1] bottoms_product  
        phase: 'l', T: 372.79 K, P: 101325 Pa
        composition (%): Water    99.7
                         Ethanol  0.255
                         -------  1.67e+04 kg/hr
    データなしでIDのみ調べたい場合。
    D1.show(data=False)
    BinaryDistillation: D1
    ins...
    [0] feed  
    outs...
    [0] distillate  
    [1] bottoms_product
    成分が多いと省略されてしまう。
    U201.show()
    CrushingMill: U201
    ins...
    [0] s5  from  EnzymeTreatment-T201
        phase: 'l', T: 323.15 K, P: 101325 Pa
        flow (kmol/hr): Water          1.44e+04
                        Glucose        24.8
                        Sucrose        148
                        Cellulose      140
                        Hemicellulose  101
                        Lignin         79.8
                        Solids         5.56e+03
                        ...            2.22e+03
    [1] s6  from  Mixer-M201
        phase: 'l', T: 334.46 K, P: 101325 Pa
        flow (kmol/hr): Water          7.38e+03
                        Glucose        3.23
                        Sucrose        19.3
                        Cellulose      7.7
                        Hemicellulose  5.55
                        Lignin         4.38
                        Ash            122
    outs...
    [0] s7  to  ConveyingBelt-U202
        phase: 'l', T: 326.7 K, P: 101325 Pa
        flow (kmol/hr): Water          3.17e+03
                        Glucose        1.12
                        Sucrose        6.7
                        Cellulose      136
                        Hemicellulose  98.2
                        Lignin         77.4
                        Solids         5.56e+03
                        ...            2.16e+03
    [1] s8  to  VibratingScreen-S201
        phase: 'l', T: 326.7 K, P: 101325 Pa
        flow (kmol/hr): Water          1.87e+04
                        Glucose        26.9
                        Sucrose        161
                        Cellulose      11.8
                        Hemicellulose  8.54
                        Lignin         6.73
                        Ash            188
    N=で指定することで表示できる。
    U201.show(N=10)
    CrushingMill: U201
    ins...
    [0] s5  from  EnzymeTreatment-T201
        phase: 'l', T: 323.15 K, P: 101325 Pa
        flow (kmol/hr): Water          1.44e+04
                        Glucose        24.8
                        Sucrose        148
                        Cellulose      140
                        Hemicellulose  101
                        Lignin         79.8
                        Solids         5.56e+03
                        Ash            2.22e+03
    [1] s6  from  Mixer-M201
        phase: 'l', T: 334.46 K, P: 101325 Pa
        flow (kmol/hr): Water          7.38e+03
                        Glucose        3.23
                        Sucrose        19.3
                        Cellulose      7.7
                        Hemicellulose  5.55
                        Lignin         4.38
                        Ash            122
    outs...
    [0] s7  to  ConveyingBelt-U202
        phase: 'l', T: 326.7 K, P: 101325 Pa
        flow (kmol/hr): Water          3.17e+03
                        Glucose        1.12
                        Sucrose        6.7
                        Cellulose      136
                        Hemicellulose  98.2
                        Lignin         77.4
                        Solids         5.56e+03
                        Ash            2.16e+03
    [1] s8  to  VibratingScreen-S201
        phase: 'l', T: 326.7 K, P: 101325 Pa
        flow (kmol/hr): Water          1.87e+04
                        Glucose        26.9
                        Sucrose        161
                        Cellulose      11.8
                        Hemicellulose  8.54
                        Lignin         6.73
                        Ash            188
    省略形でも指定可能。
    U201.show('cwt10')
    CrushingMill: U201
    ins...
    [0] s5  from  EnzymeTreatment-T201
        phase: 'l', T: 323.15 K, P: 101325 Pa
        composition (%): Water          70.1
                         Glucose        1.2
                         Sucrose        13.6
                         Cellulose      6.13
                         Hemicellulose  3.6
                         Lignin         3.27
                         Solids         1.5
                         Ash            0.598
                         -------------  3.72e+05 kg/hr
    [1] s6  from  Mixer-M201
        phase: 'l', T: 334.46 K, P: 101325 Pa
        composition (%): Water          93
                         Glucose        0.408
                         Sucrose        4.62
                         Cellulose      0.874
                         Hemicellulose  0.513
                         Lignin         0.466
                         Ash            0.0853
                         -------------  1.43e+05 kg/hr
    outs...
    [0] s7  to  ConveyingBelt-U202
        phase: 'l', T: 326.7 K, P: 101325 Pa
        composition (%): Water          50
                         Glucose        0.177
                         Sucrose        2.01
                         Cellulose      19.4
                         Hemicellulose  11.4
                         Lignin         10.3
                         Solids         4.87
                         Ash            1.89
                         -------------  1.14e+05 kg/hr
    [1] s8  to  VibratingScreen-S201
        phase: 'l', T: 326.7 K, P: 101325 Pa
        composition (%): Water          84
                         Glucose        1.21
                         Sucrose        13.7
                         Cellulose      0.48
                         Hemicellulose  0.282
                         Lignin         0.256
                         Ash            0.0469
                         -------------  4e+05 kg/hr

参考文献

このブログの人気の投稿

さあ、始めよう!

蒸留塔

機器ユニットの計算結果