API Docs

Jupyter notebooks with API examples

A jupyter notebook with tables of importable variables and equations can be found at https://github.com/environmentalscience/essm/blob/master/docs/examples/importable_variables_equations.ipynb

A jupyter notebook with use examples for the API can be found at https://github.com/environmentalscience/essm/blob/master/docs/examples/api_features.ipynb

Variables

Variables module to deal with physical variables and units.

It allows attaching docstrings to variable names, defining their domains (e.g. integer, real or complex), their units and LaTeX representations. You can also provide a default value, which is particularly useful for physical constants.

Creating variables

To create custom variables, first import Variable:

>>> from essm.variables import Variable

To define units, you must first import these units from the library:

>>> from essm.variables.units import joule, kelvin, meter

Then you can define a custom variable with its name, description, domain, latex_name, unit, and an optional default value.

Example: .. code-block:: python

from .variables.units import meter

class demo_chamber_volume1(Variable):

‘’‘Volume of Chamber 1.’‘’

name = ‘V_c1’ domain = ‘real’ latex_name = ‘V_{c1}’ unit = meter ** 3 default = 1

Now, demo_chamber_volume is displayed as V_c1 and it will be nicely rendered in LaTeX as \(V_{c1}\).

You can type help(demo_chamber_volume) to inspects its metadata.

Variable.__defaults__ returns a dictionary with all variables and their default values, Variable.__units__ returns their units, and demo_chamber_volume.short_unit() can be used to obtain the units in short notation.

This module also contains libraries of pre-defined variables, which can be imported into your session, e.g.:

>>> from essm.variables.physics.thermodynamics import *
>>> from essm.variables.leaf.energy_water import *

Chamber

Chamber related variables.

Mass

Chamber mass and energy balance.

class essm.variables.chamber.mass.W_c

Bases: essm.variables._core.Variable

Chamber width.

assumptions = {'real': True}
latex_name = 'W_c'
name = 'W_c'
unit = meter
class essm.variables.chamber.mass.L_c

Bases: essm.variables._core.Variable

Chamber length.

assumptions = {'real': True}
latex_name = 'L_c'
name = 'L_c'
unit = meter
class essm.variables.chamber.mass.H_c

Bases: essm.variables._core.Variable

Chamber height.

assumptions = {'real': True}
latex_name = 'H_c'
name = 'H_c'
unit = meter
class essm.variables.chamber.mass.V_c

Bases: essm.variables._core.Variable

Chamber volume.

assumptions = {'real': True}
latex_name = 'V_c'
name = 'V_c'
unit = meter**3
class essm.variables.chamber.mass.n_c

Bases: essm.variables._core.Variable

molar mass of gas in chamber.

assumptions = {'real': True}
latex_name = 'n_c'
name = 'n_c'
unit = mole
class essm.variables.chamber.mass.F_in_v

Bases: essm.variables._core.Variable

Volumetric flow rate into chamber.

assumptions = {'real': True}
latex_name = 'F_{in,v}'
name = 'F_in_v'
unit = meter**3/second
class essm.variables.chamber.mass.F_in_mola

Bases: essm.variables._core.Variable

Molar flow rate of dry air into chamber.

assumptions = {'real': True}
latex_name = 'F_{in,mol,a}'
name = 'F_in_mola'
unit = mole/second
class essm.variables.chamber.mass.F_in_molw

Bases: essm.variables._core.Variable

Molar flow rate of water vapour into chamber.

assumptions = {'real': True}
latex_name = 'F_{in,mol,w}'
name = 'F_in_molw'
unit = mole/second
class essm.variables.chamber.mass.F_out_mola

Bases: essm.variables._core.Variable

Molar flow rate of dry air out of chamber.

assumptions = {'real': True}
latex_name = 'F_{out,mol,a}'
name = 'F_out_mola'
unit = mole/second
class essm.variables.chamber.mass.F_out_molw

Bases: essm.variables._core.Variable

Molar flow rate of water vapour out of chamber.

assumptions = {'real': True}
latex_name = 'F_{out,mol,w}'
name = 'F_out_molw'
unit = mole/second
class essm.variables.chamber.mass.F_out_v

Bases: essm.variables._core.Variable

Volumetric flow rate out of chamber.

assumptions = {'real': True}
latex_name = 'F_{out,v}'
name = 'F_out_v'
unit = meter**3/second
class essm.variables.chamber.mass.T_d

Bases: essm.variables._core.Variable

Dew point temperature of incoming air.

assumptions = {'real': True}
latex_name = 'T_d'
name = 'T_d'
unit = kelvin
class essm.variables.chamber.mass.T_in

Bases: essm.variables._core.Variable

Temperature of incoming air.

assumptions = {'real': True}
latex_name = 'T_{in}'
name = 'T_in'
unit = kelvin
class essm.variables.chamber.mass.T_out

