Advertise with Googlier.com CESolution https://chemesim.xsrv.jp/wp 化学工学計算のTips&雑記のブログ Sat, 23 Dec 2023 13:23:38 +0000 ja hourly 1 https://wordpress.org/?v=6.4.13 Streamlitで簡単なWEBアプリの作成 https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%aaweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90-642.html https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%aaweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90-642.html#respond Sat, 12 Dec 2020 04:23:00 +0000 https://chemesim.xsrv.jp/wp/?p=642 StreamlitでBVLEプロットアプリの作成

Webアプリを作成するためにFlaskやDjangoを勉強していましたが、なかなかGUIの作成まで辿りつかないまま挫折していました。

今回Streamlitという素晴らしいモジュールと出会ったので、こちらを使って簡単なBVLEプロットアプリを作成してみました。

先に動作イメージは以下のような感じです。

サブウィンドウ、スライダー、ラジオボタンや入力ボックスの設置、グラフ表示等を簡単に行うことができます。

またLatexも使うことができます!

サイドバーへの表示、ラジオボタンの設置

サイドバーへの表示、ラジオボタンの設置は以下のように設定できます。

サイドバーは、sidebarを間に挟むだけす。

ラジオボタンは、radio(表示文字列、(選択肢1、選択肢2))で設定できます。

# サイドバーへの表示は、sidebarを追加
st.sidebar.subheader("計算条件")
methods = st.sidebar.radio(
     "物性推算法を選択してください",
     ('Wilson', 'NRTL'))
spec = st.sidebar.radio(
     "T spec or P spec?",
     ('T spec', 'P spec'))

スライドバーの設置、入力ボックス、グラフの表示

スライドバーの設置はslidebar(表示文字列、最小値、最大値、刻み幅、初期阿合)で以下のように設定できます。

またグラフについては、例えばMatplotlibを使う場合、事前に定義したfigをwrite()でそのまま表示できます。

if spec == 'T spec':
    # スライドバー
    T = st.sidebar.slider('Temperature[K]', min_value=300, max_value=500, step=1, value=300)
    st.sidebar.write("Temperature: ", T, '[K]')
else:
    P = st.sidebar.slider('Pressure[kPa]', min_value=50, max_value=500, step=1, value=100)
    st.sidebar.write("Pressure: ", P, '[kPa]')
# 入力ボックスの表示
xnum = st.sidebar.number_input('組成の刻み幅', 0, 51, 21)

#グラフ表示
fig = plt.figure(figsize=(10, 8))
,,,
st.write(fig)

以上、簡単ですが上の動画と合わせてみていただくと、動作イメージが掴みやすいかと思います。

これほど簡単にInteractiveなGUIを作れるモジュールがあるとは知りませんでした。

]]>
https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e7%b0%a1%e5%8d%98%e3%81%aaweb%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90-642.html/feed 0
Streamlitでウェブリンクを作成する方法 https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e3%82%a6%e3%82%a7%e3%83%96%e3%83%aa%e3%83%b3%e3%82%af%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-637.html https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e3%82%a6%e3%82%a7%e3%83%96%e3%83%aa%e3%83%b3%e3%82%af%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-637.html#respond Wed, 25 Nov 2020 13:46:59 +0000 https://chemesim.xsrv.jp/wp/?p=637 Streamlitでウェブリンクを挿入する方法

Streamlitではタイトル、ヘッダー等の関数があるものの、リンクの作成方法が分からず調べていたところ、こちらで回答されていました。

以下のような形で、リンクをmarkdownに入れ込むことで表現できるようです。

