{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Advanced topic: Analytical solution of the global Energy Balance Model\n",
"\n",
"This notebook is part of [The Climate Laboratory](https://brian-rose.github.io/ClimateLaboratoryBook) by [Brian E. J. Rose](http://www.atmos.albany.edu/facstaff/brose/index.html), University at Albany."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____________\n",
"## 1. The zero-dimensional Energy Balance Model: recap\n",
"____________"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the [previous lecture](https://brian-rose.github.io/ClimateLaboratoryBook/courseware/zero-dim-ebm.html#an-energy-balance-model) we considered a zero-dimensional **Energy Balance Model** with the governing equation\n",
"\n",
"$$ C \\frac{dT_s}{dt} = (1-\\alpha) Q - \\tau \\sigma T_s^4 $$\n",
"\n",
"where\n",
"- $T_s$ is the global average surface temperature\n",
"- $C$ is the **heat capacity** of Earth system, in units of J m$^{-2}$ K$^{-1}$.\n",
"- $\\tau$ is the transmissivity of the atmosphere (a measure of the strength of the greenhouse effect).\n",
"\n",
"We have seen that numerical solutions of this time-dependent model are easy to implement. However the model is solvable analytically once we make a (very good) approximation by linearing the OLR in terms of departures from equilibrium.\n",
"\n",
"The analytical solutions will give us considerable insight into what's actually going on in the model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____________\n",
"## 2. Linearizing about the equilibrium solution\n",
"____________"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Equilibrium solutions\n",
"\n",
"We've already seen that the equilibrium solution of the model is\n",
"\n",
"$$ T_{eq} = \\left( \\frac{(1-\\alpha) Q}{\\tau \\sigma} \\right)^\\frac{1}{4} $$\n",
"\n",
"and tuned the model parameter based on this relationship."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We are going to **linearize the equation** for small perturbations away from this equilibrium.\n",
"\n",
"Let $T_s = T_{eq} + T_s^\\prime$ and restrict our solution to $T_s^\\prime << T_{eq}$.\n",
"\n",
"Note this this is not a big restriction! For example, a 10 degree warming or cooling is just $\\pm$3.4% of the absolute equilibrium temperature."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Linearizing the governing equation\n",
"\n",
"Now use a first-order Taylor series expansion to write\n",
"\n",
"$$ \\text{OLR} = \\tau \\sigma T_s^4 $$\n",
"\n",
"$$OLR = \\tau \\sigma T_s^4 = \\tau \\sigma \\left( T_{eq} + T_s^\\prime \\right)^4 \\approx \\tau \\sigma \\left( T_{eq}^4 + 4 T_{eq}^3 T_s^\\prime \\right) $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and the budget for the perturbation temperature thus becomes\n",
"\n",
"$$C \\frac{d T_s^\\prime}{d t} = -\\lambda_0 T_s^\\prime$$\n",
"\n",
"where we define\n",
"\n",
"$$\\lambda_0 = 4 \\tau \\sigma T_{eq}^3 $$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Putting in our observational values, we get "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lambda_0 = 3.31 W m-2 K-1\n"
]
}
],
"source": [
"OLRobserved = 238.5 # in W/m2\n",
"sigma = 5.67E-8 # S-B constant\n",
"Tsobserved = 288. # global average surface temperature\n",
"tau = OLRobserved / sigma / Tsobserved**4 # solve for tuned value of transmissivity\n",
"\n",
"lambda_0 = 4 * sigma * tau * Tsobserved**3\n",
"# This is an example of formatted text output in Python\n",
"print( 'lambda_0 = {:.2f} W m-2 K-1'.format(lambda_0) )"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"This is actually our first estimate of what is often called the **Planck feedback** (though the Planck feedback parameter is more properly $-\\lambda_0$, i.e. a negative number, since it acts as a negative feedback). \n",
"\n",
"It is the tendency for a warm surface to cool by increased longwave radiation to space. \n",
"\n",
"It may also be refered to as the \"no-feedback\" climate response parameter. As we will see, $\\lambda_0$ quantifies the sensitivity of the climate system in the absence of any actual feedback processes."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____________\n",
"## 3. Solving the linear ODE\n",
"____________"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Now define\n",
"\n",
"$$ t^* = \\frac{C}{\\lambda_0} $$\n",
"\n",
"This is a positive constant with dimensions of time (seconds). With these definitions the temperature evolves according to\n",
"\n",
"$$ \\frac{d T_s^\\prime}{d t} = - \\frac{T_s^\\prime}{t^*}$$\n",
"\n",
"This is one of the simplest ODEs. Hopefully it looks familiar to most of you. It is the equation for an **exponential decay** process. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"We can easily solve for the temperature evolution by integrating from an initial condition $T_s^\\prime(0)$:\n",
"\n",
"$$ \\int_{T_s^\\prime(0)}^{T_s^\\prime(t)} \\frac{d T_s^\\prime}{T_s^\\prime} = -\\int_0^t \\frac{dt}{t^*}$$\n",
"\n",
"$$\\ln \\bigg( \\frac{T_s^\\prime(t)}{T_s^\\prime(0)} \\bigg) = -\\frac{t}{t^*}$$\n",
"\n",
"$$T_s^\\prime(t) = T_s^\\prime(0) \\exp \\bigg(-\\frac{t}{t^*} \\bigg)$$\n",
"\n",
"I hope that the mathematics is straightforward for everyone in this class. If not, go through it carefully and make sure you understand each step."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____________\n",
"## 4. e-folding time for relaxation of global mean temperature\n",
"____________"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Our model says that surface temperature will relax toward its equilibrium value over a characteristic time scale $t^*$. This is an **e-folding time** – the time it takes for the perturbation to decay by a factor $1/e = 0.37$\n",
"\n",
"*What should this timescale be for the climate system?*\n",
"\n",
"To estimate $t^*$ we need a value for the effective heat capacity $C$.\n",
"\n",
"Our \"quick and dirty\" estimate above used 100 meters of water to set this heat capacity."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"#### What is the right choice for water depth $H$? \n",
"\n",
"That turns out to be an interesting and subtle question. It depends very much on the timescale of the problem\n",
"\n",
"- days?\n",
"- years?\n",
"- decades?\n",
"- millenia?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"We will revisit this question later in the course. For now, let’s just continue assuming $H = 100$ m (a bit deeper than the typical depth of the surface mixed layer in the oceans).\n",
"\n",
"Now calculate the e-folding time for the surface temperature:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The e-folding time is 1.21e+08 seconds or about 4 years.\n"
]
}
],
"source": [
"c_w = 4E3 # Specific heat of water in J/kg/K\n",
"rho_w = 1E3 # Density of water in kg/m3\n",
"H = 100. # Depth of water in m\n",
"C = c_w * rho_w * H # Heat capacity of the model \n",
"\n",
"tstar = C / lambda_0 # Calculated value of relaxation time constant\n",
"seconds_per_year = 60.*60.*24.*365.\n",
"print( 'The e-folding time is {:1.2e} seconds or about {:1.0f} years.'.format(tstar, tstar / seconds_per_year))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"This is a rather fast timescale relative to other processes that can affect the planetary energy budget. \n",
"\n",
"**But notice that if the climate feedback parameter $\\lambda$ is smaller, the timescale gets longer.** We will come back to this later."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"____________\n",
"\n",
"## 5. Summary\n",
"____________"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"- We can solve the zero-dimensional EBM by linearizing the fourth-power dependence of OLR on temperature.\n",
"- The result is a simple exponential decay model.\n",
"- The system will tend to relax toward its equilibrium temperature on an $e$-folding timescale that depends on \n",
" 1. radiative feedback processes, and \n",
" 2. effective heat capacity.\n",
"- In our estimate, this e-folding time is relatively short.\n",
"- *In the absence of other processes that can either increase the heat capacity or lower (in absolute value) the feedback parameter, the Earth would never be very far out of energy balance.*\n",
"- We will quantify this statement more as the term progresses."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"____________\n",
"\n",
"## Credits\n",
"\n",
"This notebook is part of [The Climate Laboratory](https://brian-rose.github.io/ClimateLaboratoryBook), an open-source textbook developed and maintained by [Brian E. J. Rose](http://www.atmos.albany.edu/facstaff/brose/index.html), University at Albany.\n",
"\n",
"It is licensed for free and open consumption under the\n",
"[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/) license.\n",
"\n",
"Development of these notes and the [climlab software](https://github.com/climlab/climlab) is partially supported by the National Science Foundation under award AGS-1455071 to Brian Rose. Any opinions, findings, conclusions or recommendations expressed here are mine and do not necessarily reflect the views of the National Science Foundation.\n",
"____________"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}