Bases: essm.variables._core.Variable

Temperature of outgoing air (= chamber T_a).

assumptions = {'real': True}
latex_name = 'T_{out}'
name = 'T_out'
unit = kelvin
class essm.variables.chamber.mass.T_room

Bases: essm.variables._core.Variable

Lab air temperature.

assumptions = {'real': True}
latex_name = 'T_{room}'
name = 'T_room'
unit = kelvin
class essm.variables.chamber.mass.P_w_in

Bases: essm.variables._core.Variable

Vapour pressure of incoming air.

assumptions = {'real': True}
latex_name = 'P_{w,in}'
name = 'P_w_in'
unit = pascal
class essm.variables.chamber.mass.P_w_out

Bases: essm.variables._core.Variable

Vapour pressure of outgoing air.

assumptions = {'real': True}
latex_name = 'P_{w,out}'
name = 'P_w_out'
unit = pascal
class essm.variables.chamber.mass.R_H_in

Bases: essm.variables._core.Variable

Relative humidity of incoming air.

assumptions = {'real': True}
latex_name = 'R_{H,in}'
name = 'R_H_in'
unit = 1
class essm.variables.chamber.mass.L_A

Bases: essm.variables._core.Variable

Leaf area.

assumptions = {'real': True}
latex_name = 'L_A'
name = 'L_A'
unit = meter**2

Insulation

Chamber insulation material.

class essm.variables.chamber.insulation.c_pi

Bases: essm.variables._core.Variable

Heat capacity of insulation material.

assumptions = {'real': True}
latex_name = 'c_{pi}'
name = 'c_pi'
unit = joule/(kelvin*kilogram)
class essm.variables.chamber.insulation.lambda_i

Bases: essm.variables._core.Variable

Heat conductivity of insulation material.

assumptions = {'real': True}
latex_name = 'lambda_i'
name = 'lambda_i'
unit = joule/(kelvin*meter*second)
class essm.variables.chamber.insulation.rho_i

Bases: essm.variables._core.Variable

Density of insulation material.

assumptions = {'real': True}
latex_name = 'rho_i'
name = 'rho_i'
unit = kilogram/meter**3
class essm.variables.chamber.insulation.L_i

Bases: essm.variables._core.Variable

Thickness of insulation material.

assumptions = {'real': True}
latex_name = 'L_i'
name = 'L_i'
unit = meter
class essm.variables.chamber.insulation.A_i

Bases: essm.variables._core.Variable

Conducting area of insulation material.

assumptions = {'real': True}
latex_name = 'A_i'
name = 'A_i'
unit = meter**2
class essm.variables.chamber.insulation.Q_i

Bases: essm.variables._core.Variable

Heat conduction through insulation material.

assumptions = {'real': True}
latex_name = 'Q_i'
name = 'Q_i'
unit = joule/second
class essm.variables.chamber.insulation.dT_i

Bases: essm.variables._core.Variable

Temperature increment of insulation material.

assumptions = {'real': True}
latex_name = 'dT_i'
name = 'dT_i'
unit = kelvin

Leaf

Variables related to leaf energy and water balance.

Radiation

Leaf radiation balance.

class essm.variables.leaf.radiation.alpha_l

Bases: essm.variables._core.Variable

Leaf albedo, fraction of shortwave radiation reflected by the leaf.

assumptions = {'real': True}
latex_name = 'alpha_l'
name = 'alpha_l'
unit = 1
class essm.variables.leaf.radiation.R_d

Bases: essm.variables._core.Variable

Downwelling global radiation.

assumptions = {'real': True}
latex_name = 'R_d'
name = 'R_d'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.R_la

Bases: essm.variables._core.Variable

Longwave radiation absorbed by leaf.

assumptions = {'real': True}
latex_name = 'R_{la}'
name = 'R_la'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.R_ld

Bases: essm.variables._core.Variable

Downwards emitted/reflected global radiation from leaf.

assumptions = {'real': True}
latex_name = 'R_{ld}'
name = 'R_ld'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.R_lu

Bases: essm.variables._core.Variable

Upwards emitted/reflected global radiation from leaf.

assumptions = {'real': True}
latex_name = 'R_{lu}'
name = 'R_lu'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.R_u

Bases: essm.variables._core.Variable

Upwelling global radiation.

assumptions = {'real': True}
latex_name = 'R_u'
name = 'R_u'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.S_a

Bases: essm.variables._core.Variable

Radiation sensor above leaf reading.

assumptions = {'real': True}
latex_name = 'S_a'
name = 'S_a'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.S_b

Bases: essm.variables._core.Variable

Radiation sensor below leaf reading.

assumptions = {'real': True}
latex_name = 'S_b'
name = 'S_b'
unit = joule/(meter**2*second)
class essm.variables.leaf.radiation.S_s

Bases: essm.variables._core.Variable

