熱交換器
バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"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)
- F_P [heat_exchanger_type] - 購入費用に対する圧力の係数(Pressure factor)
- F_D [heat_exchanger_type] - 購入費用に対する設計の係数(Design factor)
- baseline_purchase_costs [heat_exchanger_type] - タイプ(型)ごとに面積Aより計算
\(
\begin{cases}
2 & A < 150 \\
\textit{compute_shell_and_tube_material_factor} & \text{それ以外}
\end{cases}
\)
\(
\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}
\)
\(
\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}
\)
- \( A \) :熱交換に使用される面積[ft2]
- \( P \) :圧力[psi]
- \( L \) :管の長さ[ft]
compute_floating_head_purchase_cost (A, CE)
フローティングヘッド型の購入価格の計算
compute_fixed_head_purchase_cost (A, CE)
固定ヘッド型の購入価格の計算
compute_u_tube_purchase_cost (A, CE)
U字管型の購入価格の計算
compute_kettle_vaporizer_purchase_cost (A, CE)
ケトル型蒸発器の購入価格の計算
compute_double_pipe_purchase_cost (A, CE)
二重管型の購入価格の計算
compute_furnace_purchase_cost (A, CE)
加熱炉の購入価格の計算
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より小さい場合は環境への伝達による損失を意味します。デフォルトの熱伝達係数はユーティリティエージェントが指定します。
- 注記
- *1 フローティングヘッド型
- 例
HXutilityオブジェクトを作成するときは、T(温度)かV(蒸気分率)のどちらかを指定する必要があります。
太い円柱状の胴体に細い多数の円管を配置し、胴体(シェル)側の流体と円管(チューブ)側の流体間で熱交換を行う多管式熱交換器(シェルアンドチューブ式熱交換器)の一形式で、熱応力を逃がすため、チューブ全体をスライドさせる構造になっており、チューブは抜き取り製造が可能。遊動頭(フローティングヘッド)
温度を指定した場合。水、エタノールがそれぞれ200kmol/hrの液体の温度を50℃上昇させる場合。
蒸気分率を指定した場合。水、エタノールがそれぞれ200kmol/hrの液体の温度を蒸気分率が1、つまり全て蒸発させる場合。気液並行も考慮します。
熱交換器の熱伝達率を変更することもできます。デフォルトが0.95のところを1にしてみます。
負荷、ユーティリティコスト、購入コストが若干下がっています。蒸気分率を指定する場合も同様です。
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 exchanger | Units | hx | |
|---|---|---|---|
| Low pressure steam | Duty | kJ/hr | 1.01e+06 |
| Flow | kmol/hr | 26.2 | |
| Cost | USD/hr | 6.22 | |
| Design | Area | ft^2 | 59.9 |
| Overall heat transfer coefficient | kW/m^2/K | 0.5 | |
| Log-mean temperature difference | K | 101 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 50 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 4.78e+03 |
| Total purchase cost | USD | 4.78e+03 | |
| Utility cost | USD/hr | 6.22 |
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 exchanger | Units | hx | |
|---|---|---|---|
| Low pressure steam | Duty | kJ/hr | 1.94e+07 |
| Flow | kmol/hr | 500 | |
| Cost | USD/hr | 119 | |
| Design | Area | ft^2 | 716 |
| Overall heat transfer coefficient | kW/m^2/K | 1 | |
| Log-mean temperature difference | K | 80.8 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 50 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 2.65e+04 |
| Total purchase cost | USD | 2.65e+04 | |
| Utility cost | USD/hr | 119 |
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 exchanger | Units | hx | |
|---|---|---|---|
| Low pressure steam | Duty | kJ/hr | 9.61e+057 |
| Flow | kmol/hr | 24.9 | |
| Cost | USD/hr | 5.91 | |
| Design | Area | ft^2 | 56.9 |
| Overall heat transfer coefficient | kW/m^2/K | 0.5 | |
| Log-mean temperature difference | K | 101 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 50 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 4.74e+03 |
| Total purchase cost | USD | 4.74e+03 | |
| Utility cost | USD/hr | 5.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 exchanger | Units | hx | |
|---|---|---|---|
| Low pressure steam | Duty | kJ/hr | 1.84e+07 |
| Flow | kmol/hr | 475 | |
| Cost | USD/hr | 113 | |
| Design | Area | ft^2 | 680 |
| Overall heat transfer coefficient | kW/m^2/K | 1 | |
| Log-mean temperature difference | K | 80.8 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 50 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 2.61e+04 |
| Total purchase cost | USD | 2.61e+04 | |
| Utility cost | USD/hr | 113 |
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 exchanger | Units | hx | |
|---|---|---|---|
| Design | Area | ft^2 | 213 |
| Overall heat transfer coefficient | kW/m^2/K | 0.5 | |
| Log-mean temperature difference | K | 20.4 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 14.7 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 2.06e+04 |
| Total purchase cost | USD | 2.06e+04 | |
| Utility cost | USD/hr | 0 |
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 exchanger | Units | hx | |
|---|---|---|---|
| Design | Area | ft^2 | 369 |
| Overall heat transfer coefficient | kW/m^2/K | 0.5 | |
| Log-mean temperature difference | K | 11.4 | |
| Fouling correction factor | 1 | ||
| Operating pressure | psi | 14.7 | |
| Total tube length | ft | 20 | |
| Purchase cost | Double pipe | USD | 2.23e+04 |
| Total purchase cost | USD | 2.23e+04 | |
| Utility cost | USD/hr | 0 |