Source code for climlab.dynamics.budyko_transport

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 in units of :math:`\textrm{W} / \left( \textrm{m}^2 \ ^{\circ} \textrm{C} \right)` [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:** 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:t:`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))