Radiation sensor beside leaf reading.

assumptions = {'real': True}
latex_name = 'S_s'
name = 'S_s'
unit = joule/(meter**2*second)

Energy and Water

Unsorted variables related to leaf model.

class essm.variables.leaf.energy_water.alpha_l

Bases: essm.variables._core.Variable

Leaf albedo, fraction of shortwave radiation reflected by the leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = '\\alpha_l'
name = 'alpha_l'
unit = 1
class essm.variables.leaf.energy_water.a_s

Bases: essm.variables._core.Variable

Fraction of one-sided leaf area covered by stomata.

(1 if stomata are on one side only, 2 if they are on both sides).

assumptions = {'real': True}
domain = 'real'
latex_name = 'a_s'
name = 'a_s'
unit = 1
class essm.variables.leaf.energy_water.a_sh

Bases: essm.variables._core.Variable

Fraction of projected area exchanging sensible heat with the air.

assumptions = {'real': True}
default = 2.0
domain = 'real'
latex_name = 'a_{sh}'
name = 'a_sh'
unit = 1
class essm.variables.leaf.energy_water.C_wl

Bases: essm.variables._core.Variable

Concentration of water in the leaf air space.

assumptions = {'real': True}
domain = 'real'
latex_name = 'C_{wl}'
name = 'C_wl'
unit = mole/meter**3
class essm.variables.leaf.energy_water.E_lmol

Bases: essm.variables._core.Variable

Transpiration rate in molar units.

assumptions = {'real': True}
domain = 'real'
latex_name = 'E_{l,mol}'
name = 'E_lmol'
unit = mole/(meter**2*second)
class essm.variables.leaf.energy_water.E_l

Bases: essm.variables._core.Variable

Latent heat flux from leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'E_l'
name = 'E_l'
unit = joule/(meter**2*second)
class essm.variables.leaf.energy_water.epsilon_l

Bases: essm.variables._core.Variable

Longwave emmissivity of the leaf surface.

assumptions = {'real': True}
default = 1.0
domain = 'real'
latex_name = '\\epsilon_l'
name = 'epsilon_l'
unit = 1
class essm.variables.leaf.energy_water.g_bw

Bases: essm.variables._core.Variable

Boundary layer conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{bw}'
name = 'g_bw'
unit = meter/second
class essm.variables.leaf.energy_water.g_bwmol

Bases: essm.variables._core.Variable

Boundary layer conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{bw,mol}'
name = 'g_bwmol'
unit = mole/(meter**2*second)
class essm.variables.leaf.energy_water.Gr

Bases: essm.variables._core.Variable

Grashof number.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Gr_L}'
name = 'Gr'
unit = 1
class essm.variables.leaf.energy_water.g_sw

Bases: essm.variables._core.Variable

Stomatal conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{sw}'
name = 'g_sw'
unit = meter/second
class essm.variables.leaf.energy_water.g_swmol

Bases: essm.variables._core.Variable

Stomatal conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{sw,mol}'
name = 'g_swmol'
unit = mole/(meter**2*second)
class essm.variables.leaf.energy_water.g_tw

Bases: essm.variables._core.Variable

Total leaf conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{tw}'
name = 'g_tw'
unit = meter/second
class essm.variables.leaf.energy_water.g_twmol

Bases: essm.variables._core.Variable

Total leaf layer conductance to water vapour.

assumptions = {'real': True}
domain = 'real'
latex_name = 'g_{tw,mol}'
name = 'g_twmol'
unit = mole/(meter**2*second)
class essm.variables.leaf.energy_water.h_c

Bases: essm.variables._core.Variable

Average 1-sided convective heat transfer coefficient.

assumptions = {'real': True}
domain = 'real'
latex_name = 'h_c'
name = 'h_c'
unit = joule/(kelvin*meter**2*second)
class essm.variables.leaf.energy_water.H_l

Bases: essm.variables._core.Variable

Sensible heat flux from leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'H_l'
name = 'H_l'
unit = joule/(meter**2*second)
class essm.variables.leaf.energy_water.L_A

Bases: essm.variables._core.Variable

Leaf area.

assumptions = {'real': True}
domain = 'real'
latex_name = 'L_A'
name = 'L_A'
unit = meter**2
class essm.variables.leaf.energy_water.L_l

Bases: essm.variables._core.Variable

Leaf width as characteristic length scale for convection.

assumptions = {'real': True}
domain = 'real'
latex_name = 'L_l'
name = 'L_l'
unit = meter
class essm.variables.leaf.energy_water.P_wl

Bases: essm.variables._core.Variable

Water vapour pressure inside the leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_{wl}'
name = 'P_wl'
unit = pascal
class essm.variables.leaf.energy_water.r_bw

Bases: essm.variables._core.Variable

Boundary layer resistance to water vapour, inverse of $g_{bw}$.