link = '[Chemesim](https://chemesim.com/PhysicalProp.html)'
st.sidebar.markdown(link, unsafe_allow_html=True)
st.sidebar.write('NRTLのバイナリパラメーターについては上のリンクをご参照ください')
実行すると、上図のように表示されます。

]]>
https://chemesim.xsrv.jp/wp/streamlit%e3%81%a7%e3%82%a6%e3%82%a7%e3%83%96%e3%83%aa%e3%83%b3%e3%82%af%e3%82%92%e4%bd%9c%e6%88%90%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-637.html/feed 0
StreamlitをPycharmで実行(Run/Debug)する方法 https://chemesim.xsrv.jp/wp/streamlit%e3%82%92pycharm%e3%81%a7%e5%ae%9f%e8%a1%8c%ef%bc%88run-debug%ef%bc%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-631.html https://chemesim.xsrv.jp/wp/streamlit%e3%82%92pycharm%e3%81%a7%e5%ae%9f%e8%a1%8c%ef%bc%88run-debug%ef%bc%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-631.html#respond Wed, 25 Nov 2020 12:41:46 +0000 https://chemesim.xsrv.jp/wp/?p=631 StreamlitをPycharmで実行

表題の通り、作成したアプリをHPに置く前に、ローカル環境で実行する方法を探していた所、こちらに解決方法が記載されていました。

Run→Edit Configurationsから、Interpreter optionsに、-m streamlit.cli runを追加すると、python.exeにオプションで記載した部分を追記して所定の.pyを実行してくれるため、Pycharmでそのまま実行できるようになるようです。

上記実行すると、初回はEmail入力を求められますが、そのままEnterで進めばブラウザが立ち上がります。最近Flaskを勉強したいたのですが、Streamlitを知ってあまりのお手軽さに衝撃を受けました。これからStreamlitを使って色々なアプリ作成をしてみたいと思います!

]]>
https://chemesim.xsrv.jp/wp/streamlit%e3%82%92pycharm%e3%81%a7%e5%ae%9f%e8%a1%8c%ef%bc%88run-debug%ef%bc%89%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95-631.html/feed 0
DataFrame内の括弧を含む文字列の置換 https://chemesim.xsrv.jp/wp/dataframe%e5%86%85%e3%81%ae%e6%8b%ac%e5%bc%a7%e3%82%92%e5%90%ab%e3%82%80%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e7%bd%ae%e6%8f%9b-623.html https://chemesim.xsrv.jp/wp/dataframe%e5%86%85%e3%81%ae%e6%8b%ac%e5%bc%a7%e3%82%92%e5%90%ab%e3%82%80%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e7%bd%ae%e6%8f%9b-623.html#respond Thu, 23 Jul 2020 03:00:28 +0000 https://chemesim.xsrv.jp/wp/?p=623 Courceraのあるコースでの最終課題がKaggleのDetroit Blight Ticket Complianceだったため、挑戦。

一番最初に躓いたのが表記の件で、dispositionやviolation_codeを数値に変換しようとした際に、なぜか”Responsible (Fine Waived) by Deter”等の括弧を含むデータについて数値への変換ができておらず、RandomForestのfit関数がエラーになってしまう。

Debugで確認する限り、上記の文字列の認識自体はできているので、なかなか原因が分らず、、、。

こちらのリンクを参考にして解消。

