{
"cells": [
{
"cell_type": "markdown",
"id": "medieval-johnston",
"metadata": {},
"source": [
"# Adding Milk"
]
},
{
"cell_type": "markdown",
"id": "fifty-chicken",
"metadata": {
"tags": [
"remove-cell"
]
},
"source": [
"*Modeling and Simulation in Python*\n",
"\n",
"Copyright 2021 Allen Downey\n",
"\n",
"License: [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "british-place",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# download modsim.py if necessary\n",
"\n",
"from os.path import basename, exists\n",
"\n",
"def download(url):\n",
" filename = basename(url)\n",
" if not exists(filename):\n",
" from urllib.request import urlretrieve\n",
" local, _ = urlretrieve(url, filename)\n",
" print('Downloaded ' + local)\n",
" \n",
"download('https://github.com/AllenDowney/ModSimPy/raw/master/' +\n",
" 'modsim.py')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "determined-volunteer",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# import functions from modsim\n",
"\n",
"from modsim import *"
]
},
{
"cell_type": "markdown",
"id": "valuable-shannon",
"metadata": {
"tags": [
"remove-print"
]
},
"source": [
"This chapter is available as a Jupyter notebook where you can read the text, run the code, and work on the exercises. \n",
"Click here to access the notebooks: ."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "fossil-moisture",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"download('https://github.com/AllenDowney/ModSimPy/raw/master/' +\n",
" 'chap15.py')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "cutting-scale",
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# import code from previous notebooks\n",
"\n",
"from chap15 import change_func\n",
"from chap15 import run_simulation\n",
"from chap15 import make_system"
]
},
{
"cell_type": "markdown",
"id": "enhanced-copper",
"metadata": {},
"source": [
"In the previous chapter we wrote a simulation of a cooling cup of\n",
"coffee. \n",
"Given the initial temperature of the coffee, the temperature of the atmosphere, and the rate parameter, `r`, we predicted the temperature of the coffee over time.\n",
"Then we used a root finding algorithm to estimate `r` based on data.\n",
"\n",
"If you did the exercises, you simulated the temperature of the milk as it warmed, and estimated its rate parameter as well.\n",
"\n",
"Now let's put it together.\n",
"In this chapter we'll write a function that simulates mixing the two liquids, and use it to answer the question we started with: is it better to mix the coffee and milk at the beginning, the end, or somewhere in the middle?"
]
},
{
"cell_type": "markdown",
"id": "hydraulic-belfast",
"metadata": {},
"source": [
"## Mixing Liquids\n",
"\n",
"When we mix two liquids, the temperature of the mixture depends on the\n",
"temperatures of the ingredients as well as their volumes, densities, and specific heat capacities (as defined in the previous chapter).\n",
"In this section I'll explain how.\n",
"\n",
"Assuming there are no chemical reactions that either produce or consume heat, the total thermal energy of the system is the same before and after mixing; in other words, thermal energy is *conserved*.\n",
"\n",
"If the temperature of the first liquid is $T_1$, the temperature of the second liquid is $T_2$, and the final temperature of the mixture is $T$, the heat transfer into the first liquid is $C_1 (T - T_1)$ and the heat transfer into the second liquid is $C_2 (T - T_2)$, where $C_1$ and $C_2$ are the thermal masses of the liquids.\n",
"\n",
"In order to conserve energy, these heat transfers must add up to 0:\n",
"\n",
"$$C_1 (T - T_1) + C_2 (T - T_2) = 0$$ \n",
"\n",
"We can solve this equation for T:\n",
"\n",
"$$T = \\frac{C_1 T_1 + C_2 T_2}{C_1 + C_2}$$ \n",
"\n",
"For the coffee cooling problem, we have the volume of each liquid; if we also know the density, $\\rho$, and the specific heat capacity, $c_p$, we can compute thermal mass: \n",
"\n",
"$$C = \\rho V c_p$$ \n",
"\n",
"If the liquids have the same density and heat capacity, they drop out of the equation, and we can write:\n",
"\n",
"$$T = \\frac{V_1 T_1 + V_2 T_2}{V_1 + V_2}$$ \n",
"\n",
"where $V_1$ and $V_2$ are the volumes of the liquids.\n",
"\n",
"As an approximation, I'll assume that milk and coffee have the same\n",
"density and specific heat. If you are interested, you can look up these\n",
"quantities and see how good this assumption is.\n",
"\n",
"Now let's simulate the mixing process.\n",
"The following function takes two `System` objects, representing the\n",
"coffee and milk, and creates a new `System` to represent the mixture:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "extensive-happening",
"metadata": {},
"outputs": [],
"source": [
"def mix(system1, system2):\n",
" \n",
" V1, V2 = system1.volume, system2.volume\n",
" T1, T2 = system1.T_final, system2.T_final\n",
" \n",
" V_mix = V1 + V2\n",
" T_mix = (V1 * T1 + V2 * T2) / V_mix\n",
" \n",
" return make_system(T_init=T_mix,\n",
" volume=V_mix,\n",
" r=system1.r,\n",
" t_end=30)"
]
},
{
"cell_type": "markdown",
"id": "overhead-architect",
"metadata": {},
"source": [
"The first two lines extract volume and temperature from the `System` objects. The next two lines compute the volume and temperature of the mixture. Finally, `mix` makes a new `System` object and returns it.\n",
"\n",
"This function uses the value of `r` from `system1` as the value of `r`\n",
"for the mixture. If `system1` represents the coffee, and we are adding\n",
"the milk to the coffee, this is probably a reasonable choice. On the\n",
"other hand, when we increase the amount of liquid in the coffee cup,\n",
"that might change `r`. So this is an assumption we might want to\n",
"revisit.\n",
"\n",
"Now we have everything we need to solve the problem."
]
},
{
"cell_type": "markdown",
"id": "foreign-campbell",
"metadata": {},
"source": [
"## Mix First or Last?\n",
"\n",
"First I'll create objects to represent the coffee and milk.\n",
"For `r_coffee`, I'll use the value we computed in the previous chapter."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "polyphonic-specialist",
"metadata": {},
"outputs": [],
"source": [
"r_coffee = 0.0115\n",
"coffee = make_system(T_init=90, volume=300, r=r_coffee, t_end=30)"
]
},
{
"cell_type": "markdown",
"id": "authorized-system",
"metadata": {},
"source": [
"For `r_milk`, I'll use the value I estimated in the exercise from the previous chapter."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "subtle-donna",
"metadata": {},
"outputs": [],
"source": [
"r_milk = 0.133\n",
"milk = make_system(T_init=5, volume=50, r=r_milk, t_end=15)"
]
},
{
"cell_type": "markdown",
"id": "satisfactory-rwanda",
"metadata": {},
"source": [
"Now we can mix them and simulate 30 minutes:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "domestic-tours",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"61.48016207445017"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mix_first = mix(coffee, milk)\n",
"run_simulation(mix_first, change_func)\n",
"\n",
"mix_first.T_final"
]
},
{
"cell_type": "markdown",
"id": "accredited-diagnosis",
"metadata": {},
"source": [
"The final temperature is 61.5 °C which is still warm enough to be\n",
"enjoyable. Would we do any better if we added the milk last?\n",
"\n",
"I'll simulate the coffee and milk separately, and then mix them:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "subject-richardson",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"62.91117032872072"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"run_simulation(coffee, change_func)\n",
"run_simulation(milk, change_func)\n",
"mix_last = mix(coffee, milk)\n",
"mix_last.T_final"
]
},
{
"cell_type": "markdown",
"id": "divine-trance",
"metadata": {},
"source": [
"After mixing, the temperature is 62.9 °C, so it looks like adding the\n",
"milk at the end is better. \n",
"But is that the best we can do?"
]
},
{
"cell_type": "markdown",
"id": "linear-republican",
"metadata": {},
"source": [
"## Optimal Timing\n",
"\n",
"Adding the milk after 30 minutes is better than adding it immediately, but maybe there's something in between that's even better. To find out, I'll use the following function, which takes the time to add the milk, `t_add`, as a parameter:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "mental-corporation",
"metadata": {},
"outputs": [],
"source": [
"def run_and_mix(t_add, t_total):\n",
" coffee.t_end = t_add\n",
" coffee_results = run_simulation(coffee, change_func)\n",
" \n",
" milk.t_end = t_add\n",
" milk_results = run_simulation(milk, change_func)\n",
" \n",
" mixture = mix(coffee, milk)\n",
" mixture.t_end = t_total - t_add\n",
" results = run_simulation(mixture, change_func)\n",
"\n",
" return mixture.T_final"
]
},
{
"cell_type": "markdown",
"id": "better-cemetery",
"metadata": {},
"source": [
"`run_and_mix` simulates both systems for the given time, `t_add`.\n",
"Then it mixes them and simulates the mixture for the remaining time, `t_total - t_add`.\n",
"\n",
"When `t_add` is `0`, we add the milk immediately; when `t_add` is `30`, we add it at the end. Now we can sweep the range of values in between:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "adverse-hanging",
"metadata": {},
"outputs": [],
"source": [
"sweep = SweepSeries()\n",
"for t_add in linspace(0, 30, 11):\n",
" sweep[t_add] = run_and_mix(t_add, 30)"
]
},
{
"cell_type": "markdown",
"id": "practical-state",
"metadata": {},
"source": [
"Here's what the results look like:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "bright-proposal",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"