assumptions = {'real': True}
domain = 'real'
latex_name = 'r_{bw}'
name = 'r_bw'
unit = second/meter
class essm.variables.leaf.energy_water.r_sw

Bases: essm.variables._core.Variable

Stomatal resistance to water vapour, inverse of $g_{sw}$.

assumptions = {'real': True}
domain = 'real'
latex_name = 'r_{sw}'
name = 'r_sw'
unit = second/meter
class essm.variables.leaf.energy_water.r_tw

Bases: essm.variables._core.Variable

Total leaf resistance to water vapour, $r_{bv} + r_{sv}$.

assumptions = {'real': True}
domain = 'real'
latex_name = 'r_{tw}'
name = 'r_tw'
unit = second/meter
class essm.variables.leaf.energy_water.rho_al

Bases: essm.variables._core.Variable

Density of air at the leaf surface.

assumptions = {'real': True}
domain = 'real'
latex_name = '\\rho_{al}'
name = 'rho_al'
unit = kilogram/meter**3
class essm.variables.leaf.energy_water.R_la

Bases: essm.variables._core.Variable

Longwave radiation absorbed by leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_{la}'
name = 'R_la'
unit = watt/meter**2
class essm.variables.leaf.energy_water.R_ll

Bases: essm.variables._core.Variable

Longwave radiation away from leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_{ll}'
name = 'R_ll'
unit = watt/meter**2
class essm.variables.leaf.energy_water.R_ld

Bases: essm.variables._core.Variable

Downwards emitted/reflected global radiation from leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_{ld}'
name = 'R_ld'
unit = watt/meter**2
class essm.variables.leaf.energy_water.R_lu

Bases: essm.variables._core.Variable

Upwards emitted/reflected global radiation from leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_{lu}'
name = 'R_lu'
unit = watt/meter**2
class essm.variables.leaf.energy_water.T_l

Bases: essm.variables._core.Variable

Leaf temperature.

assumptions = {'real': True}
domain = 'real'
latex_name = 'T_l'
name = 'T_l'
unit = kelvin
class essm.variables.leaf.energy_water.T_w

Bases: essm.variables._core.Variable

Radiative temperature of objects surrounding the leaf.

assumptions = {'real': True}
domain = 'real'
latex_name = 'T_w'
name = 'T_w'
unit = kelvin

Physics

General and atmospheric thermodynamics variables.

class essm.variables.physics.thermodynamics.alpha_a

Bases: essm.variables._core.Variable

Thermal diffusivity of dry air.

assumptions = {'real': True}
domain = 'real'
latex_name = '\\alpha_a'
name = 'alpha_a'
unit = meter**2/second
class essm.variables.physics.thermodynamics.c_pa

Bases: essm.variables._core.Variable

Specific heat of dry air.

assumptions = {'real': True}
default = 1010.0
domain = 'real'
latex_name = 'c_{pa}'
name = 'c_pa'
unit = joule/(kelvin*kilogram)
class essm.variables.physics.thermodynamics.c_pamol

Bases: essm.variables._core.Variable

Molar specific heat of dry air.

https://en.wikipedia.org/wiki/Heat_capacity#Specific_heat_capacity

assumptions = {'real': True}
default = 29.19
domain = 'real'
latex_name = 'c_{pa,mol}'
name = 'c_pamol'
unit = joule/(kelvin*mole)
class essm.variables.physics.thermodynamics.c_pv

Bases: essm.variables._core.Variable

Specific heat of water vapour at 300 K.

http://www.engineeringtoolbox.com/water-vapor-d_979.html

assumptions = {'real': True}
default = 1864
domain = 'real'
latex_name = 'c_{pv}'
name = 'c_pv'
unit = joule/(kelvin*kilogram)
class essm.variables.physics.thermodynamics.C_wa

Bases: essm.variables._core.Variable

Concentration of water in air.

assumptions = {'real': True}
domain = 'real'
latex_name = 'C_{wa}'
name = 'C_wa'
unit = mole/meter**3
class essm.variables.physics.thermodynamics.D_va

Bases: essm.variables._core.Variable

Binary diffusion coefficient of water vapour in air.

assumptions = {'real': True}
domain = 'real'
latex_name = 'D_{va}'
name = 'D_va'
unit = meter**2/second
class essm.variables.physics.thermodynamics.g

Bases: essm.variables._core.Variable

Gravitational acceleration.

assumptions = {'real': True}
default = 9.81
domain = 'real'
latex_name = 'g'
name = 'g'
unit = meter/second**2
class essm.variables.physics.thermodynamics.Gr

Bases: essm.variables._core.Variable

Grashof number.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Gr_L}'
name = 'Gr'
unit = 1
class essm.variables.physics.thermodynamics.h_c

Bases: essm.variables._core.Variable

Average 1-sided convective heat transfer coefficient.

