機器ユニットの作成
バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"BioSTEAM"のそれぞれの機器をモデル化する手順について説明しています。
オリジナルのページはCreating a Unitです。
ソースコードは以下の実行環境で確認しています。
- Visual Studio Code バージョン: 1.104.2
- 拡張機能:Jupyter バージョン 2025.8.0
- Python 3.12.10
- biosteam 2.52.13
- graphviz-14.0.2
機器ユニットの作成
すべての機器ユニットは、名前と流入(inlet)および流出(outlet)の両方のストリームを渡すことで作成されます。親クラスである Unit クラスは、シミュレーション時には何も処理を行いませんが、これは熱交換器や混合器(ミキサー)などの子クラスに共通する一般的なクラスとして使用されます。これらの子クラスに実際のモデリングアルゴリズムを実装しています。キーとなるパラメータ
Unit オブジェクトを初期化するには、ID(識別子)、
流入ストリーム(ins)、
流出ストリーム(outs)の3つの情報を渡します。
insや
outsには、Stream オブジェクト単体または複数の Stream オブジェクトからなる組(リスト)のどちらでも指定可能です。
- ID、流入、流出ストリームの設定 Unit.show()でFalseを渡すとストリームの名前だけ確認することが出来ます。
- 図で接続を確認 図で見ることで接続を確認することもできます。
- IDの設定がない場合 IDの設定がない場合は、使われていないデフォルトのIDが設定されます。
from biosteam import Unit, Stream, settings, main_flowsheet
import biosteam as bst
bst.nbtutorial() # Light-mode html diagrams and filter warnings
settings.set_thermo(['Water'])
ins = Stream('in0')
outs = [Stream('out0')]
U1 = Unit(ID='U1', ins=ins, outs=outs)
U1.show(data=False) # Passing data as False returns only stream names
Unit: U1 ins... [0] in0 outs... [0] out0U1というIDのユニットで、in0が流入ストリームに、out0が流出ストリームに設定されました。
U1.diagram()
U2 = Unit('U2', ins='', outs=['']) # Empty strings default unused IDs
U2.show(data=False)
Unit: U2 ins... [0] s1 outs... [0] s2
デフォルトのパラメータ
- デフォルトのID、流入/流出ストリーム デフォルトでは、他で使われていない
- 流入/流出ストリームがNoneの場合
- 流入/流出ストリームが複数のストリームの組(リスト)の場合 空の複数のストリームの組(リスト)が指定された場合は、空のストリームとして初期化されます。
- 流入/流出ストリームの数 デフォルトのストリーム数は、機器ユニットによって異なります。まずは混合器(ミキサー)の場合は、流入ストリームが2個、流出が1個です。
- 分配器(スプリッター) 分配器(スプリッター)は流入が1個、流出が2個になります。
IDが選ばれ、未設定の流入ストリームは
missing streamとなり、空の流出ストリームは他で使われていないIDが自動で設定されます。
unit = Unit()
unit.show(data=False)
Unit: U3 ins... [0] missing stream outs... [0] s3
insまたは
outsのいずれかに対して、None が指定された場合は、
missing streamとなります。
U4 = Unit('U4', ins=None, outs=None)
U4.show(data=False)
Unit: U4 ins... [0] missing stream outs... [0] missing stream
U5 = Unit('U5', ins=(), outs=())
U5.show(data=False)
Unit: U5 ins... [0] s4 outs... [0] s5
from biosteam import Mixer, Splitter
Mixer().show(data=False)
Mixer: M1 ins... [0] missing stream [1] missing stream outs... [0] s6
Splitter(split=0.5).show(data=False)
Splitter: S1 ins... [0] missing stream outs... [0] s7 [1] s8機器ユニットごとにデフォルトIDの先頭文字が異なります。これは、デフォルト名が「エリア命名規則(area naming convention)」に従っているためです。この命名規則の詳細については、次のセクションで説明します。
エリア命名規則
機器ユニットのデフォルトIDは、{文字}{エリア番号}という形式の「エリア命名規則」に基づいています。このとき、先頭の文字(letter)は機器ユニットの種類によって決まります。- C:遠心分離機(Centrifuge)
- D:蒸留塔(Distillation column)
- E:蒸発器(Evaporator) F:フラッシュ蒸留器(Flash tank)
- H:熱交換器(Heat exchange)
- M:混合器(Mixer)
- P:ポンプ(Pump、搬送ベルトも含む);
- R:反応器(Reactor);
- S:分配器(Splitter、固液分離器も含む)
- T:タンク(Tank もしくは貯蔵用瓶)
- U:その他機器
- J:ストリームを調整するためのジャンクション(物理的な機器ではなく)
- PS:プロセス仕様(物理ユニットではないストリームを調整するためのもの)
-
機器ユニットの設定を命名規則に注目して続けます。
- 混合器(Mixer)
- 分配器(Splitter)
- さらに分配器(Splitter)
- 任意の番号設定 以下のようにすることで101番から作成できます。
Mixer().show(data=False)
Mixer: M2 ins... [0] missing stream [1] missing stream outs... [0] s9
Splitter(split=0.5).show(data=False)
Splitter: S2 ins... [0] missing stream outs... [0] s10 [1] s11
Splitter(split=0.5).show(data=False)
Splitter: S3 ins... [0] missing stream outs... [0] s12 [1] s13デフォルトでIDを設定する限り、重複はありません。
Mixer(100).show(data=False)
Mixer: M101 ins... [0] missing stream [1] missing stream outs... [0] s14
← さあ、始めよう!
