JustinGerm's picture
Update app.py
ca3fa03
import gradio as gr
import math
def calculate_cooling_time(initial_temperature_C, ambient_temperature_C, volume_coffee_ml, diameter_mug_mm, desired_temperature_C):
# Constants
specific_heat_water_J_per_g_C = 4.186 # in J/g°C
thermal_conductivity_ceramic_W_per_m_K = 1 # in W/m·K
density_water_g_per_ml = 1 # in g/ml
# Convert units
volume_coffee_m3 = volume_coffee_ml * 1e-6 # convert ml to m³
diameter_mug_m = diameter_mug_mm * 1e-3 # convert mm to m
# Calculate the radius of the mug and the coffee
radius_mug_m = diameter_mug_m / 2
radius_coffee_m = radius_mug_m # we're assuming the coffee fills the mug to the brim
# Estimate the height of the coffee based on the volume
height_coffee_m = volume_coffee_m3 / (math.pi * radius_coffee_m**2)
# Calculate the surface area of the coffee exposed to the air
surface_area_coffee_m2 = math.pi * radius_coffee_m**2
# Calculate the mass of the coffee
mass_coffee_g = volume_coffee_ml * density_water_g_per_ml # convert volume to mass
# Calculate the temperature difference between the coffee and the ambient temperature
delta_temperature_C = initial_temperature_C - ambient_temperature_C
# Estimate the cooling constant
cooling_constant = (thermal_conductivity_ceramic_W_per_m_K * surface_area_coffee_m2 * delta_temperature_C) / (specific_heat_water_J_per_g_C * mass_coffee_g)
# Check if the desired temperature is less than the initial temperature
if desired_temperature_C >= initial_temperature_C:
return "Desired temperature must be less than initial temperature"
# Rearrange the temperature equation to solve for time
cooling_time_s = -math.log((desired_temperature_C - ambient_temperature_C) / (initial_temperature_C - ambient_temperature_C)) / cooling_constant
# Convert the cooling time from seconds to minutes
cooling_time_min = cooling_time_s / 60
return cooling_time_min
iface = gr.Interface(
fn=calculate_cooling_time,
inputs=[
gr.inputs.Number(label="Initial temperature of coffee (C)"),
gr.inputs.Number(label="Ambient temperature (C)"),
gr.inputs.Number(label="Volume of coffee (ml)"),
gr.inputs.Number(label="Diameter of mug (mm)"),
gr.inputs.Number(label="Desired temperature (C)")
],
outputs=gr.outputs.Textbox(label="Estimated cooling time (minutes)"),
)
iface.launch()