assumptions = {'real': True}
domain = 'real'
latex_name = 'h_c'
name = 'h_c'
unit = joule/(kelvin*meter**2*second)
class essm.variables.physics.thermodynamics.k_a

Bases: essm.variables._core.Variable

Thermal conductivity of dry air.

assumptions = {'real': True}
domain = 'real'
latex_name = 'k_a'
name = 'k_a'
unit = joule/(kelvin*meter*second)
class essm.variables.physics.thermodynamics.lambda_E

Bases: essm.variables._core.Variable

Latent heat of evaporation.

assumptions = {'real': True}
default = 2450000.0
domain = 'real'
latex_name = '\\lambda_E'
name = 'lambda_E'
unit = joule/kilogram
class essm.variables.physics.thermodynamics.Le

Bases: essm.variables._core.Variable

Lewis number.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Le}'
name = 'Le'
unit = 1
class essm.variables.physics.thermodynamics.M_air

Bases: essm.variables._core.Variable

Molar mass of air.

http://www.engineeringtoolbox.com/molecular-mass-air-d_679.html

assumptions = {'real': True}
default = 0.02897
domain = 'real'
latex_name = 'M_{air}'
name = 'M_air'
unit = kilogram/mole
class essm.variables.physics.thermodynamics.M_N2

Bases: essm.variables._core.Variable

Molar mass of nitrogen.

assumptions = {'real': True}
default = 0.028
domain = 'real'
latex_name = 'M_{N_2}'
name = 'M_N2'
unit = kilogram/mole
class essm.variables.physics.thermodynamics.M_O2

Bases: essm.variables._core.Variable

Molar mass of oxygen.

assumptions = {'real': True}
default = 0.032
domain = 'real'
latex_name = 'M_{O_2}'
name = 'M_O2'
unit = kilogram/mole
class essm.variables.physics.thermodynamics.M_w

Bases: essm.variables._core.Variable

Molar mass of water.

assumptions = {'real': True}
default = 0.018
domain = 'real'
latex_name = 'M_w'
name = 'M_w'
unit = kilogram/mole
class essm.variables.physics.thermodynamics.nu_a

Bases: essm.variables._core.Variable

Kinematic viscosity of dry air.

assumptions = {'real': True}
domain = 'real'
latex_name = '\\nu_a'
name = 'nu_a'
unit = meter**2/second
class essm.variables.physics.thermodynamics.Nu

Bases: essm.variables._core.Variable

Average Nusselt number over given length.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Nu_L}'
name = 'Nu'
unit = 1
class essm.variables.physics.thermodynamics.P_a

Bases: essm.variables._core.Variable

Air pressure.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_a'
name = 'P_a'
unit = pascal
class essm.variables.physics.thermodynamics.Pr

Bases: essm.variables._core.Variable

Prandtl number (0.71 for air).

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Pr}'
name = 'Pr'
unit = 1
class essm.variables.physics.thermodynamics.P_N2

Bases: essm.variables._core.Variable

Partial pressure of nitrogen.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_{N2}'
name = 'P_N2'
unit = pascal
class essm.variables.physics.thermodynamics.P_O2

Bases: essm.variables._core.Variable

Partial pressure of oxygen.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_{O2}'
name = 'P_O2'
unit = pascal
class essm.variables.physics.thermodynamics.P_wa

Bases: essm.variables._core.Variable

Water vapour pressure in the atmosphere.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_{wa}'
name = 'P_wa'
unit = pascal
class essm.variables.physics.thermodynamics.P_was

Bases: essm.variables._core.Variable

Saturation water vapour pressure at air temperature.

assumptions = {'real': True}
domain = 'real'
latex_name = 'P_{was}'
name = 'P_was'
unit = pascal
class essm.variables.physics.thermodynamics.R_d

Bases: essm.variables._core.Variable

Downwelling global radiation.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_d'
name = 'R_d'
unit = watt/meter**2
class essm.variables.physics.thermodynamics.Re_c

Bases: essm.variables._core.Variable

Critical Reynolds number for the onset of turbulence.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Re_c}'
name = 'Re_c'
unit = 1
class essm.variables.physics.thermodynamics.Re

Bases: essm.variables._core.Variable

Average Reynolds number over given length.

assumptions = {'real': True}
domain = 'real'
latex_name = 'N_{Re_L}'
name = 'Re'
unit = 1
class essm.variables.physics.thermodynamics.rho_a

Bases: essm.variables._core.Variable

Density of dry air.

assumptions = {'real': True}
domain = 'real'
latex_name = '\\rho_a'
name = 'rho_a'
unit = kilogram/meter**3
class essm.variables.physics.thermodynamics.R_u

Bases: essm.variables._core.Variable

Upwelling global radiation.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_u'
name = 'R_u'
unit = watt/meter**2
class essm.variables.physics.thermodynamics.R_mol

