熱交換器

バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"BioSTEAM"の熱交換器モデルの使い方を説明しています。 オリジナルのページはheat_exchangeです。ソースコードは以下の実行環境で確認しています。
  • Visual Studio Code バージョン: 1.104.2
  • 拡張機能:Jupyter バージョン 2025.8.0
  • Python 3.12.10
  • biosteam 2.52.13
  • graphviz-14.0.2

熱交換器

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

向流式熱交換器の抽象クラスです。
  • 抽象メソッド
    • get_streams()
    • 熱交換する2つの流入ストリームと流出ストリームを返します

_units

デフォルトでの各パラメータの単位
  • Area : ft2
  • Overall heat transfer coefficient : kW/m2/K
  • Log-mean temperature difference : K
  • Tube side pressure drop : Pa
  • Shell side pressure drop : Pa
  • Operating pressure : psi
  • Total tube length : ft

_F_BM_default

デフォルトでの熱交換器のタイプ(型)別の設置コストを計算するための係数\( F_{BM} \)
  • 二重管 Double pipe : 1.8
  • フローティングヘッド型 Floating head : 3.17
  • 固定ヘッド型 Fixed head : 3.17
  • U字管 U tube : 3.17
  • ケトル型蒸発器 Kettle vaporizer : 3.17
  • 加熱炉 Furnace : 2.19

_cost

購入価格の計算に使用する各係数を計算。heat_exchanger_type(熱交換器タイプ)を考慮し、辞書型配列に格納します。
  • F_M [heat_exchanger_type] - 購入費用に対する材料の係数(Design factor)
  • \( \begin{cases} 2 & A < 150 \\ \textit{compute_shell_and_tube_material_factor} & \text{それ以外} \end{cases} \)
  • F_P [heat_exchanger_type] - 購入費用に対する圧力の係数(Pressure factor)
  • \( \begin{cases} 0.8510 + 0.1292 P/600 + 0.0198 (P/600)^2 & A < 150 \\ 0.9803 + 0.018 P/100 + 0.0017 (P/100)^2 & \text{それ以外} \end{cases} \)
  • F_D [heat_exchanger_type] - 購入費用に対する設計の係数(Design factor)
  • \( \begin{cases} A/2.1718 & A < 2.1718 \\ 1 & 2.1718 ≤ A < 150 \\ Length factor & 150 ≤ A かつ L < 20 \\ 1 & 150 ≤ A かつ 20 < L \end{cases} \)
  • baseline_purchase_costs [heat_exchanger_type] - タイプ(型)ごとに面積Aより計算
ただし、ここで
  • \( A \) :熱交換に使用される面積[ft2]
  • \( P \) :圧力[psi]
  • \( L \) :管の長さ[ft]

compute_floating_head_purchase_cost (A, CE)

フローティングヘッド型の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{12.0310 - 0.8709 ln(A) + 0.09005 ln(A)^2} \)

compute_fixed_head_purchase_cost (A, CE)

固定ヘッド型の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{11.4185 - 0.9228 ln(A) + 0.09861 ln(A)^2} \)

compute_u_tube_purchase_cost (A, CE)

U字管型の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{11.5510 - 0.9186 ln(A) + 0.09790 ln(A)^2} \)

compute_kettle_vaporizer_purchase_cost (A, CE)

ケトル型蒸発器の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{12.3310 - 0.8709 ln(A) + 0.09005 ln(A)^2} \)

compute_double_pipe_purchase_cost (A, CE)

二重管型の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{12.3310 + 0.16 ln(A)} \)

compute_furnace_purchase_cost (A, CE)

加熱炉の購入価格の計算
  • パラメータ
    • A (float) - 面積[ft2]。
    • CE (float) - CEPCI(化学工学プラント費用指数)。
  • 計算の概略
  • 面積による指数関数になっています。
    \( \text{購入価格[USD]} = (\frac{CE}{567}) e^{-0.15241 + 0.785 ln(A)} \)

Cb_dict

