Kkjutt000 commited on
Commit
4f2a8a4
·
verified ·
1 Parent(s): 82b63d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +502 -49
app.py CHANGED
@@ -1,69 +1,522 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # ------------------------
2
- # Section 3: Reynolds Number Calculation
3
  # ------------------------
4
- st.header("Reynolds Number Calculator")
 
 
 
 
 
 
 
5
 
6
- # Inputs for Reynolds Number Calculation
7
- st.write("### Input Parameters for Reynolds Number")
 
8
 
9
- # Fluid Velocity (V)
10
- velocity = st.number_input("Fluid Velocity (V):", min_value=0.0, value=1.0, step=0.1)
11
- velocity_unit = st.selectbox("Select unit for Velocity:", ["m/s", "cm/s", "ft/s"])
12
 
13
- # Hydraulic Diameter (D)
14
- diameter = st.number_input("Hydraulic Diameter (D):", min_value=0.0, value=0.1, step=0.01)
15
- diameter_unit = st.selectbox("Select unit for Diameter:", ["m", "cm", "mm", "ft"])
16
 
17
  # Fluid Density (ρ)
18
  density = st.number_input("Fluid Density (ρ):", min_value=0.0, value=1000.0, step=1.0)
19
- density_unit = st.selectbox("Select unit for Density (ρ):", ["kg/m³", "g/cm³"])
20
-
21
- # Fluid Viscosity (μ)
22
- viscosity = st.number_input("Dynamic Viscosity (μ):", min_value=0.0, value=0.001, step=0.0001)
23
- viscosity_unit = st.selectbox("Select unit for Viscosity (μ):", ["Pa·s", "cP"])
24
-
25
- # Unit Conversions
26
- # Convert velocity to m/s
27
- if velocity_unit == "cm/s":
28
- velocity_m = velocity / 100
29
- elif velocity_unit == "ft/s":
30
- velocity_m = velocity * 0.3048
31
  else:
32
- velocity_m = velocity
33
-
34
- # Convert diameter to meters
35
- if diameter_unit == "cm":
36
- diameter_m = diameter / 100
37
- elif diameter_unit == "mm":
38
- diameter_m = diameter / 1000
39
- elif diameter_unit == "ft":
40
- diameter_m = diameter * 0.3048
41
  else:
42
- diameter_m = diameter
43
 
44
- # Convert density to kg/m³
45
  if density_unit == "g/cm³":
46
- density_kgm3 = density * 1000
47
  else:
48
  density_kgm3 = density
49
 