Bases: essm.variables._core.Variable

Molar gas constant.

assumptions = {'real': True}
default = 8.314472
domain = 'real'
latex_name = 'R_{mol}'
name = 'R_mol'
unit = joule/(kelvin*mole)
class essm.variables.physics.thermodynamics.R_s

Bases: essm.variables._core.Variable

Solar shortwave flux per area.

assumptions = {'real': True}
domain = 'real'
latex_name = 'R_s'
name = 'R_s'
unit = joule/(meter**2*second)
class essm.variables.physics.thermodynamics.sigm

Bases: essm.variables._core.Variable

Stefan-Boltzmann constant.

assumptions = {'real': True}
default = 5.67e-08
domain = 'real'
latex_name = '\\sigma'
name = 'sigm'
unit = joule/(kelvin**4*meter**2*second)
class essm.variables.physics.thermodynamics.T0

Bases: essm.variables._core.Variable

Freezing point in Kelvin.

assumptions = {'real': True}
default = 273.15
domain = 'real'
latex_name = 'T_0'
name = 'T0'
unit = kelvin
class essm.variables.physics.thermodynamics.T_a

Bases: essm.variables._core.Variable

Air temperature.

assumptions = {'real': True}
domain = 'real'
latex_name = 'T_a'
name = 'T_a'
unit = kelvin
class essm.variables.physics.thermodynamics.v_w

Bases: essm.variables._core.Variable

Wind velocity.

assumptions = {'real': True}
domain = 'real'
latex_name = 'v_w'
name = 'v_w'
unit = meter/second
class essm.variables.physics.thermodynamics.x_N2

Bases: essm.variables._core.Variable

Mole fraction of nitrogen in dry air.

assumptions = {'real': True}
default = 0.79
domain = 'real'
latex_name = 'x_{N2}'
name = 'x_N2'
unit = 1
class essm.variables.physics.thermodynamics.x_O2

Bases: essm.variables._core.Variable

Mole fraction of oxygen in dry air.

assumptions = {'real': True}
default = 0.21
domain = 'real'
latex_name = 'x_{O2}'
name = 'x_O2'
unit = 1

Units

Define unit symbols.

essm.variables.units.derive_baseunit(expr, name=None)[source]

Derive SI base unit from an expression, omitting scale factors.

essm.variables.units.derive_unit(expr, name=None)[source]

Derive SI unit from an expression, omitting scale factors.

essm.variables.units.markdown(unit)[source]

Return markdown representation of a unit.

Equations

Equations module to deal with physical equations.

It allows attaching docstrings to equation names (including references) and defining internal variables.

Creating equations

To create custom equations, first import Equation and variables needed:

>>> from essm.equations import Equation
>>> from essm.variables.physics.thermodynamics import *

Importing pre-defined equations

You can import pre-defined equations as e.g.:

>>> from essm.equations.physics.thermodynamics import *

Leaf

Equations related to leaf energy and water balance.

Energy Water

Leaf energy and water balance equations.

class essm.equations.leaf.energy_water.eq_Rs_enbal

Bases: essm.equations._core.Equation

Calculate R_s from energy balance.

(Eq. 1 in [SO17])

expr = Eq(R_s, E_l + H_l + R_ll)
name = 'eq_Rs_enbal'
class essm.equations.leaf.energy_water.eq_Rll

Bases: essm.equations._core.Equation

R_ll as function of T_l and T_w.

(Eq. 2 in [SO17])

expr = Eq(R_ll, a_sh*epsilon_l*sigm*(T_l**4 - T_w**4))
name = 'eq_Rll'
class essm.equations.leaf.energy_water.eq_Hl

Bases: essm.equations._core.Equation

H_l as function of T_l.

(Eq. 3 in [SO17])

expr = Eq(H_l, a_sh*h_c*(-T_a + T_l))
name = 'eq_Hl'
class essm.equations.leaf.energy_water.eq_El

Bases: essm.equations._core.Equation

E_l as function of E_lmol.

(Eq. 4 in [SO17])

expr = Eq(E_l, E_lmol*M_w*lambda_E)
name = 'eq_El'
class essm.equations.leaf.energy_water.eq_Elmol

Bases: essm.equations._core.Equation

E_lmol as functino of g_tw and C_wl.

(Eq. 5 in [SO17])

expr = Eq(E_lmol, g_tw*(-C_wa + C_wl))
name = 'eq_Elmol'
class essm.equations.leaf.energy_water.eq_gtw

Bases: essm.equations._core.Equation

g_tw from g_sw and g_bw.

(Eq. 6 in [SO17])

expr = Eq(g_tw, 1/(1/g_sw + 1/g_bw))
name = 'eq_gtw'
class essm.equations.leaf.energy_water.eq_gbw_hc

Bases: essm.equations._core.Equation

g_bw as function of h_c.

(Eq. B2 in [SO17])

