HuzaifaM/Distillation_Column_Design
0
1import streamlit as st2import numpy as np3import pandas as pd4from scipy.optimize import fsolve5 6# Function Definitions7def calculate_theoretical_stages(feed_composition, distillate_composition, bottoms_composition, relative_volatility):8 """9 Calculates the number of theoretical stages using the Fenske equation.10 """11 try:12 stages = np.log((distillate_composition / bottoms_composition) * 13 ((1 - bottoms_composition) / (1 - distillate_composition))) / \14 np.log(relative_volatility)15 return max(int(np.ceil(stages)), 1) # At least one stage16 except Exception as e:17 return f"Error in calculation: {str(e)}"18 19def calculate_column_area(flow_rate, density, velocity):20 """21 Calculate the column cross-sectional area using superficial velocity.22 """23 try:24 area = flow_rate / (density * velocity)25 return area26 except Exception as e:27 return f"Error in calculation: {str(e)}"28 29def calculate_pressure_drop(stages, gas_density, liquid_density, tray_spacing, flow_rate):30 """31 Calculate pressure drop across the column using a simplified correlation.32 """33 try:34 gravity = 9.81 # m/s^235 pressure_drop_per_stage = tray_spacing * (gas_density - liquid_density) * gravity / gas_density36 total_pressure_drop = stages * pressure_drop_per_stage37 return total_pressure_drop38 except Exception as e:39 return f"Error in calculation: {str(e)}"40 41# Streamlit App42def main():43 st.title("Distillation Column Design")44 st.sidebar.header("Input Parameters")45 46 # Input Parameters47 feed_composition = st.sidebar.number_input(48 "Feed Composition (mol fraction of key component):", 0.0, 1.0, 0.5, 0.01, key="feed_composition"49 )50 distillate_composition = st.sidebar.number_input(51 "Distillate Composition (mol fraction of key component):", 0.0, 1.0, 0.95, 0.01, key="distillate_composition"52 )53 bottoms_composition = st.sidebar.number_input(54 "Bottoms Composition (mol fraction of key component):", 0.0, 1.0, 0.05, 0.01, key="bottoms_composition"55 )56 relative_volatility = st.sidebar.number_input(57 "Relative Volatility:", 1.0, 10.0, 2.5, 0.1, key="relative_volatility"58 )59 flow_rate = st.sidebar.number_input(60 "Flow Rate (kg/s):", 0.1, 100.0, 10.0, 0.1, key="flow_rate"61 )62 density = st.sidebar.number_input(63 "Liquid Density (kg/m^3):", 500.0, 1500.0, 800.0, 10.0, key="density"64 )65 velocity = st.sidebar.number_input(66 "Superficial Velocity (m/s):", 0.1, 10.0, 1.0, 0.1, key="velocity"67 )68 gas_density = st.sidebar.number_input(69 "Gas Density (kg/m^3):", 0.5, 5.0, 1.2, 0.1, key="gas_density"70 )71 liquid_density = st.sidebar.number_input(72 "Liquid Density (kg/m^3):", 500.0, 1500.0, 800.0, 10.0, key="liquid_density_unique"73 )74 tray_spacing = st.sidebar.number_input(75 "Tray Spacing (m):", 0.1, 1.0, 0.5, 0.1, key="tray_spacing"76 )77 78 # Calculations79 stages = calculate_theoretical_stages(feed_composition, distillate_composition, bottoms_composition, relative_volatility)80 area = calculate_column_area(flow_rate, density, velocity)81 pressure_drop = calculate_pressure_drop(stages, gas_density, liquid_density, tray_spacing, flow_rate)82 83 # Display Results84 st.subheader("Results")85 st.write(f"Number of Theoretical Stages: {stages}")86 st.write(f"Column Cross-Sectional Area: {area:.2f} m²")87 st.write(f"Total Pressure Drop: {pressure_drop:.2f} Pa")88 89 st.markdown("---")90 st.markdown("Designed and developed by [Your Name]")91 92if __name__ == "__main__":93 main()94 95 96 