atmos.calculate() takes input variables (like pressure, virtual temperature, water vapor mixing ratio, etc.) and information about what assumptions you’re willing to make (hydrostatic? low water vapor? ignore virtual temperature correction? use an empirical formula for equivalent potential temperature?), and from that calculates any desired output variables that you request and can be calculated.
This function is essentially a wrapper for atmos.FluidSolver, so much or all of its functionality will be the same, and the documentation for the two is very similar.
Anything that can be calculated by equations in atmos.equations. If you find that calculate() can’t do a calculation you might expect it to, check the equations it has available and make sure you’re using the right variables, or enabling the right assumptions. A common problem is using T instead of Tv and expecting the ideal gas law to work.
By default, a certain set of assumptions are used, such as that we are considering an ideal gas, and so can use ideal gas law. This allows us to do simple calculations that use the default assumptions. For example, to calculate pressure from virtual temperature and density:
>>> import atmos
>>> atmos.calculate('p', Tv=273., rho=1.27)
99519.638400000011
Or to calculate relative humidity from water vapor mixing ratio and saturation water vapor mixing ratio (which needs no assumptions):
>>> import atmos
>>> atmos.calculate('RH', rv=0.001, rvs=0.002)
50.0
For a full list of default assumptions, see atmos.calculate().
By default, SI units are assumed. These can be overridden with keyword arguments of the form {quantity name}_unit or {quantity name}_units. Specifying units makes it so that both inputs and outputs of the quantity will be in the specified units.
To get pressure in hPa:
>>> import atmos
>>> atmos.calculate('p', p_units='hPa', Tv=273., rho=1.27)
995.19638400000008
To specify mixing ratio in g/kg:
>>> import atmos
>>> atmos.calculate('RH', rv=1, rvs=0.002, rv_unit='g/kg')
50.0
Note that either “_unit” or “_units” can be used, and that units must be specified for each quantity independently.
Unit names are the same as in the Pint package, with the exception that relative humidity can have units of “percent” or “fraction”. Remember that C in Pint is Coulombs, while degC is degrees Celsius.
Calculating pressure from virtual temperature and density, also returning a list of functions used:
>>> import atmos
>>> p, funcs = atmos.calculate('p', Tv=273., rho=1.27, debug=True)
>>> funcs
(<function atmos.equations.p_from_rho_Tv_ideal_gas>,)
If you want to use assumptions that are not enabled by default (such as ignoring the virtual temperature correction), you can use the add_assumptions keyword argument, which takes a tuple of strings specifying assumptions. The exact string to enter for each assumption is detailed in atmos.calculate(). For example, to calculate T instead of Tv, neglecting the virtual temperature correction:
>>> import atmos
>>> atmos.calculate('p', T=273., rho=1.27, add_assumptions=('Tv equals T',))
99519.638400000011
If you want to ignore the default assumptions entirely, you could specify your own assumptions:
>>> import atmos
>>> assumptions = ('ideal gas', 'bolton')
>>> atmos.calculate('p', Tv=273., rho=1.27, assumptions=assumptions)
99519.638400000011
If you are repeatedly calculating different quantities, you may want to use a dictionary to more easily pass in quantities as keyword arguments. Adding ** to the beginning of a dictionary variable as an argument passes in each of the (key, value) pairs in that dictionary as a separate keyword argument. For example:
>>> import atmos
>>> data = {'Tv': 273., 'rho': 1.27}
>>> data['p'] = atmos.calculate('p', **data)
>>> data['p']
99519.638400000011
Calculates and returns a requested quantity from quantities passed in as keyword arguments.
Parameters: |
|
---|---|
Returns: | quantity – Calculated quantity. Return type is the same as quantity parameter types. If multiple quantities are requested, returns a tuple containing the quantities. |
Return type: | ndarray |
Notes
Calculating multiple quantities at once can avoid re-computing intermediate quantities, but requires more memory.
Quantity kwargs
In addition to the quantities above, kwargs of the form <quantity>_unit or <quantity>_units can be used with a string specifying a unit for the quantity. This will cause input data for that quantity to be assumed to be in that unit, and output data for that quantity to be given in that unit. Note this must be specified separately for each quantity. Acceptable units are the units available in the Pint package, with the exception that RH can be in units of “fraction” or “percent”.
Assumptions
Default assumptions are ‘ideal gas’, ‘hydrostatic’, ‘constant g’, ‘constant Lv’, ‘constant Cp’, ‘no liquid water’, ‘no ice’, ‘bolton’, ‘cimo’.
Assumption descriptions
Examples
Calculating pressure from virtual temperature and density:
>>> calculate('p', Tv=273., rho=1.27)
99519.638400000011
Same calculation, but also returning a list of functions used:
>>> p, funcs = calculate('p', Tv=273., rho=1.27, debug=True)
>>> funcs
(<function atmos.equations.p_from_rho_Tv_ideal_gas>,)
Same calculation with temperature instead, ignoring virtual temperature correction:
>>> calculate('p', T=273., rho=1.27, add_assumptions=('Tv equals T',))
99519.638400000011