CoolFace
Apppublic

MMuneebT/Cooling-Tower-Performance-Graphs

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py70 linesDownload Raw Back to root
1import streamlit as st2import matplotlib.pyplot as plt3 4def cooling_tower_performance(inlet_temp, outlet_temp, flow_rate, wet_bulb_temp):5    specific_heat = 4.186  # kJ/kg°C6    density = 1000  # kg/m³7    mass_flow_rate = flow_rate * density  # kg/h8 9    cooling_range = inlet_temp - outlet_temp10    heat_rejected = mass_flow_rate * specific_heat * cooling_range11    effectiveness = (inlet_temp - outlet_temp) / (inlet_temp - wet_bulb_temp) if (inlet_temp - wet_bulb_temp) != 0 else 012    approach = outlet_temp - wet_bulb_temp13 14    evap_loss = 0.001 * flow_rate * cooling_range  # m³/h15    drift_loss = 0.001 * flow_rate  # m³/h16    coc = 517    blowdown_loss = evap_loss / (coc - 1)18    makeup_water = evap_loss + drift_loss + blowdown_loss19 20    return (21        cooling_range, heat_rejected, effectiveness, approach,22        evap_loss, drift_loss, blowdown_loss, makeup_water23    )24 25def plot_heat_vs_range(cooling_range, heat_rejected):26    fig, ax = plt.subplots()27    ax.bar(["Cooling Range (°C)"], [cooling_range], color="skyblue", label="Cooling Range")28    ax.set_ylabel("Temperature (°C)", color="skyblue")29    ax2 = ax.twinx()30    ax2.bar(["Heat Rejected (kJ/h)"], [heat_rejected], color="salmon", label="Heat Rejected")31    ax2.set_ylabel("Heat Rejected (kJ/h)", color="salmon")32    st.pyplot(fig)33 34def plot_makeup_pie(evap, drift, blowdown):35    fig, ax = plt.subplots()36    labels = ["Evaporation", "Drift", "Blowdown"]37    sizes = [evap, drift, blowdown]38    ax.pie(sizes, labels=labels, autopct='%1.1f%%', colors=['#66c2a5', '#fc8d62', '#8da0cb'])39    ax.set_title("Makeup Water Loss Breakdown")40    st.pyplot(fig)41 42# Streamlit UI43st.set_page_config(page_title="Cooling Tower Performance Calculator", layout="centered")44st.title("Cooling Tower Performance Calculator")45 46# Inputs47inlet_temp = st.number_input("Inlet Water Temp (°C)", value=40.0)48outlet_temp = st.number_input("Outlet Water Temp (°C)", value=30.0)49wet_bulb_temp = st.number_input("Wet Bulb Temp (°C)", value=25.0)50flow_rate = st.number_input("Water Flow Rate (m³/h)", value=100.0)51 52if st.button("Calculate & Visualize"):53    cooling_range, heat_rejected, effectiveness, approach, evap, drift, blowdown, makeup = cooling_tower_performance(54        inlet_temp, outlet_temp, flow_rate, wet_bulb_temp55    )56 57    st.subheader("Results")58    st.write(f"**Cooling Range:** {round(cooling_range, 2)} °C")59    st.write(f"**Heat Rejected:** {round(heat_rejected, 2)} kJ/h")60    st.write(f"**Effectiveness:** {round(effectiveness, 4)}")61    st.write(f"**Approach:** {round(approach, 2)} °C")62    st.write(f"**Evaporation Loss:** {round(evap, 3)} m³/h")63    st.write(f"**Drift Loss:** {round(drift, 3)} m³/h")64    st.write(f"**Blowdown Loss:** {round(blowdown, 3)} m³/h")65    st.write(f"**Total Makeup Water:** {round(makeup, 3)} m³/h")66 67    st.subheader("Graphs")68    plot_heat_vs_range(cooling_range, heat_rejected)69    plot_makeup_pie(evap, drift, blowdown)70