MMuneebT/Cooling-Tower-Performance-Graphs
0
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 