Source code for climlab.utils.heat_capacity
"""Routines for calculating heat capacities for grid boxes."""
from __future__ import division
from climlab import constants as const
[docs]
def atmosphere(dp):
"""Returns heat capacity of a unit area of atmosphere, in units J /m**2 / K.
.. math::
C_a = \\frac{c_p \\cdot dp \\cdot f_{\\textrm{mb-to-Pa}}}{g}
where
============================== ============== ================================================== ===============================================
variable value unit description
============================== ============== ================================================== ===============================================
:math:`C_a` *output* :math:`\\textrm{J} / \\textrm{m}^2 / \\textrm{K}` heat capacity for atmospheric cell
:math:`c_p` :math:`1004.` :math:`\\textrm{J} / \\textrm{kg} / \\textrm{K}` specific heat at constant pressure for dry air
:math:`dp` *input* :math:`\\textrm{mb}` pressure for atmospheric cell
:math:`f_{\\textrm{mb-to-Pa}}` :math:`100` :math:`\\textrm{Pa} / \\textrm{mb}` conversion factor from mb to Pa
:math:`g` :math:`9.8` :math:`\\textrm{m} / \\textrm{s}^2` gravitational acceleration
============================== ============== ================================================== ===============================================
**Function-call argument** \n
:param array dp: pressure intervals (*unit:* mb)
:returns: the heat capacity for atmosphere cells correspoding to
pressure input (*unit:* J /m**2 / K)
:rtype: array
:Example:
Calculate atmospheric heat capacity for pressure intervals of
1, 10, 100 mb::
>>> from climlab.utils import heat_capacity
>>> pressure_interval = array([1,10,100]) # in mb
>>> heat_capacity.atmosphere(pressure_interval) # in J /m**2 / K
array([ 10244.89795918, 102448.97959184, 1024489.79591837])
"""
return const.cp * dp * const.mb_to_Pa / const.g
[docs]
def ocean(dz):
"""Returns heat capacity of a unit area of water, in units J /m**2 / K.
.. math::
C_o = \\rho_w \\cdot c_w \\cdot dz
where
============================== ============== ================================================== ==================================
variable value unit description
============================== ============== ================================================== ==================================
:math:`C_o` *output* :math:`\\textrm{J} / \\textrm{m}^2 / \\textrm{K}` heat capacity for oceanic cell
:math:`c_w` :math:`4181.3` :math:`\\textrm{J} / \\textrm{kg} / \\textrm{K}` specific heat of liquid water
:math:`dz` *input* :math:`\\textrm{m}` water depth of oceanic cell
:math:`\\rho_w` :math:`1000.` :math:`\\textrm{kg} / \\textrm{m}^3` density of water
============================== ============== ================================================== ==================================
**Function-call argument** \n
:param array dz: water depth of ocean cells (*unit:* m)
:returns: the heat capacity for ocean cells correspoding to
depth input (*unit:* J /m**2 / K)
:rtype: array
:Example:
Calculate atmospheric heat capacity for pressure intervals of
1, 10, 100 m::
>>> from climlab.utils import heat_capacity
>>> pressure_interval = array([1,10,100]) # in m
>>> heat_capacity.ocean(pressure_interval) # in J /m**2 / K
array([ 4.18130000e+06, 4.18130000e+07, 4.18130000e+08])
"""
return const.rho_w * const.cw * dz
[docs]
def slab_ocean(water_depth):
"""Returns heat capacity of a unit area slab of water, in units of J / m**2 / K.
Takes input argument ``water_depth`` and calls :func:`ocean()`
**Function-call argument** \n
:param float: water depth of slab ocean (*unit:* m)
:returns: the heat capacity for slab ocean cell (*unit:* J / m**2 / K)
:rtype: float
"""
return ocean(water_depth)