括弧を含む文字列の場合は、\で囲う必要があるようです。

]]>
https://chemesim.xsrv.jp/wp/dataframe%e5%86%85%e3%81%ae%e6%8b%ac%e5%bc%a7%e3%82%92%e5%90%ab%e3%82%80%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e7%bd%ae%e6%8f%9b-623.html/feed 0
イメージファイルをRapidMinerで使うには https://chemesim.xsrv.jp/wp/%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92rapidminer%e3%81%a7%e4%bd%bf%e3%81%86%e3%81%ab%e3%81%af-618.html https://chemesim.xsrv.jp/wp/%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92rapidminer%e3%81%a7%e4%bd%bf%e3%81%86%e3%81%ab%e3%81%af-618.html#respond Sun, 21 Jun 2020 07:19:32 +0000 http://chemesim.xsrv.jp/wp/?p=618 こちらのリンクから、IMMIのダウンロード→.jarファイルをユーザー/ユーザー名/.RapidMinder/extensionsフォルダ下に置くことでイメージファイルの読み込みが可能。(Image Processing→Import→Read Image)

]]>
https://chemesim.xsrv.jp/wp/%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92rapidminer%e3%81%a7%e4%bd%bf%e3%81%86%e3%81%ab%e3%81%af-618.html/feed 0
アンモニア正反応の圧力補正項:Gillespie-Beattie係数 https://chemesim.xsrv.jp/wp/%e3%82%a2%e3%83%b3%e3%83%a2%e3%83%8b%e3%82%a2%e6%ad%a3%e5%8f%8d%e5%bf%9c%e3%81%ae%e5%9c%a7%e5%8a%9b%e8%a3%9c%e6%ad%a3%e9%a0%85%ef%bc%9agillespie-beattie%e4%bf%82%e6%95%b0-607.html https://chemesim.xsrv.jp/wp/%e3%82%a2%e3%83%b3%e3%83%a2%e3%83%8b%e3%82%a2%e6%ad%a3%e5%8f%8d%e5%bf%9c%e3%81%ae%e5%9c%a7%e5%8a%9b%e8%a3%9c%e6%ad%a3%e9%a0%85%ef%bc%9agillespie-beattie%e4%bf%82%e6%95%b0-607.html#respond Sun, 14 Jun 2020 06:15:56 +0000 http://chemesim.xsrv.jp/wp/?p=607 アンモニア反応器は、反応器の例題として取り上げられることが多く、例えばDYNSIMでもApplibフォルダ中にいくつかのモデリング例が取り上げられていますが、先日面白い論文を見つけたのでご紹介します。

こちらのBernieさんの論文ですが、公開されている論文の情報をベースにアンモニア反応器の非定常解析を行われています。

アンモニアの合成反応としては、Temkin-Pyzhevの反応式(1940)にAnnableの反応定数(1952)を用いた組み合わせが広く使われています。しかし、上記の組み合わせでは反応定数に圧力項がなく、以下の論文では正反応に対して、圧力の影響も考慮した反応定数(以下のGillespie–Beattie correlation)が紹介されています。

$$ K_p^{GB} = K_p^{GB*} 10^{\alpha – p^*}$$

ここで、αが圧力補正項となっており、以下の式で表されます。( \(K_p^{GB*}\)は温度のみの関数になっています 。なお、温度、圧力の単位系はそれぞれK、atmです。)

$$ \alpha = \frac{0.1191849}{T} + \frac{91.87212}{T^2} + \frac{25122730}{T^4}$$

$$ log (K_p^{GB*}) = -2.69112 log(T) – 5.51926 * 10^{-5} T + 1.84886 * 10 ^ {-7} T^2 + 2001.6 / T_r + 2.6899 $$

参考論文1. Dynamic Model of an Ammonia Synthesis Reactor Based on Open Infomration, Bernt Lie

参考論文2. STABILITY MAP FOR AMMONIA SYNTHESIS REACTORS, Volker Siepmann

ちょっと反応モデルがややこしいので、AVEVA社のSimCentralで通常のTemkin-Pyzhevの反応式とどの程度の差異が生じるのか比較してみました。(こちらに記載しておりますが、SimCentralの場合は、全ての式がオープンになっており、自由にカスタマイズできるため、このような若干厄介な式もそのまま書けます)

以下が同様の断熱反応で計算させた結果ですが、Gillespie-Beattie equilibrium constantを使うと、圧力補正項の分、反応速度が落ちるようです。

]]>
https://chemesim.xsrv.jp/wp/%e3%82%a2%e3%83%b3%e3%83%a2%e3%83%8b%e3%82%a2%e6%ad%a3%e5%8f%8d%e5%bf%9c%e3%81%ae%e5%9c%a7%e5%8a%9b%e8%a3%9c%e6%ad%a3%e9%a0%85%ef%bc%9agillespie-beattie%e4%bf%82%e6%95%b0-607.html/feed 0
tricontourf(三角座標での3dplot) https://chemesim.xsrv.jp/wp/tricontourf%ef%bc%88%e4%b8%89%e8%a7%92%e5%ba%a7%e6%a8%99%e3%81%a7%e3%81%ae3dplot%ef%bc%89-600.html https://chemesim.xsrv.jp/wp/tricontourf%ef%bc%88%e4%b8%89%e8%a7%92%e5%ba%a7%e6%a8%99%e3%81%a7%e3%81%ae3dplot%ef%bc%89-600.html#respond Sun, 07 Jun 2020 13:44:40 +0000 http://chemesim.xsrv.jp/wp/?p=600 今まで、matplotlibは等間隔のmeshgridでしか作成したことがなかったのですが、久しぶりにチュートリアルを見ていて、tricontourf関数を使うことで、三角座標でのプロット作成も可能であることを知りました。

