Streamlitを用いて、等エンタルピー変化の計算をwebアプリ化しました。
コード
import streamlit as st
import pandas as pd
from calculater import enthalpy, isenthalpic
import streamlit.components.v1 as components
@st.cache
def steamtable():
steam_table = pd.read_excel("steamtable_from.xlsx",)
steam_table.index = steam_table['Temp']
steam_table = steam_table.drop('Temp', axis=1)
return steam_table
df = pd.DataFrame(steamtable())
st.title('Saturated steam & hotwater isenthalpic calculater ver0.0')
st.title('飽和蒸気・熱水の等エンタルピー計算')
st.sidebar.success('初期条件 (Initial condition)')
steam = st.sidebar.number_input('(1) steam (t/h)', min_value=0.00, max_value=None, step=None, )
hot_water = st.sidebar.number_input('(2) hot water (t/h)', min_value=0.00, max_value=None, step=None)
st.sidebar.write("👇 圧力条件 or 温度条件のみを入力")
st.sidebar.text("(only Pressure or only Temp)")
Pre = st.sidebar.number_input('(3) Pressure (MPaG)', min_value=0.00, max_value=3.8, step=None)
Temp = st.sidebar.number_input('(4) Temp (℃)', min_value=0, max_value=250, step=None)
Temp = int(Temp)
if Temp == 0.00:
Temp1 = df.index[(df['圧力_MPaG']-Pre).abs().argsort()][0].tolist()
Temp = Temp1
elif Temp != 0.00 and Pre != 0.00:
st.error('圧力条件 or 温度条件のみを入力(only Pressure or only Temp)')
else:
Pre1 = df.at[Temp,'圧力_MPaG']
Pre = round(Pre1,2)
st.sidebar.success('Another condition')
st.sidebar.write("👇 圧力条件 or 温度条件のみを入力")
st.sidebar.text("(only Pressure or only Temp)")
Pre2 = st.sidebar.number_input('(7) Pressure2 (MPaG)', min_value=0.00, max_value=None, step=None)
Temp2 = st.sidebar.number_input('(6) Temp2 (℃)', min_value=0.00, max_value=None, step=None)
Temp2 = int(Temp2)
if Temp2 == 0.00:
Pre_list = df['圧力_MPaG']
Temp2 = df.index[(Pre_list-Pre2).abs().argsort()][0].tolist()
elif Temp2 != 0.00 and Pre2 != 0.00:
st.error('圧力条件 or 温度条件のみを入力(only Pressure or only Temp)')
else:
Pre2 = df.at[Temp2,'圧力_MPaG']
Pre2 = round(Pre2,3)
button = st.sidebar.button('計算')
if button:
st.success('初期条件(Initial condition)')
es = df.loc[Temp, '飽和蒸気_比エンタルピー_kJ/kg']
eh = df.loc[Temp, '飽和水_比エンタルピー_kJ/kg']
en = enthalpy(steam, hot_water, es, eh)
es = round(es,2)
eh = round(eh,2)
X = round(en[0],2)
Se = round(en[1],2)
total_enthalpy = round(en[2],2)
st.write('温度', Temp, '℃')
st.write('圧力', Pre, 'MPaG')
st.write('乾き度', X)
st.write('蒸気流量', steam, 't/h')
st.write('熱水流量', hot_water, 't/h')
st.success('等エンタルピー変化後(for another condition)')
es2 = df.loc[Temp2, '飽和蒸気_比エンタルピー_kJ/kg']
eh2 = df.loc[Temp2, '飽和水_比エンタルピー_kJ/kg']
isenthalpic = isenthalpic(Se,es2,eh2,steam,hot_water)
es2 = round(es2,2)
eh2 = round(eh2,2)
X1 = round(isenthalpic[0],2)
flow_g = round(isenthalpic[1],2)
flow_w = round(isenthalpic[2],2)
st.write('温度', Temp2, '℃')
st.write('圧力', Pre2, 'MPaG')
st.write('乾き度', X1)
st.write('蒸気流量', flow_g, 't/h')
st.write('熱水流量', flow_w, 't/h')
st.success('共通')
st.write('比エンタルピー', Se, 'kJ/kg')
st.write('total_enthalpy', total_enthalpy, 'kJ/s')
else:
st.error('左記にデータを入力してください(Enter data in sidebar)')
st.info("概要")
'断熱条件における温度圧力の変化に伴う二相流の乾き度(蒸気量と熱水量)の変化を計算する。この計算は飽和蒸気のみ、または飽和熱水のみ場合においても使用可能である。過熱蒸気や不飽和熱水は想定していない。'
''
'計算で用いた式は以下の通りである。ただし、以下の計算は全て理想条件で行われるとする。'
st.write('〇乾き度(X)(Quality)')
st.latex(r'X = {Vg \above{2pt} Vg+Vl}')
st.text("Vg : 初期条件の蒸気流量 Steam flow rate for initial conditions (t/h)")
st.text("Vl: 初期条件の熱水流量 Hot water flow rate for initial conditions (t/h)")
st.write('〇比エンタルピー(H)(specific enthalpy)')
st.latex(r'H = Hg\times{X} + Hl\times{(1-X)}')
st.text("Hg : 飽和蒸気の比エンタルピー specific enthalpy of steam (kJ/kg)")
st.text("Hl : 飽和熱水の比エンタルピー specific enthalpy of hot water (kJ/kg)")
st.write("〇温度圧力条件を変化した場合(for another condition)の乾き度(X')と流量(Flow rate)")
st.latex(r'X^{\prime} = \dfrac{H-H^{\prime}l}{H{\prime}g-H^{\prime}l}')
st.text("H'g : Specific enthalpy of steam for another conditions (t/h)")
st.text("H'l : Specific enthalpy of Hot water for another conditions (t/h)")
st.latex(r'V^{\prime}g = X^{\prime}\times{(Vg+Vl)}')
st.latex(r'V^{\prime}l = (1-X^{\prime})\times{(Vg+Vl)}')
st.text("V'g : 別条件の蒸気流量 Steam flow rate for another conditions (t/h)")
st.text("V'l : 別条件の熱水流量 Hot water flow rate for another conditions (t/h)")
実際のwebアプリ
https://enthalpy02.herokuapp.com/