Stream(ストリーム)
Streamの使い方を説明しています。 オリジナルのページはStreamです。本家ページは巨大なので、調査した部分のみ、記載しています。徐々に充実させていく予定です。 ソースコードは以下の実行環境で確認しています。
- Visual Studio Code バージョン: 1.104.2
- 拡張機能:Jupyter バージョン 2025.8.0
- Python 3.12.10
- biosteam 2.52.13
- graphviz-14.0.2
Stream
class Stream (ID='', flow=None, phase='l', T=298.15, P=101325.0, units=None, price=0.0, total_flow=None, thermo=None, characterization_factors=None, vlle=False, **chemical_flows) [source]
Streamオブジェクトを作成することで、物質の流量と熱力学状態を定義できます。 ストリームの熱力学的性質や輸送特性はプロパティとして取得可能であり、熱力学的平衡(例:蒸気液平衡(VLE)、沸点、露点)はメソッドとして利用できます。
- パラメータ
- ID (str、省略可) 他で使われていない、一意の識別子(ID)。IDが
- flow (シーケンス(順序付きコレクション)[float]、省略可) 定義された成分それぞれに対応する流量。単位は
- phase (str、省略可) 相。'g'は気相(ガス)、'l'は液相(リキッド)、's'は固体相(ソリッド)。デフォルトは'l'。
- T (float、省略可) 温度[K]。デフォルトは298.15[K](=25℃)。
- P (float、省略可) 圧力[Pa]。デフォルトは101325[Pa]。
- units (str、省略可) 流量の単位。質量、モル、体積流量が利用可能。デフォルトは'kmol/hr'
- Price (float、省略可) 体積当たりの費用[USD/kg]。デフォルトは0。
- total_flow (float、省略可) 総流量
- thermo (Thermo、省略可) Thermoオブジェクトの入力ストリームと出力ストリームを初期化する。デフォルトはsettings.thermo.
- characterization_factors (dict[str,float]、省略可) ライフサイクル評価(LCA: Life Cycle Assessment)において、環境影響評価の段階で使用される特性係数。
- vlle (bool、省略可) 厳密な相平衡計算を実行して相を決定するかどうか。デフォルトはFalse。
- **chemical_flows (float、省略可) ID - 流量のペア。
- 例
Noneの場合、ストリームは登録されません。IDが指定されていない場合は、自動的に一意のIDが付与されます。
unitsで指定する。
ストリームを生成する前に、使用する化学種を設定します。
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
ストリームを生成するには、熱力学的状態と流量を定義します。
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.show(flow='kg/hr') # 表示するための単位を選択するにはshowメソッドを使います
Stream: s1
phase: 'l', T: 298.15 K, P: 101325 Pa
flow (kg/hr): Water 20
Ethanol 10
s1.show(composition=True, flow='kg/hr') # 割合で表示することも可能(この場合は質量分率)
Stream: s1
phase: 'l', T: 298.15 K, P: 101325 Pa
composition (%): Water 66.7
Ethanol 33.3
------- 30 kg/hr
すべての流量は、mol 属性内の疎配列として保存されています。この配列は NumPy 配列と同様に動作しますが、疎な化学データに対しては、よりスケーラブル(メモリ節約と高速化)に機能します。
s1.mol # モル流量 [kmol/hr]
sparse([1.11 , 0.217])質量流量や体積流量も利用可能です。
s1.mass # [kg/hr]
sparse([20., 10.])
s1.vol # m3/hr
sparse([0.02 , 0.013])これらの配列は、モル流量と連携しています。
# 質量流量はモル流量と同期して最新の状態に保たれます
s1.mol[0] = 1
s1.mass
sparse([18.015, 10. ])
s1.mass[0]
18.01528※水1molの質量は約18.015g
# モル流量を変更するとモル流量も変化します
s1.mass[0] *= 2
s1.mol[0]
2.0以下の例では、配列の元のデータは変更されず、新しい配列が返されます。これはNumpyやPandasの仕様に依存しています。
# 新しい配列はモル流量とリンクしていません
s1.mass + 2
これを実行すると各要素が+2された配列が返ってきますが、
sparse([38.031, 12. ])再度s1.massを確認すると、
s1.mass
sparse([36.031, 10. ])となっていて、元のデータは変更されていません。元のデータを変更したい場合は例えば、
s1.mass += 2
などとすれば変更できます。
s1.mass
sparse([38.031, 12. ])温度、圧力、相も同様に確認できます。
(s1.T, s1.P, s1.phase)
(298.15, 101325.0, 'l')流量を取得・設定する最も便利な方法は、get_flow メソッドと set_flow メソッドを使うことです。
# 流量をセット
s1.set_flow(1, 'gpm', 'Water')
s1.get_flow('gpm', 'Water')
1.0
gpmはガロン毎分(Gallons Per Minute)ですかね。次はいくつかの成分をまとめて設定する場合です。
# 複数の成分を設定
s1.set_flow([10, 20], 'kg/hr', ('Ethanol', 'Water'))
s1.get_flow('kg/hr', ('Ethanol', 'Water'))
array([10., 20.])IDを指定して、imol、imass、ivol の各インデクサーを使って取得することも可能です。
s1.imol.show()
ChemicalMolarFlowIndexer (kmol/hr):
(l) Water 1.11
Ethanol 0.217
s1.imol['Water']
1.1101687012358397順番を入れ替えても指定通りの順番で返ってきます。
s1.imol['Ethanol', 'Water']
array([0.217, 1.11 ])熱力学的な値もストリームのプロパティとして扱うことが出来ます。
s1.H # エンタルピー (kJ/hr)
0.0基準エンタルピーは、基準温度 298.15 K(25℃) および圧力 101,325 Pa において 0.0 と定義されています。 基準温度より10℃高い温度のエンタルピーは以下のように取得できます。
s1.T += 10
s1.H
1083.467342125117他の温度や圧力に依存する熱力学的な値、たとえば密度は以下のように取得できます。
s1.rho # 密度 [kg/m3]
909.1470679081256単位を変えるのも簡単です。
s1.get_property('rho', 'g/cm3')
0.9091470679081258他にも、単位を指定して設定することが出来ます。
s1.set_property('T', 40, 'degC')
s1.T
313.15気泡点(バブルポイント)および露点(デューポイント)の計算は、ストリームに備えられたメソッドを通じて実行できます。
bp = s1.bubble_point_at_P() # 所定圧力での気泡点
bp
BubblePointValues(T=357.14, P=101325, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.492 0.508])
BubblePointValuesには種々のデータが含まれています。
tmo.docround(bp.T) # 温度 [K]
357.1442
bp.y # 気相のモル比率
array([0.492, 0.508])気液平衡は、 T[温度(K)]、P[圧力(Pa)]、V[蒸気分率(混合物中の蒸気の割合)]、H[エンタルピー(kJ/hr)]のうち2つを指定することで計算可能です。 ストリームの蒸気分率と圧力を指定してみましょう。
s1.vle(P=101325, V=0.5)
s1.show()
MultiStream: s1
phases: ('g', 'l'), T: 364.78 K, P: 101325 Pa
flow (kmol/hr): (g) Water 0.472
Ethanol 0.191
(l) Water 0.638
Ethanol 0.0257
今、このストリームは、複数の相を管理するために、マルチストリームオブジェクト(MultiStream object)になっています。
各相の値はそれぞれ取り出すこともできます。
s1['l'].show()
Stream:
phase: 'l', T: 364.78 K, P: 101325 Pa
flow (kmol/hr): Water 0.638
Ethanol 0.0257
s1['g'].show()
Stream:
phase: 'g', T: 364.78 K, P: 101325 Pa
flow (kmol/hr): Water 0.472
Ethanol 0.191
ここまでの結果を使って、蒸気分率が本当に0.5になっているかも確認しておきます。ストリームの総モル数はF_molで取得できます。
s1.F_mol
1.3272370456382114液相のモル数
s1['l'].F_mol
0.6636185226365505気相のモル数
s1['g'].F_mol
0.6636185230016609マルチストリームは、相を指定することで単相のストリームに戻すこともできます。
s1.phase = 'l'
s1.show(flow='kg/hr')
Stream: s1
phase: 'l', T: 364.78 K, P: 101325 Pa
flow (kg/hr): Water 20
Ethanol 10
温度、圧力そのままで液体のみのストリームになった、という想定でしょうか。
price : プロパティ, float
sugarcane = bst.Stream(
'sugarcane',
Water=0.7,
Glucose=0.01208,
Sucrose=0.1369,
Ash=0.006,
Fiber=0.13,
Solids=0.015,
total_flow=370396,
units='kg/hr',
price=price['Sugar cane']
)
sugarcane.price
0.03455
cost : プロパティ, float
T : プロパティ, float
P : プロパティ, float
phase : プロパティ, str
mol : プロパティ, ndarray [Any,dtype[float]]
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.mol # モル流量 [kmol/hr]
sparse([1.11 , 0.217])
mass : プロパティ, SparseVector / SparseArray
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.mass # [kg/hr]
sparse([20., 10.])
vol : プロパティ, SparseVector / SparseArray
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.vol # m3/hr
sparse([0.02 , 0.013])
imol : プロパティ, Indexer
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.imol['Water']
1.1101687012358397
s1.imol['Ethanol', 'Water']
array([0.217, 1.11 ])成分の指定がない場合はそのストリームに含まれるすべての成分と流量を相ごとに取得できる。
s1.vle(P=101325, V=0.5)
s1.imol
MolarFlowIndexer (kmol/hr):
(g) Water 0.472
Ethanol 0.191
(l) Water 0.638
Ethanol 0.0257
相が分かれているときも、成分を指定するときはその成分の合計になる。
s1.imol['Water']
1.1101687012358397
imass : プロパティ, Indexer
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.imass['Water']
20.0
s1.imass['Ethanol', 'Water']
array([10., 20.])インデックスの指定がない場合はそのストリームに含まれるすべての成分(ID)と流量を相ごとに取得できる。
s1.vle(P=101325, V=0.5)
s1.imass
MassFlowIndexer (kg/hr):
(g) Water 8.51
Ethanol 8.82
(l) Water 11.5
Ethanol 1.18
相が分かれているときも、成分(ID)を指定するときはその成分のモル数に応じた質量の合計になる。
s1.imass['Water']
20.0
ivol : プロパティ, Indexer
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.ivol['Water']
0.020058883268535846
s1.ivol['Ethanol', 'Water']
array([ 5.596, 13.951])インデックスの指定がない場合はそのストリームに含まれるすべての成分(ID)と流量を相ごとに取得できる。
s1.vle(P=101325, V=0.5)
s1.imass
VolumetricFlowIndexer (m^3/hr):
(g) Water 13.9
Ethanol 5.59
(l) Water 0.0119
Ethanol 0.00164
相が分かれているときも、成分(ID)を指定するときはその成分のモル数に応じた体積の合計になる。
s1.ivol['Water']
13.951053242798679
F_mol : プロパティ, float
総モル流量[kmol/hr]。
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.F_mol
1.3272370456382114
F_mass : プロパティ, float
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.F_mass
30.0
F_vol : プロパティ, float
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.F_vol
0.03279510123305701
H : プロパティ float
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.H # エンタルピー (kJ/hr)
0.0基準エンタルピーは、基準温度 298.15 K(25℃) および圧力 101,325 Pa において 0.0 と定義されています。 基準温度より10℃高い温度のエンタルピーは以下のように取得できます。
s1.T += 10
s1.H
1083.467342125117
MW : プロパティ float
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.MW
22.603347381382264
Cn : プロパティ, float
import thermosteam as tmo
tmo.settings.set_thermo(['Water'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.Cn
75.32753127987698
Cp : プロパティ float
import thermosteam as tmo
tmo.settings.set_thermo(['Water','Ethanol'], cache=True)
s1 = tmo.Stream(ID='s1',
Water=20, units='kg/hr',
T=298.15, P=101325, phase='l')
s1.Cp
4.181313378414156エタノールは液体(25℃、常圧)で 2418 J(kg/k)らしい。
s2 = tmo.Stream(ID='s2',
Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s2.Cp
2.4344813098812486混合した場合も自動で計算されます。こういう計算を自動でやってくれるところがこの手のソフトの嬉しいところ。
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s3 = tmo.Stream(ID='s3',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s3.Cp
3.59903602223652最後までソースコードを追えていませんが、 \[ Cp_{混合流} = \frac{Cn_{水} \cdot (水のモル分率) + Cn_{エタノール} \cdot (エタノールのモル分率)}{モル当たりの質量} \] というような計算をしているようですので、確認してみます。
(s1.Cn * s3.imol['Water'] / s3.F_mol + s2.Cn * s3.imol['Ethanol'] / s3.F_mol ) / s3.MW
3.59903602223652と一致します。なお、ここまで見ても分かるように、単位は[kJ/g/K]と思われます。
bubble_point_at_T(P=None, IDs=None)[source]
指定温度で平衡状態になった時の気泡点(バブルポイント)に関するすべてのデータを含む BubblePointResults オブジェクトを返します。
- パラメータ
- T(float、省略可) 温度 [K]。省略時はストリームの定義に基づいて25℃(298.15K)になります。
- IDs(シーケンス(順序付きコレクション)[str]、省略可) 平衡に関与する成分。指定がない場合は、ストリームにあるすべての成分が対象となり、平衡となった場合の気泡点温度を返します。
- 例
- 補足(i)
- 補足(ii)
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream('s1', Water=20, Ethanol=10, T=350, units='kg/hr')
s1.bubble_point_at_T()
BubblePointValues(T=350.00, P=76463, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.488 0.512])
結果、ストリームs1定義時にT=350K(76.85℃)で設定しているので、350K(76.85℃)での気泡点(バブリングポイント)データが確認できます。T:温度350K(76.85℃)、P:圧力76,463Pa、計算対象の成分(ID)は水、エタノール、zは全体のモル比率(液相と気相の全体の組成)で、水 0.836:エタノール 0.164、yは気相のモル比率(気相の組成)で、水 0.492:エタノール 0.508だそうです。
BubblePointValuesオブジェクトは、thermosteam.equilibrium.bubble_point.BubblePointValues
にあります。
気泡点(バブルポイント)が自分にとっては聞きなれない言葉だったので追加で調べてみました。
import thermosteam as tmo
tmo.settings.set_thermo(['Water'], cache=True)
water = tmo.Stream(ID='water',
Water=20, units='kg/hr',
T=298.15, P=101325, phase='l')
water.bubble_point_at_T()
BubblePointValues(T=298.15, P=3170, IDs=('Water',), z=[1.], y=[1.])
水の25℃での飽和水蒸気圧は3,170Paだそうで、通常の大気圧(101.3 kPa)では沸騰しない、と。
import thermosteam as tmo
tmo.settings.set_thermo(['Ethanol'], cache=True)
ethanol = tmo.Stream(ID='ethanol',
Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
ethanol.bubble_point_at_T()
BubblePointValues(T=298.15, P=7885, IDs=('Ethanol',), z=[1.], y=[1.])
エタノールの25℃での飽和蒸気圧は7,885Paだそうなので、やはり25℃では沸騰しないが、減圧していくと水よりは高い圧力で沸騰しそうですね。混合すると、その間の圧力になりました。
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s2 = tmo.Stream(ID='s2',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s2.bubble_point_at_T()
BubblePointValues(T=298.15, P=5946, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.472 0.528])
温度を350Kまで上げると、先ほどの例と同じ結果になりますね。
s2.T=350
s2.bubble_point_at_T()
BubblePointValues(T=350.00, P=76463, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.488 0.512])
bubble_point_at_P(P=None, IDs=None, vlle=False)[source]
指定圧力で平衡状態になった時の気泡点(バブルポイント)に関するすべてのデータを含む BubblePointResults オブジェクトを返します。
- パラメータ
- P(float、省略可) 圧力 [Pa]。省略時はストリームの定義に基づいて大気圧(101,325Pa)になります。
- IDs(シーケンス(順序付きコレクション)[str]、省略可) 平衡に関与する成分。指定がない場合は、ストリームにあるすべての成分が対象となり、平衡となった場合の気泡点温度を返します。
- vlle vlle=Trueの時は、蒸気-液体-液体平衡(VLLE:Vapor-Liquid-Liquid Equilibrium)を考慮した気泡点を計算します。通常の気液平衡(VLE)とは異なり、VLLEでは液相が水相と有機相のような2つの相に分離するような状態も考慮するそうです。
- 例
- 補足(i)
- 補足(ii)
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream('s1', Water=20, Ethanol=10, T=350, units='kg/hr')
s1.bubble_point_at_P()
BubblePointValues(T=357.14, P=101325, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.492 0.508])
結果、Pは省略したので、大気圧(101,325Pa)での気泡点(バブルポイント)に関するデータが確認でき、T:温度357.15K(83.99℃)、P:圧力101,325Pa、計算対象の成分(ID)は水、エタノール、zは全体のモル比率(液相と気相の全体の組成)で、水 0.836:エタノール 0.164、yは気相のモル比率(気相の組成)で、水 0.492:エタノール 0.508だそうです。
BubblePointValuesオブジェクトは、thermosteam.equilibrium.bubble_point.BubblePoint
にあります。
気泡点(バブルポイント)が自分にとっては聞きなれない言葉だったので追加で調べてみました。
import thermosteam as tmo
tmo.settings.set_thermo(['Water'], cache=True)
water = tmo.Stream(ID='water',
Water=20, units='kg/hr',
T=298.15, P=101325, phase='l')
water.bubble_point_at_P()
BubblePointValues(T=373.12, P=101325, IDs=('Water',), z=[1.], y=[1.])
水の大気圧での沸点は99.97℃(373.12K)になっています。
import thermosteam as tmo
tmo.settings.set_thermo(['Ethanol'], cache=True)
ethanol = tmo.Stream(ID='ethanol',
Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
ethanol.bubble_point_at_P()
BubblePointValues(T=351.57, P=101325, IDs=('Ethanol',), z=[1.], y=[1.])
エタノールの大気圧での沸点は78.6℃(351.57K)となっています。この二つの結果
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s2 = tmo.Stream(ID='s2',
Water=20, Ethanol=10, units='kg/hr',
T=298.15, P=101325, phase='l')
s2.bubble_point_at_P()
BubblePointValues(T=357.14, P=101325, IDs=('Water', 'Ethanol'), z=[0.836 0.164], y=[0.492 0.508])
温度を83.99℃(357.14K)まで上げると、気泡が発生しだす、ということですね。
mix_from(flow=None, energy_balance=True, vle=False, Q=0.0, conserve_phases=False ) [source]
複数のストリームをひとつに混合します。その際、元の設定は無視します。
- パラメータ
- flow (Sequence(順序付きコレクション)[Stream|str]、省略可) - 混合されるストリーム
- 注記
- 例
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream('s1', Water=20, Ethanol=10, units='kg/hr')
s2 = s1.copy('s2')
s1.mix_from([s1, s2])
s1.show(flow='kg/hr')
Stream: s1
phase: 'l', T: 298.15 K, P: 101325 Pa
flow (kg/hr): Water 40
Ethanol 20
混合先のストリームの物性パッケージにすべての化学種が定義されていれば、異なる物性パッケージを持つストリーム同士を混合することも可能です。
tmo.settings.set_thermo(['Water'], cache=True)
s1 = tmo.Stream('s1', Water=40, units='kg/hr')
tmo.settings.set_thermo(['Ethanol'], cache=True)
s2 = tmo.Stream('s2', Ethanol=20, units='kg/hr')
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s_mix = tmo.Stream('s_mix')
s_mix.mix_from([s1, s2])
s_mix.show(flow='kg/hr')
Stream: s_mix
phase: 'l', T: 298.15 K, P: 101325 Pa
flow (kg/hr): Water 40
Ethanol 20
空のストリームを指定することも可能です。
s1.empty(); s2.empty(); s_mix.mix_from([s1, s2])
s_mix.show()
Stream: s_mix phase: 'l', T: 298.15 K, P: 101325 Pa flow: 0
copy_flow(flow=None, remove=False, exclude=False ) [source]
指定したストリームのコピーを作成します。
- パラメータ
- flow (Sequence(順序付きコレクション)[Stream|str]、省略可) - コピー元のストリーム
- IDs (Sequence(順序付きコレクション)[Stream|str]、省略可) - removeやexcludeで指定する成分
- remove bool、省略可) - Trueであれば、元のストリームからその成分は削除される。デフォルトはFalse。
- exclude bool、省略可) - Trueであれば、その成分はコピーされない。デフォルトはFalse。
- 例
import thermosteam as tmo
tmo.settings.set_thermo(['Water', 'Ethanol'], cache=True)
s1 = tmo.Stream('s1', Water=20, Ethanol=10, units='kg/hr')
s2 = tmo.Stream('s2')
全てをコピーします。
s2.copy_flow(s1)
s2.show(flow='kg/hr')
Stream: s2
phase: 'l', T: 298.15 K, P: 101325 Pa
flow (kg/hr): Water 20
Ethanol 10
一度's2'を削除し、水だけをコピーします。
s2.empty()
s2.copy_flow(s1, 'Water')
s2.show(flow='kg/hr')
Stream: s2 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): Water 20再度's2'を削除し、水以外をコピーします。
s2.empty()
s2.copy_flow(s1, 'Water', exclude=True)
s2.show(flow='kg/hr')
Stream: s2 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): Ethanol 10コピーして元のストリームを削除します。
s2.copy_flow(s1, remove=True)
s2.show(flow='kg/hr')
Stream: s2
phase: 'l', T: 298.15 K, P: 101325 Pa
flow (kg/hr): Water 20
Ethanol 10
元の's1'を確認します。
s1.show()
Stream: s1 phase: 'l', T: 298.15 K, P: 101325 Pa flow: 0流量がゼロになっていますね。これは、混相流でも適用できます。気体の水のストリームを設定します。
s1.phases = ('g', 'l')
s1.imol['g', 'Water'] = 10
s1.show()
MultiStream: s1
phases: ('g', 'l'), T: 298.15 K, P: 101325 Pa
flow (kmol/hr): (g) Water 10
s2.copy_flow(s1, remove=True)
s2.show()
Stream: s2 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kmol/hr): Water 10モル流量はコピーできましたが、相は液体になるようです。remove=Trueとしましたので、元のストリームの流量はゼロになります。
s1.show()
MultiStream: s1
phases: ('g', 'l'), T: 298.15 K, P: 101325 Pa
flow: 0
水分以外をコピーし、元のストリームから削除します。水以外の成分を抜き出して移動させるイメージでしょうか。
s1 = tmo.Stream('s1', Water=20, Ethanol=10, units='kg/hr')
s2 = tmo.Stream('s2')
s2.copy_flow(s1, 'Water', exclude=True, remove=True)
s1.show('wt')
Stream: s1 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): Water 20's1'には水分だけ残っています。
s2.show('wt')
Stream: s2 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): Ethanol 10's2'にエタノールが移動した形です。
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。
- 例
import biosteam as bst
bst.settings.set_thermo(['Water', 'Ethanol', 'Methanol', 'Propanol'])
stream = bst.Stream('stream', Water=0.5, Ethanol=1.5, Methanol=0.2, Propanol=0.3, units='kg/hr')
stream.show('cwt2s') # Alternatively: stream.show(composition=True, flow='kg/hr', N=2, sort=True)
Stream: stream
phase: 'l', T: 298.15 K, P: 101325 Pa
composition (%): Ethanol 60
Water 20
... 20
------- 2.5 kg/hr