機器ユニットの作成

バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"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つの情報を渡します。 insouts には、Stream オブジェクト単体または複数の Stream オブジェクトからなる組(リスト)のどちらでも指定可能です。
  1. ID、流入、流出ストリームの設定
  2. Unit.show()でFalseを渡すとストリームの名前だけ確認することが出来ます。
    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] out0
    U1というIDのユニットで、in0が流入ストリームに、out0が流出ストリームに設定されました。
  3. 図で接続を確認
  4. 図で見ることで接続を確認することもできます。
    U1.diagram()
  5. IDの設定がない場合
  6. IDの設定がない場合は、使われていないデフォルトのIDが設定されます。
    U2 = Unit('U2', ins='', outs=['']) # Empty strings default unused IDs
    U2.show(data=False)
    Unit: U2
    ins...
    [0] s1  
    outs...
    [0] s2

デフォルトのパラメータ

  1. デフォルトのID、流入/流出ストリーム
  2. デフォルトでは、他で使われていないIDが選ばれ、未設定の流入ストリームはmissing streamとなり、空の流出ストリームは他で使われていないIDが自動で設定されます。
    unit = Unit()
    unit.show(data=False)
    Unit: U3
    ins...
    [0] missing stream  
    outs...
    [0] s3
  3. 流入/流出ストリームがNoneの場合
  4. 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
  5. 流入/流出ストリームが複数のストリームの組(リスト)の場合
  6. 空の複数のストリームの組(リスト)が指定された場合は、空のストリームとして初期化されます。
    U5 = Unit('U5', ins=(), outs=())
    U5.show(data=False)
    Unit: U5
    ins...
    [0] s4  
    outs...
    [0] s5
  7. 流入/流出ストリームの数
  8. デフォルトのストリーム数は、機器ユニットによって異なります。まずは混合器(ミキサー)の場合は、流入ストリームが2個、流出が1個です。
    from biosteam import Mixer, Splitter
    Mixer().show(data=False) 
    Mixer: M1
    ins...
    [0] missing stream  
    [1] missing stream  
    outs...
    [0] s6
  9. 分配器(スプリッター)
  10. 分配器(スプリッター)は流入が1個、流出が2個になります。
    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:プロセス仕様(物理ユニットではないストリームを調整するためのもの)
    機器ユニットの設定を命名規則に注目して続けます。
  1. 混合器(Mixer)
  2. Mixer().show(data=False)
    Mixer: M2
    ins...
    [0] missing stream  
    [1] missing stream  
    outs...
    [0] s9
  3. 分配器(Splitter)
  4. Splitter(split=0.5).show(data=False)
    Splitter: S2
    ins...
    [0] missing stream  
    outs...
    [0] s10  
    [1] s11
  5. さらに分配器(Splitter)
  6. Splitter(split=0.5).show(data=False)
    Splitter: S3
    ins...
    [0] missing stream  
    outs...
    [0] s12  
    [1] s13
    デフォルトでIDを設定する限り、重複はありません。
  7. 任意の番号設定
  8. 以下のようにすることで101番から作成できます。
    Mixer(100).show(data=False)
    Mixer: M101
    ins...
    [0] missing stream  
    [1] missing stream  
    outs...
    [0] s14

このブログの人気の投稿

さあ、始めよう!

蒸留塔

機器ユニットの計算結果