Source code for climlab.dynamics.budyko_transport
from __future__ import division
from climlab.process.energy_budget import EnergyBudget
from climlab.domain.field import global_mean
[docs]
class BudykoTransport(EnergyBudget):
r"""calculates the 1 dimensional heat transport as the difference
between the local temperature and the global mean temperature.
:param float b: budyko transport parameter \n
- unit: :math:`\\textrm{W} / \\left( \\textrm{m}^2 \\ ^{\circ} \\textrm{C} \\right)` \n
- default value: ``3.81``
As BudykoTransport is a :class:`~climlab.process.process.Process` it needs
a state do be defined on. See example for details.
**Computation Details:** \n
In a global Energy Balance Model
.. math::
C \\frac{dT}{dt} = R\downarrow - R\uparrow - H
with model state :math:`T`, the energy transport term :math:`H`
can be described as
.. math::
H = b [T - \\bar{T}]
where :math:`T` is a vector of the model temperature and :math:`\\bar{T}`
describes the mean value of :math:`T`.
For further information see :cite:`Budyko_1969`.
:Example:
Budyko Transport as a standalone process:
.. plot:: code_input_manual/example_budyko_transport.py
:include-source:
"""
# implemented by m-kreuzer
def __init__(self, b=3.81, **kwargs):
super(BudykoTransport, self).__init__(**kwargs)
self.b = b
@property
def b(self):
r"""the budyko transport parameter in unit
:math:`\\frac{\\textrm{W}}{\\textrm{m}^2 \\textrm{K}}`
:getter: returns the budyko transport parameter
:setter: sets the budyko transport parameter
:type: float
"""
return self._b
@b.setter
def b(self, value):
self._b = value
self.param['b'] = value
def _compute_heating_rates(self):
"""Computes energy flux convergences to get heating rates in :math:`W/m^2`.
"""
for varname, value in self.state.items():
self.heating_rate[varname] = - self.b * (value - global_mean(value))