反応管 水–メタノール混合 平衡圧ビューア
密閉した反応管に水とメタノールの混合液を入れて加熱すると、中の圧力はどこまで上がるのか・どんな相になるのか——を、温度・混合比・量・容器の大きさから見積もるツールです。水版・メタノール版の“混ぜた版”で、メタノールを何%にするか(混合比)も自由に変えられます。

純物質を足し合わせただけでは出てこない混合の効果(共沸的なふるまいなど)も込みで、実験前に圧力と相のあたりを付けられます。
使い方
-
画面の見方
水版・メタノール版と同じ並び(左で条件入力 → 中央に答え=平衡圧と相 → 右に計算式と相組成 → 下に2つのグラフ)。紫系の配色が混合版の目印です。右上の「水版へ →」「メタノール版へ →」で、いまの条件を引き継いだまま純物質版へ切り替えられます。
-
条件と混合比を入れる
温度 T・メタノール組成・充填量 V_fill(室温の液量)・容器体積 V_vessel を入れます。混合版ならではの「メタノール組成」は mol% / wt% / vol% で表示を切替でき(メタ:水の比も表示)、内部は常にモル分率で計算します。すぐ下に混合液の密度 ρ と充填率が自動で出ます。
-
圧力と相を読む
中央の大きな数字が反応管内の平衡圧(MPa、下に bar / atm も)。バッジが相状態です。例:220℃・メタノール mol30%・混合液2 mL・容器5 mL → 3.753 MPa・気液二相(V+L)。右の「式と計算」に、液側 xL・蒸気側 yV の相組成(混合系では液と蒸気で組成が変わる)も表示されます。
-
グラフで全体像をつかむ
左=いまの密度・組成のまま温度を上げたときの圧力カーブと、その組成の飽和(泡点圧)曲線・臨界点。右=温度×充填量、または温度×組成でどの相になるかを色分けしたマップ。白丸が今の条件です。
-
やってみよう:メタノールリッチにすると
同じ200℃でも、水リッチ(メタノールごく少量)なら 1.681 MPa、メタノールリッチに振ると 3.773 MPa へ。メタノールの方が蒸気圧が高いので、混ぜる割合で平衡圧が変わります——これが混合版でいちばん見たいところです。
-
やってみよう:温度を上げると
メタノールを半々にして290℃まで上げると 10.89 MPa・気液二相に。温度を上げると圧力が急上昇するのが一目で分かります(さらに上げると近臨界・超臨界へ)。
-
やってみよう:充填量を増やすと
気液二相のうちは充填量を増やしても圧力はほぼ飽和圧のまま(例:150℃で2〜4 mLとも約0.66 MPa)。ところが液が容器をほぼ満たす量(5 mL中4.6 mL)まで入れると、蒸気の逃げ場が無くなり 36.12 MPa・圧縮液(L) へ一気に跳ね上がります。入れ過ぎの危険が直感的に分かります。
仕組みと使った技術
全体の流れ
- ユーザーが温度 T・メタノール組成(mol%/wt%/vol% のいずれかで入力、内部はモル分率 x に変換)・混合液の充填量 V_fill(室温の液量)・容器体積 V_vessel をスライダまたは数値入力で指定する。
- 組成依存の室温混合密度から充填量を質量に換算し、全体密度 ρ = 混合液質量 / V_vessel を求める。密閉管は等容系なので、状態は (T, ρ, 組成 x) の3変数だけで決まる。
- ビルド前に Python が thermopack の CPA-SRK 状態方程式(水4C/メタノール2Bの会合スキーム、2成分の相互作用 kij_a=-0.05 を実測VLEで合わせ込み)で、(T, ρ, x) の3次元グリッドと、各組成の飽和(泡点・露点の圧力と密度)を事前計算し data_grid.json に書き出す。
- core.js が相判定を行う。臨界軌跡より高温側は単相(近臨界・超臨界)、それ以外は露点密度 ≤ ρ ≤ 泡点密度なら気液二相、ρ が泡点密度より大きければ圧縮液(L)、露点密度より小さければ蒸気(V) と分類する。
- (T, ρ, x) を三線形補間して平衡圧を求める。気液二相では泡点〜露点の間の共存圧として、単相域では境界(飽和密度)をアンカーにした密度補間で圧力を出し、あわせて液側 xL・蒸気側 yV の相組成も補間する。
- app.js の UI 層が、左ペインに圧力値と相バッジ、右ペインに『式と計算』透明化パネル(ρ算出→相判定→圧力・相組成補間を数式付きで表示)、下部に P–T 等容線グラフ(等容線・泡点圧曲線・臨界点・現在点)と相状態マップ(温度×充填量/温度×組成)を描画する。組成表示は mol%/wt%/vol% で切り替えられ、内部計算は常にモル分率で行う。
- 過充填(co-volume を超えて非物理になる条件)は値を出さず(null)、CPA が過大予測する高温・近臨界・高圧域は実測の臨界軌跡を基準に打ち切って『参考表示』とすることで、負圧や臨界の過大評価といった非物理を防ぐ。
- 水版・メタノール版と『?T=&fill=&vessel=&x=』の URL パラメータで条件を引き継いで相互リンクし、計算サーバー不要でブラウザ内だけで完結する単一HTMLとして Cloudflare Workers で公開している(noindexで検索除外)。
使った技術
- thermopack(SRK-CPA)
- 水–メタノール混合の状態方程式・気液平衡をビルド前に計算する物性ライブラリ。CoolProp は水–アルコールの2成分パラメータが未整備で使えないため採用した。
- Python / precompute・engine
- (T, ρ, x) の3次元グリッドと各組成の飽和(泡点・露点)を生成し data_grid.json に書き出すビルド側スクリプト。室温混合密度や臨界軌跡の計算もここで行う。
- JavaScript / core.js
- DOM・Plotly 非依存の相判定・三線形補間・相組成計算ロジック。Python 参照実装と同一仕様で突合検証している。
- JavaScript / app.js
- UI 層(スライダ・数値入力・mol/wt/vol 切替→core.js 呼び出し→Plotly 描画・計算透明化パネル更新・水版/メタ版への相互リンクURL生成)。
- Plotly.js(cartesianバンドル)
- P–T 等容線グラフと相状態マップの描画。vendor として単一HTMLに埋め込み、外部通信なしの動作を実現。
- Python / build
- template・vendor Plotly・data_grid・core・app を結合して単一HTMLを生成し、配布用とVercel公開用 index.html を出力するビルドスクリプト。
- 検証(Python参照 × 一次実測データ)
- JS 補間結果を Python 参照と突合し、さらに泡点圧・等容P・臨界軌跡の一次実測データと %AAD で照合してモデルの妥当性を定量検証する。
- Cloudflare Workers
- 混合版フォルダの index.html と仕様書 spec.html を静的配信(README/コードは非公開、noindexで検索除外)。
実装の工夫
- CoolProp は水–アルコール2成分パラメータが未整備で使えないため、thermopack の CPA-SRK(水4C/メタノール2B 会合スキーム)を採用。相互作用 kij_a=-0.05 を実測VLE(Gmehling-Onken / Kurihara 等)で合わせ込み、1atm 泡点の温度差は約0.36℃に収めた。
- 一次実測4系(Yokoyama 泡点圧 %AAD 1.6%、Sentenac 3.7%、Bazaev 等容 P〜2%、臨界軌跡)で独立に妥当性を検証。CPA が臨界点を実測より約+23℃・+29% 過大予測することを実測で確定し、温度上限を実測の臨界軌跡基準で打ち切って近臨界・高圧域は『参考表示』に切り替えた。
- 純物質(水・メタノール)版は (T, ρ) の2次元グリッドだったのに対し、混合版は組成軸を足した (T, ρ, x) の3次元グリッド+三線形補間に拡張。気液二相では液 xL・蒸気 yV の相組成も同時に補間して表示する。
- 組成入力は mol% / wt% / vol% を切り替え可能にし、内部は常にモル分率で計算(単位往復変換の誤差は 2e-16)。メタ:水 の比も併記して直感的に把握できるようにした。
- 過充填(co-volume 超で非物理)になる条件は値を出さない(null)設計とし、負圧などの非物理表示を防いだ。気液二相では充填量を変えても圧力が飽和圧で一定、単相液に入った瞬間に急上昇する、という等容系の挙動がそのまま読み取れる。
- 紫/バイオレット系のパレットを採用し、水版(ベージュ系)・メタノール版(薄緑系)と色で一目で識別できるようにした。3ツールを URL パラメータ(T/fill/vessel/x)で相互リンクし、条件を保ったまま行き来できる。
- レイアウトは font-size:clamp とflexでチャートが残り高さを埋める構成にし、ResizeObserver で Plotly をリサイズすることで、横長〜縦長の画面でも1画面に収まるようにした。
用語
- 平衡圧
- 密閉容器の中で、液体とその蒸気がつり合った(平衡になった)ときに示す圧力。
- 等容系(定容)
- 容器の体積が変わらない系。密閉した反応管はこれにあたり、状態は温度・全体密度・組成だけで決まる。
- 全体密度 ρ
- 入れた混合液の質量 ÷ 容器体積。等容系では圧力と相を決める鍵になる量で、組成によって室温密度が変わる。
- 充填率
- 容器体積に対する、室温で測った液の体積の割合(例: 5 mL の容器に 2 mL なら 40%)。
- 状態方程式(EOS)
- 温度・密度・組成から圧力や相を計算する物理式。混合液の平衡圧を求める土台。
- CPA-SRK
- Cubic-Plus-Association。水素結合する流体(水・アルコール)の会合(分子どうしのくっつき)まで扱える状態方程式で、水–メタノール混合の計算に使った。
- thermopack
- 状態方程式や気液平衡を計算する科学計算ライブラリ。CPA-SRK の事前計算に使用。
- モル分率
- 混合物の組成を「分子の個数の割合」で表したもの。内部計算はこの単位で行い、表示は mol% / wt% / vol% に変換する。
- 気液平衡(VLE)/泡点・露点
- 液体と蒸気がつり合った状態。混合系では液側の組成 xL と蒸気側の組成 yV が異なり、液が沸き始める点が泡点、蒸気が凝縮し始める点が露点。
- 相互作用パラメータ kij
- 混合則で2成分の効き方を補正する係数。実測の気液平衡データに合うよう kij_a=-0.05 に調整した。
- 圧縮液・近臨界・超臨界
- 圧縮液(L)=臨界に達しない高温の液、近臨界=臨界点のすぐ手前(モデル精度が落ちる参考域)、超臨界(SC)=臨界点を超えて気液の区別が無くなった状態。