分離
バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"BioSTEAM"のストリームを分流するモデルの使い方について説明しています。
オリジナルのページはsplittingです。
ソースコードは以下の実行環境で確認しています。
- Visual Studio Code バージョン: 1.104.2
- 拡張機能:Jupyter バージョン 2025.8.0
- Python 3.12.10
- biosteam 2.52.13
- graphviz-14.0.2
分離
class Splitter(ID='', ins=None, outs =(), split, order=None, thermo=None, **kwargs ) [source]
混合されたストリームを指定された割合で分割する分流器のモデルです。
- パラメータ
- ID (str、省略可) - 一意の識別子(ID)。
- ins (Sequence(順序付きコレクション)[Stream|str]、省略可) - 分離される流入ストリーム
- outs (Sequence(順序付きコレクション)[Stream|str]、省略可) - 流出ストリーム
- [0] 分離されたストリーム
- [1] 残りのストリーム
- split 以下のどれか
- [float] outs[0]への分離比。
- [array_like] 流入ストリームの成分ごとの分割比をouts[0]に適用
- [dict] 成分(ID)と分割比の組み合わせを辞書型配列で指定し、流入ストリームの成分ごとの分割比をouts[0]に適用
- order (順番付き
[str])
- 成分ごとの流出ストリームouts[0]への分離比を配列で指定した時の成分の順番。デフォルトは
Stream.chemicals.IDs で指定した順番。 - 例
ID指定、供給ストリームが1つで、全体の分割比をしていして2つの流出ストリームに分離する分流器を作成します。
from biosteam import units, settings, Stream
settings.set_thermo(['Water', 'Ethanol'], cache=True)
feed = Stream('feed', Water=20, Ethanol=10, T=340)
S1 = units.Splitter('S1', ins=feed, outs=('top', 'bot'), split=0.1)
S1.simulate()
S1.show()
Splitter: S1
ins...
[0] feed
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 20
Ethanol 10
outs...
[0] top
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 2
Ethanol 1
[1] bot
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 18
Ethanol 9
次に、成分ごとの分割比を辞書形式で指定した場合を示します。
S1 = units.Splitter('S1', ins=feed, outs=('top', 'bot'),
split={'Water': 0.1, 'Ethanol': 0.99})
Splitter: S1
ins...
[0] feed
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 20
Ethanol 10
outs...
[0] top
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 2
Ethanol 9.9
[1] bot
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 18
Ethanol 0.1
次に、成分ごとの分割比を(タプルで)指定した場合を示します。ここではその分割比の順番をorderで指示しています。
S1 = units.Splitter('S1', ins=feed, outs=('top', 'bot'),
order=('Ethanol', 'Water'),
split=(0.99, 0.10))
S1.simulate()
S1.show()
Splitter: S1
ins...
[0] feed
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 20
Ethanol 10
outs...
[0] top
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 2
Ethanol 9.9
[1] bot
phase: 'l', T: 340 K, P: 101325 Pa
flow (kmol/hr): Water 18
Ethanol 0.1
同じ結果になっていますね。なお、分割比は後でも変更できます。S1.split = 0.5
S1.isplit.show()
SplitIndexer: Water 0.5 Ethanol 0.5
S1.isplit['Water'] = 1.0
S1.isplit.show()
SplitIndexer: Water 1 Ethanol 0.5
S1.split = [0.9, 0.8]
S1.isplit.show()
SplitIndexer: Water 0.9 Ethanol 0.8
