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が
- ins (シーケンス(順序付きコレクション)[Stream | str]、省略可) 流入ストリームか、流入ストリームを初期化するためのID。もし、空のタプルやストリームの場合、デフォルトのID が設定されます。初期状態ではストリームは未定義です。
- outs (シーケンス(順序付きコレクション)[Stream | str]、省略可) 流出ストリームか、流出ストリームを初期化するためのID。デフォルトでは一意のIDが設定されます。もし、Noneの時は未定義になります。
- thermo (thermo、省略可) 流入、流出ストリームを初期化するThermo オブジェクト。デフォルトはsettings.thermo。
- 詳細
- \( C_{Pb} \): ベースライン購入価格(baseline purchase cost)
- \( C_P \) : 購入価格(purchase cost)
- \( C_{BM} \) : 設備設置コスト(installed_cost) ※ \( C_{BM} \)は
- \( F_{BM} \) : 設置に関する係数(Bare module factor)
- \( F_D \) : 購入費用に対する設計の係数(Design factor)
- \( F_P \) : 購入費用に対する圧力の係数(Pressure factor)
- \( F_M \) : 購入費用に対する材料の係数(Material factor)
- 補足1
- 設置に関する係数 F_{BM}: 実際に稼働状態にするための据付・配管・電気・計装なのどの補助設備費を推定するための係数
- 購入費用に対する設計の係数 F_D: 標準設計からの外れた仕様に対する追加コストを反映するための係数
- 購入費用に対する圧力の係数 F_P: 使用圧力が高くなることによる機器の構造強化等
- 購入費用に対する材料の係数 F_M: 耐腐食性や高温対応などで炭素鋼(標準材)以外の材質(ステンレス鋼、チタンなど)を使用する場合の係数
- 補足2
- 例
- 補足3
- 例
Noneの場合、ストリームはフローシートに登録されません。IDが指定されていない場合は、自動的に一意のIDが付与されます。
辞書型配列のbaseline_purchase_costsに含まれる本船渡し(FOB)購入価格と基本モジュール価格(ベアモジュールコスト)のような設備設置コストや補助ユニットのコストは自動的に辞書型配列のpurchase_costsとinstalled_costsに追加されます。
文献[1]にあるように、本船渡し(FOB)購入価格は次のように表されます。 \[ C_P = C_{Pb}F_DF_PF_M \] そして、設備設置コストは次のように表されます。 \[ C_{BM} = C_{Pb}(F_{BM} + F_DF_PF_M -1) \] ここで、
installed equipment costのこと[2]です。
各設備の設置に関する係数、設計の係数、圧力の係数、材料の係数はF_BM、F_D、F_P、F_Mに保存されます。
ここで計算している設備の設置費用は、構築したシミュレーションモデルで生産量の拡大等を試算した際に、同時にプラントの費用がどれくらいになるかを計算するものです。ベースとなるプラントの費用に、生産拡大分の補正を以下のような係数を使うことで推定しています。
各機器ユニットのモデルでは、それぞれのベースライン購入価格(baseline purchase costs)を推定しており、例えば蒸留塔は計算諸元から搭径、トレイ数を決め、さらに化学工学プラント費用指数(CEPCI)に基づいて最新の価格レベルに調整しています。購入価格(purchase_costs)は、ベースライン購入価格に、設計係数、圧力計数、材料係数を加味した価格で、標準的な仕様から外れた分を補正します。さらに設置に関する係数を加味することで設備設置コスト(installed_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}
となりました。このように、それぞれ辞書型配列に、対象としている機器の構成部品単位でまとめられています。
機器ユニットごとに計算される単数形のベースライン購入価格(baseline purchase cost)、購入価格(purchase cost)、設置コスト(installed_cost)は辞書型配列に格納された構成部品単位のベースライン購入価格(baseline purchase costs)、購入価格(purchase costs)、設置コスト(installed_costs)のそれぞれの合計という関係になります。
D1.baseline_purchase_cost
588554.5553385002
D1.purchase_cost
586551.6662118004よく見ると、CondenserとReboilerの購入価格がベースライン購入価格よりちょっと安くなってますね。別途調査します。最後に設置コストは
D1.installed_cost
2116290.1894683302
_units : dict [str, str] = {}
_F_BM_default : dict [str, float] = {}
baseline_purchase_cost : プロパティ, float
- 例
D1.baseline_purchase_cost
588554.5553385002
purchase_cost : プロパティ, float
- 例
D1.purchase_cost
586551.6662118004
installed_cost : プロパティ, float
- 例
D1.installed_cost
2116290.1894683302
utility_cost : プロパティ, float
- 例
D1.utility_cost
394.50754490071785
baseline_purchase_costs : dict [str, float]
- 例
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]
- 例
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]
- 例
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]
- 例
D1.F_D
{'Trays': 1, 'Stripper trays': 1, 'Rectifier trays': 1}
F_P : dict [str, float]
- 例
D1.F_P
{}
F_M : dict [str, float]
- 例
D1.F_M
{'Rectifier tower': 1.0,
'Stripper tower': 1.0,
'Tower': 1.0,
'Rectifier trays': 1,
'Stripper trays': 1}
ID
- 例
D1.ID
'D1'
diagram(radius=0, upstream=True, downstream=True, file=None, format=None, display=True, auxiliaries=-1, **graph_attrs)
- パラメータ
- radius (int、省略可) - 隣接するユニット間のストリーム数の最大値。デフォルトは0。
- downstream (bool、省略可) - 下りのストリームを表示するかどうか。デフォルトはTrue。
- upstream (bool、省略可) - 上りのストリームを表示するかどうか。デフォルトはTrue。
- file (str、省略可) - ファイルに出力したい場合はファイル名(拡張子は不要の様子)。指定ない場合はモニター画面に表示。
- format (str、省略可) - ファイルのフォーマット。
- display (bool、省略可) - モニター画面に表示するか、graphviz オブジェクトとして出力するか。
- auxiliaries (bool、省略可) - 表示する補助機器の階層。
- 例
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
参考文献
-
[1]Seider, W. D., Lewin, D. R., Seader, J. D., Widagdo, S., Gani, R., & Ng, M. K. (2017). Product and Process Design Principles. Wiley. Cost Accounting and Capital Cost Estimation (Chapter 16)
-
[2]
-
[3]