50
- # Convert viscosity to Pa·s
51
- if viscosity_unit == "cP":
52
- viscosity_pas = viscosity / 1000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  else:
54
- viscosity_pas = viscosity
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
- # Reynolds Number Calculation Logic
57
- def calculate_reynolds_number(velocity, diameter, density, viscosity):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  try:
59
- reynolds_number = (velocity * diameter * density) / viscosity
60
- return reynolds_number
61
- except ZeroDivisionError:
62
- st.error("Viscosity cannot be zero for Reynolds number calculation.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  return None
64
 
65
- # Perform Reynolds Number Calculation
66
- if st.button("Calculate Reynolds Number"):
67
- reynolds_number = calculate_reynolds_number(velocity_m, diameter_m, density_kgm3, viscosity_pas)
68
- if reynolds_number is not None:
69
- st.success(f"Reynolds Number: {reynolds_number:.2f}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ # App Header
4
+ st.title("Temperature Conversion & Centrifugal Pump Design App")
5
+ st.write("Created by **Kamran Liaqat**")
6
+ st.write("Convert temperatures and calculate centrifugal pump power requirements from a unified interface.")
7
+
8
+ # ------------------------
9
+ # Section 1: Temperature Conversion
10
+ # ------------------------
11
+ st.header("Temperature Conversion")
12
+
13
+ # Conversion Logic
14
+ def convert_temperature(value, from_unit, to_unit):
15
+ try:
16
+ if from_unit == "Celsius":
17
+ if to_unit == "Kelvin":
18
+ return value + 273.15
19
+ elif to_unit == "Fahrenheit":
20
+ return (value * 9 / 5) + 32
21
+ elif to_unit == "Rankine":
22
+ return (value + 273.15) * 9 / 5
23
+ else:
24
+ return value
25
+ elif from_unit == "Fahrenheit":
26
+ if to_unit == "Celsius":
27
+ return (value - 32) * 5 / 9
28
+ elif to_unit == "Kelvin":
29
+ return (value - 32) * 5 / 9 + 273.15
30
+ elif to_unit == "Rankine":
31
+ return value + 459.67
32
+ else:
33
+ return value
34
+ elif from_unit == "Kelvin":
35
+ if to_unit == "Celsius":
36
+ return value - 273.15
37
+ elif to_unit == "Fahrenheit":
38
+ return (value - 273.15) * 9 / 5 + 32
39
+ elif to_unit == "Rankine":
40
+ return value * 9 / 5
41
+ else:
42
+ return value
43
+ elif from_unit == "Rankine":
44
+ if to_unit == "Celsius":
45
+ return (value - 491.67) * 5 / 9
46
+ elif to_unit == "Fahrenheit":
47
+ return value - 459.67
48
+ elif to_unit == "Kelvin":
49
+ return value * 5 / 9
50
+ else:
51
+ return value
52
+ except Exception as e:
53
+ st.error(f"Error: {str(e)}")
54
+ return None
55
+
56
+ # Input for Temperature Conversion
57
+ st.write("### Temperature Conversion Tool")
58
+ from_unit = st.selectbox("Convert From:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
59
+ to_unit = st.selectbox("Convert To:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
60
+ temp_value = st.number_input(f"Enter Temperature in {from_unit}:", value=0.0)
61
+
62
+ if st.button("Convert Temperature"):
63
+ converted_value = convert_temperature(temp_value, from_unit, to_unit)
64
+ if converted_value is not None:
65
+ st.success(f"{temp_value} {from_unit} = {converted_value:.2f} {to_unit}")
66
+
67
  # ------------------------
68
+ # Section 2: Centrifugal Pump Design
69
  # ------------------------
70
+ st.header("Centrifugal Pump Design Calculator")
71
+
72
+ # Inputs for Pump Design with Unit Conversion
73
+ st.write("### Input Parameters (with unit conversion)")
74
+
75
+ # Option to select which value to calculate
76
+ calculate_missing = st.selectbox("What value would you like to calculate?",
77
+ ["Flow Rate (Q)", "Head (H)", "Density (ρ)", "Efficiency (η)"])
78
 
79
+ # Flow Rate (Q)
80
+ flow_rate = st.number_input("Flow Rate (Q):", min_value=0.0, value=10.0, step=0.1)
81
+ flow_rate_unit = st.selectbox("Select unit for Flow Rate:", ["m³/h", "L/s", "gpm"])
82
 
83
+ # Head (H)
84
+ head = st.number_input("Head (H):", min_value=0.0, value=20.0, step=0.1)
85
+ head_unit = st.selectbox("Select unit for Head:", ["m", "ft"])
86
 
87
+ # Efficiency (η)
88
+ efficiency = st.number_input("Efficiency (η) in %:", min_value=0.0, max_value=100.0, value=75.0, step=0.1)
 
89
 
90
  # Fluid Density (ρ)
91
  density = st.number_input("Fluid Density (ρ):", min_value=0.0, value=1000.0, step=1.0)
92
+ density_unit = st.selectbox("Select unit for Density:", ["kg/m³", "g/cm³"])
93
+
94
+ # Convert Units for Flow Rate
95
+ if flow_rate_unit == "L/s":
96
+ flow_rate_m3s = flow_rate / 1000 # Convert from L/s to m³/s
97
+ elif flow_rate_unit == "gpm":
98
+ flow_rate_m3s = flow_rate * 3.78541 / 60000 # Convert from gpm to m³/s
 
 
 
 
 
99
  else:
100
+ flow_rate_m3s = flow_rate / 3600 # Convert from m³/h to m³/s
101
+
102
+ # Convert Units for Head
103
+ if head_unit == "ft":
104
+ head_m = head * 0.3048 # Convert from ft to meters
 
 
 
 
105
  else:
106
+ head_m = head
107
 
108
+ # Convert Units for Fluid Density
109
  if density_unit == "g/cm³":
110
+ density_kgm3 = density * 1000 # Convert from g/cm³ to kg/m³
111
  else:
112
  density_kgm3 = density
113
 
114
+ # Calculation Logic for Centrifugal Pump
115
+ def calculate_pump_power(flow_rate, head, efficiency, density):
116
+ try:
117
+ # Convert efficiency to decimal
118
+ efficiency = efficiency / 100
119
+
120
+ # Calculate hydraulic power (P_h = ρ * g * Q * H)
121
+ g = 9.81 # gravitational constant, m/s²
122
+ hydraulic_power = density * g * flow_rate * head # in watts
123
+
124
+ # Calculate shaft power (P_s = P_h / η)
125
+ shaft_power = hydraulic_power / efficiency # in watts
126
+
127
+ # Convert to kW
128
+ hydraulic_power_kw = hydraulic_power / 1000
129
+ shaft_power_kw = shaft_power / 1000
130
+
131
+ return hydraulic_power_kw, shaft_power_kw
132
+ except Exception as e:
133
+ st.error(f"Error: {str(e)}")
134
+ return None, None
135
+
136
+ # Logic to calculate missing value if one input is not provided
137
+ def calculate_missing_value(flow_rate, head, efficiency, density, missing_value):
138
+ g = 9.81 # gravitational constant
139
+
140
+ if missing_value == "Flow Rate (Q)":
141
+ hydraulic_power = density * g * flow_rate * head
142
+ return hydraulic_power / (density * g * head) # Flow rate = P_h / (ρ * g * H)
143
+ elif missing_value == "Head (H)":
144
+ hydraulic_power = density * g * flow_rate * head
145
+ return hydraulic_power / (density * g * flow_rate) # Head = P_h / (ρ * g * Q)
146
+ elif missing_value == "Density (ρ)":
147
+ hydraulic_power = density * g * flow_rate * head
148
+ return hydraulic_power / (g * flow_rate * head) # Density = P_h / (g * Q * H)
149
+ elif missing_value == "Efficiency (η)":
150
+ hydraulic_power = density * g * flow_rate * head
151
+ shaft_power = hydraulic_power / efficiency
152
+ return hydraulic_power / shaft_power # Efficiency = P_h / P_s
153
+
154
+ # Perform calculation based on missing value
155
+ if st.button("Calculate Pump Power"):
156
+ if calculate_missing == "Flow Rate (Q)":
157
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Flow Rate (Q)")
158
+ st.write(f"Calculated Flow Rate (Q): {calculated_value:.2f} m³/s")
159
+ elif calculate_missing == "Head (H)":
160
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Head (H)")
161
+ st.write(f"Calculated Head (H): {calculated_value:.2f} m")
162
+ elif calculate_missing == "Density (ρ)":
163
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Density (ρ)")
164
+ st.write(f"Calculated Density (ρ): {calculated_value:.2f} kg/m³")
165
+ elif calculate_missing == "Efficiency (η)":
166
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Efficiency (η)")
167
+ st.write(f"Calculated Efficiency (η): {calculated_value:.2f} %")
168
+
169
+ else:
170
+ hydraulic_power_kw, shaft_power_kw = calculate_pump_power(flow_rate_m3s, head_m, efficiency, density_kgm3)
171
+ if hydraulic_power_kw is not None:
172
+ # Display Results
173
+ st.write(f"**Hydraulic Power (P_h):** {hydraulic_power_kw:.2f} kW")
174
+ st.write(f"**Shaft Power (P_s):** {shaft_power_kw:.2f} kW")
175
+ import streamlit as st
176
+
177
+ # App Header
178
+ st.title("Temperature Conversion & Centrifugal Pump Design App")
179
+ st.write("Created by **Kamran Liaqat**")
180
+ st.write("Convert temperatures and calculate centrifugal pump power requirements from a unified interface.")
181
+
182
+ # ------------------------
183
+ # Section 1: Temperature Conversion
184
+ # ------------------------
185
+ st.header("Temperature Conversion")
186
+
187
+ # Conversion Logic
188
+ def convert_temperature(value, from_unit, to_unit):
189
+ try:
190
+ if from_unit == "Celsius":
191
+ if to_unit == "Kelvin":
192
+ return value + 273.15
193
+ elif to_unit == "Fahrenheit":
194
+ return (value * 9 / 5) + 32
195
+ elif to_unit == "Rankine":
196
+ return (value + 273.15) * 9 / 5
197
+ else:
198
+ return value
199
+ elif from_unit == "Fahrenheit":
200
+ if to_unit == "Celsius":
201
+ return (value - 32) * 5 / 9
202
+ elif to_unit == "Kelvin":
203
+ return (value - 32) * 5 / 9 + 273.15
204
+ elif to_unit == "Rankine":
205
+ return value + 459.67
206
+ else:
207
+ return value
208
+ elif from_unit == "Kelvin":
209
+ if to_unit == "Celsius":
210
+ return value - 273.15
211
+ elif to_unit == "Fahrenheit":
212
+ return (value - 273.15) * 9 / 5 + 32
213
+ elif to_unit == "Rankine":
214
+ return value * 9 / 5
215
+ else:
216
+ return value
217
+ elif from_unit == "Rankine":
218
+ if to_unit == "Celsius":
219
+ return (value - 491.67) * 5 / 9
220
+ elif to_unit == "Fahrenheit":
221
+ return value - 459.67
222
+ elif to_unit == "Kelvin":
223
+ return value * 5 / 9
224
+ else:
225
+ return value
226
+ except Exception as e:
227
+ st.error(f"Error: {str(e)}")
228
+ return None
229
+
230
+ # Input for Temperature Conversion
231
+ st.write("### Temperature Conversion Tool")
232
+ from_unit = st.selectbox("Convert From:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
233
+ to_unit = st.selectbox("Convert To:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
234
+ temp_value = st.number_input(f"Enter Temperature in {from_unit}:", value=0.0)
235
+
236
+ if st.button("Convert Temperature"):
237
+ converted_value = convert_temperature(temp_value, from_unit, to_unit)
238
+ if converted_value is not None:
239
+ st.success(f"{temp_value} {from_unit} = {converted_value:.2f} {to_unit}")
240
+
241
+ # ------------------------
242
+ # Section 2: Centrifugal Pump Design
243
+ # ------------------------
244
+ st.header("Centrifugal Pump Design Calculator")
245
+
246
+ # Inputs for Pump Design with Unit Conversion
247
+ st.write("### Input Parameters (with unit conversion)")
248
+
249
+ # Option to select which value to calculate
250
+ calculate_missing = st.selectbox("What value would you like to calculate?",
251
+ ["Flow Rate (Q)", "Head (H)", "Density (ρ)", "Efficiency (η)"])
252
+
253
+ # Flow Rate (Q)
254
+ flow_rate = st.number_input("Flow Rate (Q):", min_value=0.0, value=10.0, step=0.1)
255
+ flow_rate_unit = st.selectbox("Select unit for Flow Rate:", ["m³/h", "L/s", "gpm"])
256
+
257
+ # Head (H)
258
+ head = st.number_input("Head (H):", min_value=0.0, value=20.0, step=0.1)
259
+ head_unit = st.selectbox("Select unit for Head:", ["m", "ft"])
260
+
261
+ # Efficiency (η)
262
+ efficiency = st.number_input("Efficiency (η) in %:", min_value=0.0, max_value=100.0, value=75.0, step=0.1)
263
+
264
+ # Fluid Density (ρ)
265
+ density = st.number_input("Fluid Density (ρ):", min_value=0.0, value=1000.0, step=1.0)
266
+ density_unit = st.selectbox("Select unit for Density:", ["kg/m³", "g/cm³"])
267
+
268
+ # Convert Units for Flow Rate
269
+ if flow_rate_unit == "L/s":
270
+ flow_rate_m3s = flow_rate / 1000 # Convert from L/s to m³/s
271
+ elif flow_rate_unit == "gpm":
272
+ flow_rate_m3s = flow_rate * 3.78541 / 60000 # Convert from gpm to m³/s
273
+ else:
274
+ flow_rate_m3s = flow_rate / 3600 # Convert from m³/h to m³/s
275
+
276
+ # Convert Units for Head
277
+ if head_unit == "ft":
278
+ head_m = head * 0.3048 # Convert from ft to meters
279
+ else:
280
+ head_m = head
281
+
282
+ # Convert Units for Fluid Density
283
+ if density_unit == "g/cm³":
284
+ density_kgm3 = density * 1000 # Convert from g/cm³ to kg/m³
285
  else:
286
+ density_kgm3 = density
287
+
288
+ # Calculation Logic for Centrifugal Pump
289
+ def calculate_pump_power(flow_rate, head, efficiency, density):
290
+ try:
291
+ # Convert efficiency to decimal
292
+ efficiency = efficiency / 100
293
+
294
+ # Calculate hydraulic power (P_h = ρ * g * Q * H)
295
+ g = 9.81 # gravitational constant, m/s²
296
+ hydraulic_power = density * g * flow_rate * head # in watts
297
+
298
+ # Calculate shaft power (P_s = P_h / η)
299
+ shaft_power = hydraulic_power / efficiency # in watts
300
+
301
+ # Convert to kW
302
+ hydraulic_power_kw = hydraulic_power / 1000
303
+ shaft_power_kw = shaft_power / 1000
304
+
305
+ return hydraulic_power_kw, shaft_power_kw
306
+ except Exception as e:
307
+ st.error(f"Error: {str(e)}")
308
+ return None, None
309
+
310
+ # Logic to calculate missing value if one input is not provided
311
+ def calculate_missing_value(flow_rate, head, efficiency, density, missing_value):
312
+ g = 9.81 # gravitational constant
313
+
314
+ if missing_value == "Flow Rate (Q)":
315
+ hydraulic_power = density * g * flow_rate * head
316
+ return hydraulic_power / (density * g * head) # Flow rate = P_h / (ρ * g * H)
317
+ elif missing_value == "Head (H)":
318
+ hydraulic_power = density * g * flow_rate * head
319
+ return hydraulic_power / (density * g * flow_rate) # Head = P_h / (ρ * g * Q)
320
+ elif missing_value == "Density (ρ)":
321
+ hydraulic_power = density * g * flow_rate * head
322
+ return hydraulic_power / (g * flow_rate * head) # Density = P_h / (g * Q * H)
323
+ elif missing_value == "Efficiency (η)":
324
+ hydraulic_power = density * g * flow_rate * head
325
+ shaft_power = hydraulic_power / efficiency
326
+ return hydraulic_power / shaft_power # Efficiency = P_h / P_s
327
+
328
+ # Perform calculation based on missing value
329
+ if st.button("Calculate Pump Power"):
330
+ if calculate_missing == "Flow Rate (Q)":
331
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Flow Rate (Q)")
332
+ st.write(f"Calculated Flow Rate (Q): {calculated_value:.2f} m³/s")
333
+ elif calculate_missing == "Head (H)":
334
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Head (H)")
335
+ st.write(f"Calculated Head (H): {calculated_value:.2f} m")
336
+ elif calculate_missing == "Density (ρ)":
337
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Density (ρ)")
338
+ st.write(f"Calculated Density (ρ): {calculated_value:.2f} kg/m³")
339
+ elif calculate_missing == "Efficiency (η)":
340
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Efficiency (η)")
341
+ st.write(f"Calculated Efficiency (η): {calculated_value:.2f} %")
342
 
343
+ else:
344
+ hydraulic_power_kw, shaft_power_kw = calculate_pump_power(flow_rate_m3s, head_m, efficiency, density_kgm3)
345
+ if hydraulic_power_kw is not None:
346
+ # Display Results
347
+ st.write(f"**Hydraulic Power (P_h):** {hydraulic_power_kw:.2f} kW")
348
+ st.write(f"**Shaft Power (P_s):** {shaft_power_kw:.2f} kW")
349
+ import streamlit as st
350
+
351
+ # App Header
352
+ st.title("Temperature Conversion & Centrifugal Pump Design App")
353
+ st.write("Created by **Kamran Liaqat**")
354
+ st.write("Convert temperatures and calculate centrifugal pump power requirements from a unified interface.")
355
+
356
+ # ------------------------
357
+ # Section 1: Temperature Conversion
358
+ # ------------------------
359
+ st.header("Temperature Conversion")
360
+
361
+ # Conversion Logic
362
+ def convert_temperature(value, from_unit, to_unit):
363
  try:
364
+ if from_unit == "Celsius":
365
+ if to_unit == "Kelvin":
366
+ return value + 273.15
367
+ elif to_unit == "Fahrenheit":
368
+ return (value * 9 / 5) + 32
369
+ elif to_unit == "Rankine":
370
+ return (value + 273.15) * 9 / 5
371
+ else:
372
+ return value
373
+ elif from_unit == "Fahrenheit":
374
+ if to_unit == "Celsius":
375
+ return (value - 32) * 5 / 9
376
+ elif to_unit == "Kelvin":
377
+ return (value - 32) * 5 / 9 + 273.15
378
+ elif to_unit == "Rankine":
379
+ return value + 459.67
380
+ else:
381
+ return value
382
+ elif from_unit == "Kelvin":
383
+ if to_unit == "Celsius":
384
+ return value - 273.15
385
+ elif to_unit == "Fahrenheit":
386
+ return (value - 273.15) * 9 / 5 + 32
387
+ elif to_unit == "Rankine":
388
+ return value * 9 / 5
389
+ else:
390
+ return value
391
+ elif from_unit == "Rankine":
392
+ if to_unit == "Celsius":
393
+ return (value - 491.67) * 5 / 9
394
+ elif to_unit == "Fahrenheit":
395
+ return value - 459.67
396
+ elif to_unit == "Kelvin":
397
+ return value * 5 / 9
398
+ else:
399
+ return value
400
+ except Exception as e:
401
+ st.error(f"Error: {str(e)}")
402
  return None
403
 
404
+ # Input for Temperature Conversion
405
+ st.write("### Temperature Conversion Tool")
406
+ from_unit = st.selectbox("Convert From:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
407
+ to_unit = st.selectbox("Convert To:", ["Celsius", "Fahrenheit", "Kelvin", "Rankine"])
408
+ temp_value = st.number_input(f"Enter Temperature in {from_unit}:", value=0.0)
409
+
410
+ if st.button("Convert Temperature"):
411
+ converted_value = convert_temperature(temp_value, from_unit, to_unit)
412
+ if converted_value is not None:
413
+ st.success(f"{temp_value} {from_unit} = {converted_value:.2f} {to_unit}")
414
+
415
+ # ------------------------
416
+ # Section 2: Centrifugal Pump Design
417
+ # ------------------------
418
+ st.header("Centrifugal Pump Design Calculator")
419
+
420
+ # Inputs for Pump Design with Unit Conversion
421
+ st.write("### Input Parameters (with unit conversion)")
422
+
423
+ # Option to select which value to calculate
424
+ calculate_missing = st.selectbox("What value would you like to calculate?",
425
+ ["Flow Rate (Q)", "Head (H)", "Density (ρ)", "Efficiency (η)"])
426
+
427
+ # Flow Rate (Q)
428
+ flow_rate = st.number_input("Flow Rate (Q):", min_value=0.0, value=10.0, step=0.1)
429
+ flow_rate_unit = st.selectbox("Select unit for Flow Rate:", ["m³/h", "L/s", "gpm"])
430
+
431
+ # Head (H)
432
+ head = st.number_input("Head (H):", min_value=0.0, value=20.0, step=0.1)
433
+ head_unit = st.selectbox("Select unit for Head:", ["m", "ft"])
434
+
435
+ # Efficiency (η)
436
+ efficiency = st.number_input("Efficiency (η) in %:", min_value=0.0, max_value=100.0, value=75.0, step=0.1)
437
+
438
+ # Fluid Density (ρ)
439
+ density = st.number_input("Fluid Density (ρ):", min_value=0.0, value=1000.0, step=1.0)
440
+ density_unit = st.selectbox("Select unit for Density:", ["kg/m³", "g/cm³"])
441
+
442
+ # Convert Units for Flow Rate
443
+ if flow_rate_unit == "L/s":
444
+ flow_rate_m3s = flow_rate / 1000 # Convert from L/s to m³/s
445
+ elif flow_rate_unit == "gpm":
446
+ flow_rate_m3s = flow_rate * 3.78541 / 60000 # Convert from gpm to m³/s
447
+ else:
448
+ flow_rate_m3s = flow_rate / 3600 # Convert from m³/h to m³/s
449
+
450
+ # Convert Units for Head
451
+ if head_unit == "ft":
452
+ head_m = head * 0.3048 # Convert from ft to meters
453
+ else:
454
+ head_m = head
455
+
456
+ # Convert Units for Fluid Density
457
+ if density_unit == "g/cm³":
458
+ density_kgm3 = density * 1000 # Convert from g/cm³ to kg/m³
459
+ else:
460
+ density_kgm3 = density
461
+
462
+ # Calculation Logic for Centrifugal Pump
463
+ def calculate_pump_power(flow_rate, head, efficiency, density):
464
+ try:
465
+ # Convert efficiency to decimal
466
+ efficiency = efficiency / 100
467
+
468
+ # Calculate hydraulic power (P_h = ρ * g * Q * H)
469
+ g = 9.81 # gravitational constant, m/s²
470
+ hydraulic_power = density * g * flow_rate * head # in watts
471
+
472
+ # Calculate shaft power (P_s = P_h / η)
473
+ shaft_power = hydraulic_power / efficiency # in watts
474
+
475
+ # Convert to kW
476
+ hydraulic_power_kw = hydraulic_power / 1000
477
+ shaft_power_kw = shaft_power / 1000
478
+
479
+ return hydraulic_power_kw, shaft_power_kw
480
+ except Exception as e:
481
+ st.error(f"Error: {str(e)}")
482
+ return None, None
483
+
484
+ # Logic to calculate missing value if one input is not provided
485
+ def calculate_missing_value(flow_rate, head, efficiency, density, missing_value):
486
+ g = 9.81 # gravitational constant
487
+
488
+ if missing_value == "Flow Rate (Q)":
489
+ hydraulic_power = density * g * flow_rate * head
490
+ return hydraulic_power / (density * g * head) # Flow rate = P_h / (ρ * g * H)
491
+ elif missing_value == "Head (H)":
492
+ hydraulic_power = density * g * flow_rate * head
493
+ return hydraulic_power / (density * g * flow_rate) # Head = P_h / (ρ * g * Q)
494
+ elif missing_value == "Density (ρ)":
495
+ hydraulic_power = density * g * flow_rate * head
496
+ return hydraulic_power / (g * flow_rate * head) # Density = P_h / (g * Q * H)
497
+ elif missing_value == "Efficiency (η)":
498
+ hydraulic_power = density * g * flow_rate * head
499
+ shaft_power = hydraulic_power / efficiency
500
+ return hydraulic_power / shaft_power # Efficiency = P_h / P_s
501
+
502
+ # Perform calculation based on missing value
503
+ if st.button("Calculate Pump Power"):
504
+ if calculate_missing == "Flow Rate (Q)":
505
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Flow Rate (Q)")
506
+ st.write(f"Calculated Flow Rate (Q): {calculated_value:.2f} m³/s")
507
+ elif calculate_missing == "Head (H)":
508
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Head (H)")
509
+ st.write(f"Calculated Head (H): {calculated_value:.2f} m")
510
+ elif calculate_missing == "Density (ρ)":
511
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Density (ρ)")
512
+ st.write(f"Calculated Density (ρ): {calculated_value:.2f} kg/m³")
513
+ elif calculate_missing == "Efficiency (η)":
514
+ calculated_value = calculate_missing_value(flow_rate_m3s, head_m, efficiency, density_kgm3, "Efficiency (η)")
515
+ st.write(f"Calculated Efficiency (η): {calculated_value:.2f} %")
516
+
517
+ else:
518
+ hydraulic_power_kw, shaft_power_kw = calculate_pump_power(flow_rate_m3s, head_m, efficiency, density_kgm3)
519
+ if hydraulic_power_kw is not None:
520
+ # Display Results
521
+ st.write(f"**Hydraulic Power (P_h):** {hydraulic_power_kw:.2f} kW")
522
+ st.write(f"**Shaft Power (P_s):** {shaft_power_kw:.2f} kW")