expr = Eq(g_bw, a_s*h_c/(Le**(2/3)*c_pa*rho_a))
name = 'eq_gbw_hc'
class essm.equations.leaf.energy_water.eq_Cwl

Bases: essm.equations._core.Equation

C_wl as function of P_wl and T_l.

(Eq. B4 in [SO17])

expr = Eq(C_wl, P_wl/(R_mol*T_l))
name = 'eq_Cwl'
class essm.equations.leaf.energy_water.eq_Pwl

Bases: essm.equations._core.Equation

Clausius-Clapeyron P_wl as function of T_l.

(Eq. B3 in [Har94])

expr = Eq(P_wl, p_CC1*exp(-M_w*lambda_E*(-1/p_CC2 + 1/T_l)/R_mol))
name = 'eq_Pwl'
p_CC1 = p_CC1
p_CC2 = p_CC2
class essm.equations.leaf.energy_water.eq_Elmol_conv

Bases: essm.equations._core.Equation

E_lmol as function of g_twmol and P_wl.

(Eq. B6 in [SO17])

expr = Eq(E_lmol, g_twmol*(-P_wa + P_wl)/P_a)
name = 'eq_Elmol_conv'
class essm.equations.leaf.energy_water.eq_gtwmol_gtw

Bases: essm.equations.leaf.energy_water.eq_Elmol, essm.equations.leaf.energy_water.eq_Cwl, essm.equations.leaf.energy_water.eq_Elmol_conv

g_twmol as a function of g_tw.

It uses eq_Elmol, eq_Cwl and eq_Elmol_conv.

expr = Eq(g_twmol, g_tw*(P_a*P_wa*T_l - P_a*P_wl*T_a)/(R_mol*T_a*T_l*(P_wa - P_wl)))
name = 'eq_gtwmol_gtw'
class essm.equations.leaf.energy_water.eq_gtwmol_gtw_iso

Bases: essm.equations.leaf.energy_water.eq_gtwmol_gtw

g_twmol as a function of g_tw at isothermal conditions.

expr = Eq(g_twmol, P_a*g_tw/(R_mol*T_a))
name = 'eq_gtwmol_gtw_iso'
class essm.equations.leaf.energy_water.eq_hc

Bases: essm.equations._core.Equation

h_c as a function of Nu and L_l.

(Eq. B10 in [SO17])

expr = Eq(h_c, Nu*k_a/L_l)
name = 'eq_hc'
class essm.equations.leaf.energy_water.eq_Re

Bases: essm.equations._core.Equation

Re as a function of v_w and L_l.

(Eq. B11 in [SO17])

expr = Eq(Re, L_l*v_w/nu_a)
name = 'eq_Re'
class essm.equations.leaf.energy_water.eq_Gr

Bases: essm.equations._core.Equation

Gr as function of air density within and outside of leaf.

(Eq. B12 in [SO17])

expr = Eq(Gr, L_l**3*g*(rho_a - rho_al)/(nu_a**2*rho_al))
name = 'eq_Gr'

Physics

General and atmospheric thermodynamics equations.

class essm.equations.physics.thermodynamics.eq_Le

Bases: essm.equations._core.Equation

Le as function of alpha_a and D_va.

(Eq. B3 in [SO17])

expr = Eq(Le, alpha_a/D_va)
name = 'eq_Le'
class essm.equations.physics.thermodynamics.eq_Cwa

Bases: essm.equations._core.Equation

C_wa as a function of P_wa and T_a.

(Eq. B9 in [SO17])

expr = Eq(C_wa, P_wa/(R_mol*T_a))
name = 'eq_Cwa'
class essm.equations.physics.thermodynamics.eq_Nu_forced_all

Bases: essm.equations._core.Equation

Nu as function of Re and Re_c under forced conditions.

(Eqs. B13–B15 in [SO17])

expr = Eq(Nu, -Pr**(1/3)*(-37*Re**(4/5) + 37*(Re + Re_c - Abs(Re - Re_c)/2)**(4/5) - 664*sqrt(Re + Re_c - Abs(Re - Re_c)/2))/1000)
name = 'eq_Nu_forced_all'
class essm.equations.physics.thermodynamics.eq_Dva

Bases: essm.equations._core.Equation

D_va as a function of air temperature.

(Table A.3 in [MU07])

expr = Eq(D_va, T_a*p_Dva1 - p_Dva2)
name = 'eq_Dva'
p_Dva1 = p_Dva1
p_Dva2 = p_Dva2
class essm.equations.physics.thermodynamics.eq_alphaa

Bases: essm.equations._core.Equation

alpha_a as a function of air temperature.

(Table A.3 in [MU07])

expr = Eq(alpha_a, T_a*p_alpha1 - p_alpha2)
name = 'eq_alphaa'
p_alpha1 = p_alpha1
p_alpha2 = p_alpha2
class essm.equations.physics.thermodynamics.eq_ka