コスト計算式とタイプ(型)の対応付け
  • 'Floating head' - compute_floating_head_purchase_cost
  • 'Fixed head' - compute_fixed_head_purchase_cost
  • 'U tube' - compute_u_tube_purchase_cost
  • 'Kettle vaporizer' - compute_kettle_vaporizer_purchase_cost
  • 'Double pipe' - compute_double_pipe_purchase_cost
  • 'Furnace' - compute_furnace_purchase_cost

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

  • パラメータ
    • ID (str、省略可) - 識別子。
    • ins (Sequence(順序付きコレクション)[Stream | str]、省略可) - 流入ストリーム。
    • outs (Sequence(順序付きコレクション)[Stream | str]、省略可) - 流出ストリーム。
    • T =None(float) - 流出ストリームの温度[K]。
    • V =None(float) - 流出ストリームの蒸気分率。
    • rigorous =False(bool) - 気液平衡計算を行う場合はTrue。
    • U =None(float、省略可) - ユーザー指定の全体の熱伝達係数[kW/m2/K]。
    • heat_exchanger_type (str、省略可) - 熱交換器のタイプ(形式)。デフォルトはFloating head(フローティングヘッド型)*1
    • N_shells (int、省略可) - シェルの数。デフォルトは2。
    • ft =None(float、省略可) - ユーザー指定の補正係数。
    • heat_only =False(bool) - 加熱のみの場合はTrue。
    • cool_only =False(bool) - 冷却のみの場合はTrue。
    • heat_transfer_efficiency =None(float、省略可) - ユーザー指定の熱伝達係数。
    • 1より小さい場合は環境への伝達による損失を意味します。デフォルトの熱伝達係数はユーティリティエージェントが指定します。
  • 注記
  • HXutilityオブジェクトを作成するときは、T(温度)かV(蒸気分率)のどちらかを指定する必要があります。
    • *1 フローティングヘッド型
    • 太い円柱状の胴体に細い多数の円管を配置し、胴体(シェル)側の流体と円管(チューブ)側の流体間で熱交換を行う多管式熱交換器(シェルアンドチューブ式熱交換器)の一形式で、熱応力を逃がすため、チューブ全体をスライドさせる構造になっており、チューブは抜き取り製造が可能。遊動頭(フローティングヘッド)
  • 温度を指定した場合。水、エタノールがそれぞれ200kmol/hrの液体の温度を50℃上昇させる場合。
    from biosteam.units import HXutility
    from biosteam import Stream, settings
    settings.set_thermo(['Water', 'Ethanol'], cache=True)
    feed = Stream('feed', Water=200, Ethanol=200)
    hx = HXutility('hx', ins=feed, outs='product', T=50+273.15,
                   rigorous=False) # 気液平衡は無視
    hx.simulate()
    hx.show()
    HXutility: hx
    ins...
    [0] feed  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water    200
                        Ethanol  200
    outs...
    [0] product  
        phase: 'l', T: 323.15 K, P: 101325 Pa
        flow (kmol/hr): Water    200
                        Ethanol  200
    hx.results()
    Heat exchangerUnitshx
    Low pressure steam DutykJ/hr1.01e+06
    Flowkmol/hr26.2
    CostUSD/hr6.22
    Design Areaft^259.9
    Overall heat transfer coefficientkW/m^2/K0.5
    Log-mean temperature differenceK101
    Fouling correction factor1
    Operating pressurepsi50
    Total tube lengthft20
    Purchase cost Double pipeUSD4.78e+03
    Total purchase cost USD4.78e+03
    Utility cost USD/hr6.22
    蒸気分率を指定した場合。水、エタノールがそれぞれ200kmol/hrの液体の温度を蒸気分率が1、つまり全て蒸発させる場合。気液並行も考慮します。
    feed = Stream('feed', Water=200, Ethanol=200)
    hx = HXutility('hx', ins=feed, outs='product', V=1,
                   rigorous=True) # Include VLE
    hx.simulate()
    hx.show()
    HXutility: hx
    ins...
    [0] feed  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water    200
                        Ethanol  200
    outs...
    [0] product  
        phase: 'g', T: 357.44 K, P: 101325 Pa
        flow (kmol/hr): Water    200
                        Ethanol  200
    同じIDを使っているということで、RuntimeWarningが出るかもしれませんが、気になる場合は
    import biosteam as bst
    bst.nbtutorial()
    
    feed = Stream('feed', Water=200, Ethanol=200)
    hx = HXutility('hx', ins=feed, outs='product', V=1,
                   rigorous=True) # Include VLE
    hx.simulate()
    hx.show()
    とすれば出なくなります。結果は
    hx.results()
    Heat exchangerUnitshx
    Low pressure steam DutykJ/hr1.94e+07
    Flowkmol/hr500
    CostUSD/hr119
    Design Areaft^2716
    Overall heat transfer coefficientkW/m^2/K1
    Log-mean temperature differenceK80.8
    Fouling correction factor1
    Operating pressurepsi50
    Total tube lengthft20
    Purchase cost Double pipeUSD2.65e+04
    Total purchase cost USD2.65e+04
    Utility cost USD/hr119
    熱交換器の熱伝達率を変更することもできます。デフォルトが0.95のところを1にしてみます。
    feed = Stream('feed', Water=200, Ethanol=200)
    hx = HXutility('hx', ins=feed, outs='product', T=50+273.15,
                   rigorous=False) # Ignore VLE
    hx.heat_transfer_efficiency = 1. # Originally 0.95 for low pressure steam
    
    hx.simulate()
    hx.results() # Notice how the duty, utility cost, and capital cost decreased
    Heat exchangerUnitshx
    Low pressure steam DutykJ/hr9.61e+057
    Flowkmol/hr24.9
    CostUSD/hr5.91
    Design Areaft^256.9
    Overall heat transfer coefficientkW/m^2/K0.5
    Log-mean temperature differenceK101
    Fouling correction factor1
    Operating pressurepsi50
    Total tube lengthft20
    Purchase cost Double pipeUSD4.74e+03
    Total purchase cost USD4.74e+03
    Utility cost USD/hr5.91
    負荷、ユーティリティコスト、購入コストが若干下がっています。蒸気分率を指定する場合も同様です。
    feed = Stream('feed', Water=200, Ethanol=200)
    hx = HXutility('hx', ins=feed, outs='product', V=1,
                   rigorous=True) # Include VLE
    hx.heat_transfer_efficiency = 1. # Originally 0.95 for low pressure steam
    hx.simulate()
    hx.results() # Notice how the duty, utility cost, and capital cost decreased
    Heat exchangerUnitshx
    Low pressure steam DutykJ/hr1.84e+07
    Flowkmol/hr475
    CostUSD/hr113
    Design Areaft^2680
    Overall heat transfer coefficientkW/m^2/K1
    Log-mean temperature differenceK80.8
    Fouling correction factor1
    Operating pressurepsi50
    Total tube lengthft20
    Purchase cost Double pipeUSD2.61e+04
    Total purchase cost USD2.61e+04
    Utility cost USD/hr113

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