早速試してみましたが、以下のような形で等高線図と、3dplotを重ね書きすることができます。(等高線図はtricontour関数を使います)

上から見ると、以下のような形でまさに三角線図。

ちょっと面倒なのが、tricontourf(triangles, z)の三角形の指定の仕方(trianglesの部分)で、下図のような形で各三角形の頂点部分の番号を振り分けていく必要があります。

]]>
https://chemesim.xsrv.jp/wp/tricontourf%ef%bc%88%e4%b8%89%e8%a7%92%e5%ba%a7%e6%a8%99%e3%81%a7%e3%81%ae3dplot%ef%bc%89-600.html/feed 0
Membrane Reactor Model https://chemesim.xsrv.jp/wp/membrane-reactor-model-596.html https://chemesim.xsrv.jp/wp/membrane-reactor-model-596.html#respond Tue, 05 May 2020 02:46:07 +0000 http://chemesim.xsrv.jp/wp/?p=596 West Virginia大学のBrentさんが、SimCentralを使ったmembrane reactor modelのモデリングと、最適な運転点について投稿されていたので、以下に紹介します。

https://www.mdpi.com/2227-9717/8/1/78

H2の回収率とCO2の除去率はトレードオフの関係となるため、最適点を探すためにMatlabでパレート解領域を描いています。

化学工学の問題において多目的最適化は避けて通れない問題ですが、Brentさんの論文ではOperabilityについても考慮されている点が興味深い点です。

]]>
https://chemesim.xsrv.jp/wp/membrane-reactor-model-596.html/feed 0
PRO/II COMを使ったPythonからの物性係数取得 https://chemesim.xsrv.jp/wp/pro-ii-com%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fpython%e3%81%8b%e3%82%89%e3%81%ae%e7%89%a9%e6%80%a7%e4%bf%82%e6%95%b0%e5%8f%96%e5%be%97-590.html https://chemesim.xsrv.jp/wp/pro-ii-com%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fpython%e3%81%8b%e3%82%89%e3%81%ae%e7%89%a9%e6%80%a7%e4%bf%82%e6%95%b0%e5%8f%96%e5%be%97-590.html#respond Sat, 25 Apr 2020 05:51:32 +0000 http://chemesim.xsrv.jp/wp/?p=590 PRO/II COM接続

こちらに記載したようにPRO/IIは、外部からCOM接続を行うことでデータの授受を行うことができ非常に便利です。

例えば、PythonでCOM接続を行う場合は、以下のようにwin32.comをimportすることで接続が可能。

import win32com.client as win32

具体的な使い方は、「PRO/IITM Process Engineering COM Server Programmer’s Guide and Tutorial」に記載されていますが、大まかな流れは以下の通り。(マニュアルのBasic Operations参照)

  1. Start the PRO/II COM Server
  2. Open a database
  3. Load a data object into memory
  4. Read/write attributes (performing Units-of-Measure conversion if required)
  5. Save the data object back to the database (if it was modified) and free the object
  6. Close the database
  7. Shut down the PRO/II COM Server

サーバーやデータベース、オブジェクトに対して行えるコマンド類は、「PRO/IITM Process Engineering COM Server Reference Guide」にまとめられています。

オブジェクト名、Attributeの確認

PRO/IIをインストールした際、同時にインストールされるPRO/II Viewerを使うことで、接続しているPRO/IIファイル内のオブジェクト名、Attributeを簡単に確認することができます。

例えば、以下では登録されている成分名がCompInというオブジェクト内にあることが分かります。また、各成分名をクリックすると、各成分に登録されている物性情報を確認することができます。

温度依存物性の係数を一括取得する場合

シミュレーターの計算がおかしいと感じた場合、手計算と一致するか確認したい場合があるかと思います。

各物性情報を一つずつ手動で取り出すのは手間がかかるので、COM接続で一括取得してみます。

例えば、Idealgasのエンタルピーの係数は、CompInオブジェクトのCorrrelCoefxLib(xは1~9の数字)の中の2番目に保存されています。

このため、HIGの係数をまとめて取得し、CSV形式で出力したいという場合は、例えば以下のように記載できます。

for i in range(0, NOC):
    compnames.append(pro2db.GetObjectNames("CompIn", i))
    comps.append(pro2db.ActivateObject("CompIn", compnames[i]))
    for j in range(0,6):
        if j == 0:
            coeff = comps[i].GetAttribute("CorrelCoeff1Lib", -1)
        elif j == 1:
            coeff = comps[i].GetAttribute("CorrelCoeff2Lib", -1)
        elif j == 2:
            coeff = comps[i].GetAttribute("CorrelCoeff3Lib", -1)
        elif j == 3:
            coeff = comps[i].GetAttribute("CorrelCoeff4Lib", -1)
        elif j == 4:
            coeff = comps[i].GetAttribute("CorrelCoeff5Lib", -1)
        elif j == 5:
            coeff = comps[i].GetAttribute("CorrelCoeff6Lib", -1)
        else:
            print("error")
        coef_HIG[i, j] = coeff[1]
np.savetxt('out.csv',coef_HIG,delimiter=',')

]]>
https://chemesim.xsrv.jp/wp/pro-ii-com%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fpython%e3%81%8b%e3%82%89%e3%81%ae%e7%89%a9%e6%80%a7%e4%bf%82%e6%95%b0%e5%8f%96%e5%be%97-590.html/feed 0
Beautiful Soupを使った物性データのスクレイピング https://chemesim.xsrv.jp/wp/beautiful-soup%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e7%89%a9%e6%80%a7%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-555.html https://chemesim.xsrv.jp/wp/beautiful-soup%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e7%89%a9%e6%80%a7%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-555.html#respond Sun, 08 Mar 2020 15:27:20 +0000 http://chemesim.xsrv.jp/wp/?p=555 NIST Web bookからのデータ取得

NISTのWeb bookには、 以下のようにShomate式により気相の比熱、Enthalpy, Entropy計算に必要な係数が記載されています。

温度範囲毎に係数が分かれているため、上記のテーブルをまとめてスクレイピングし、csvファイルに落とすコードを作成していきます。

テーブルの抽出

NIST webbookで例えばCOの気相物性を調べると、そのURLは以下のようになっている。

Carbon monoxide
This page, "Carbon monoxide", is part of the NIST Chemistry WebBook. This site and its contents are part of the NIST Sta...

xxx.cgiまでがベースのURL、そこにCAS番号やMaskといったパラメーターが必要となる。

以下の例ではGoogle Colaboratory上でスクレイピングし、結果をcsvで出力している。

import os
import re
import csv
import requests
from bs4 import BeautifulSoup
params = {'ID': 'C630080' , 'Units': 'SI' , 'Mask' : '1' } 
response = requests.get('http://webbook.nist.gov/cgi/cbook.cgi', params=params)
soup = BeautifulSoup(response.text)
#h3タグを取得(Gas Phase Heat Capacity (Shomate Equation))
h3 = soup.h3
#最初のpタグ
p1 = soup.find_all('td', class_='exp right-nowrap') 
writer = csv.writer(file)
for row in rows:
     csvRow = []
     for cell in row.findAll(['td', 'th']):
         csvRow.append(cell.get_text())
         writer.writerow(csvRow)
files.download('data.csv')  

]]>
https://chemesim.xsrv.jp/wp/beautiful-soup%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e7%89%a9%e6%80%a7%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0-555.html/feed 0