Bases: essm.equations._core.Equation

k_a as a function of air temperature.

(Table A.3 in [MU07])

expr = Eq(k_a, T_a*p_ka1 + p_ka2)
name = 'eq_ka'
p_ka1 = p_ka1
p_ka2 = p_ka2
class essm.equations.physics.thermodynamics.eq_nua

Bases: essm.equations._core.Equation

nu_a as a function of air temperature.

(Table A.3 in [MU07])

expr = Eq(nu_a, T_a*p_nua1 - p_nua2)
name = 'eq_nua'
p_nua1 = p_nua1
p_nua2 = p_nua2
class essm.equations.physics.thermodynamics.eq_rhoa_Pwa_Ta

Bases: essm.equations._core.Equation

rho_a as a function of P_wa and T_a.

(Eq. B20 in [SO17])

expr = Eq(rho_a, (M_N2*P_N2 + M_O2*P_O2 + M_w*P_wa)/(R_mol*T_a))
name = 'eq_rhoa_Pwa_Ta'
class essm.equations.physics.thermodynamics.eq_Pa

Bases: essm.equations._core.Equation

Calculate air pressure.

From partial pressures of N2, O2 and H2O, following Dalton’s law of partial pressures.

expr = Eq(P_a, P_N2 + P_O2 + P_wa)
name = 'eq_Pa'
class essm.equations.physics.thermodynamics.eq_PN2_PO2

Bases: essm.equations._core.Equation

Calculate P_N2 as a function of P_O2.

It follows Dalton’s law of partial pressures.

expr = Eq(P_N2, P_O2*x_N2/x_O2)
name = 'eq_PN2_PO2'
class essm.equations.physics.thermodynamics.eq_PO2

Bases: essm.equations.physics.thermodynamics.eq_Pa, essm.equations.physics.thermodynamics.eq_PN2_PO2

Calculate P_O2 as a function of P_a, P_N2 and P_wa.

expr = Eq(P_O2, (P_a*x_O2 - P_wa*x_O2)/(x_N2 + x_O2))
name = 'eq_PO2'
class essm.equations.physics.thermodynamics.eq_PN2

Bases: essm.equations.physics.thermodynamics.eq_Pa, essm.equations.physics.thermodynamics.eq_PN2_PO2

Calculate P_N2 as a function of P_a, P_O2 and P_wa.

expr = Eq(P_N2, (P_a*x_N2 - P_wa*x_N2)/(x_N2 + x_O2))
name = 'eq_PN2'
class essm.equations.physics.thermodynamics.eq_rhoa

Bases: essm.equations.physics.thermodynamics.eq_rhoa_Pwa_Ta, essm.equations.physics.thermodynamics.eq_PN2, essm.equations.physics.thermodynamics.eq_PO2

Calculate rho_a from T_a, P_a and P_wa.

expr = Eq(rho_a, (x_N2*(M_N2*P_a - P_wa*(M_N2 - M_w)) + x_O2*(M_O2*P_a - P_wa*(M_O2 - M_w)))/(R_mol*T_a*x_N2 + R_mol*T_a*x_O2))
name = 'eq_rhoa'

Internals

Core variable type.

class essm.variables._core.Variable[source]

Bases: object

Base type for all physical variables.

static check_unit(expr)[source]

Check if base dimensions of expression are consistent.

Checks for dimension mismatches of the addends, thus preventing expressions like meter + second to be created.

static collect_factor_and_basedimension(expr)[source]

Return tuple with factor expression and dimension expression.

static get_dimensional_expr(expr)[source]

Return dimensions of expression.

Core equation type. Contains class definitions related to equations.

class essm.equations._core.Equation[source]

Bases: object

Base type for all equations.

classmethod args()[source]

Return equation arguments from registry if exist.

class essm.equations._core.EquationMeta[source]

Bases: essm.bases.RegistryType

Equation interface.

Defines an equation with a docstring and internal variables, if needed.

Example:

from ..variables.units import meter, second
class test(Equation):
    '''Test equation.'''

    class d(Variable):
        '''Internal variable.'''
        unit = meter

    class t(Variable):
        '''Internal variable.'''
        unit = second

    class v(Variable):
        '''Internal variable.'''
        unit = meter/second

    expr = v == d / t
Raises:ValueError – if the units are inconsistent.

Example:

from ..variables.units import meter, second
class test(Equation):
    '''Test equation with inconsistent units.'''

    class d(Variable):
        '''Internal variable.'''
        unit = meter

    class t(Variable):
        '''Internal variable.'''
        unit = second

    class v(Variable):
        '''Internal variable.'''
        unit = meter/second

    expr = v == d * t

Since the units of v and d*t are not the same, this returns:

ValueError: Invalid expression units: meter/second == meter*second

Build and register new variable.