プロセス流体(化学プロセスや製造工程で使用される液体や気体)用の向流式熱交換器。ピンチ温度またはユーザー指定の温度制限に達するまで、厳密に熱を伝達します。
  • パラメータ
    • ID (str、省略可) - 識別子。
    • ins (Sequence(順序付きコレクション)[Stream | str]、省略可) - 流入ストリーム。
    • outs (Sequence(順序付きコレクション)[Stream | str]、省略可) - 流出ストリーム。
    • U =None(float、省略可) - ユーザー指定の全体の熱伝達係数[kW/m2/K]。
    • dT =5.(float) - ピンチ温度差(例 dT = abs(outs[0].T - outs[1].T))。
    • T_lim0 =5.(float、省略可) - 0番目の流出ストリームの制限温度。
    • T_lim1 =5.(float、省略可) - 1番目の流出ストリームの制限温度。
    • heat_exchanger_type (str、省略可) - 熱交換器のタイプ(形式)。デフォルトはFloating head(フローティングヘッド型)*1
    • N_shells (int、省略可) - シェルの数。デフォルトは2。
    • ft =None(float、省略可) - ユーザー指定の補正係数。
    • phase0 =None('l' または 'g'、省略可) - 0番目の流出ストリームのユーザー指定の相(液相か気相)。
    • phase1 =None('l' または 'g'、省略可) - 1番目の流出ストリームのユーザー指定の相(液相か気相)。
    • H_lim0 (float、省略可) - 0番目の流出ストリームのエンタルピーの制限。
    • H_lim1 (float、省略可) - 1番目の流出ストリームのエンタルピーの制限。
  • ピンチ温度に達するまで厳密に熱交換を実施:
    from biosteam.units import HXprocess
    from biosteam import Stream, settings
    settings.set_thermo(['Water', 'Ethanol'])
    in_a = Stream('in_a', Ethanol=50, T=351.43, phase='g')
    in_b = Stream('in_b', Water=200)
    hx = HXprocess('hx', ins=(in_a, in_b), outs=('out_a', 'out_b'))
    hx.simulate()
    hx.show(T='degC:.2g')
    HXprocess: hx
    ins...
    [0] in_a  
        phase: 'g', T: 78 degC, P: 101325 Pa
        flow (kmol/hr): Ethanol  50
    [1] in_b  
        phase: 'l', T: 25 degC, P: 101325 Pa
        flow (kmol/hr): Water  200
    outs...
    [0] out_a  
        phases: ('g', 'l'), T: 78 degC, P: 101325 Pa
        flow (kmol/hr): (g) Ethanol  31.4
                        (l) Ethanol  18.6
    [1] out_b  
        phase: 'l', T: 73 degC, P: 101325 Pa
        flow (kmol/hr): Water  200
    hx.results()
    Heat exchangerUnitshx
    Design Areaft^2213
    Overall heat transfer coefficientkW/m^2/K0.5
    Log-mean temperature differenceK20.4
    Fouling correction factor1
    Operating pressurepsi14.7
    Total tube lengthft20
    Purchase cost Double pipeUSD2.06e+04
    Total purchase cost USD2.06e+04
    Utility cost USD/hr0
    相変化(蒸発・凝縮)を伴わず、温度変化のみで熱を吸収・放出する場合で、ユーザーが出口の相(液相・気相)を指定する場合(より計算効率が高い):
    from biosteam.units import HXprocess
    from biosteam import Stream, settings
    settings.set_thermo(['Water', 'Ethanol'])
    in_a = Stream('in_a', Water=200, T=350)
    in_b = Stream('in_b', Ethanol=200)
    hx = HXprocess('hx', ins=(in_a, in_b), outs=('out_a', 'out_b'),
                   phase0='l', phase1='l')
    hx.simulate()
    hx.show()
    HXprocess: hx
    ins...
    [0] in_a  
        phase: 'l', T: 350 K, P: 101325 Pa
        flow (kmol/hr): Water  200
    [1] in_b  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Ethanol  200
    outs...
    [0] out_a  
        phase: 'l', T: 303.15 K, P: 101325 Pa
        flow (kmol/hr): Water  200
    [1] out_b  
        phase: 'l', T: 328.09 K, P: 101325 Pa
        flow (kmol/hr): Ethanol  200
    hx.results()
    Heat exchangerUnitshx
    Design Areaft^2369
    Overall heat transfer coefficientkW/m^2/K0.5
    Log-mean temperature differenceK11.4
    Fouling correction factor1
    Operating pressurepsi14.7
    Total tube lengthft20
    Purchase cost Double pipeUSD2.23e+04
    Total purchase cost USD2.23e+04
    Utility cost USD/hr0

このブログの人気の投稿

さあ、始めよう!

蒸留塔

機器ユニットの計算結果