pycontrails.models.sac

Schmidt-Appleman criteria (SAC).

Functions

T_critical_sac(T_LM, relative_humidity, G[, ...])

Estimate temperature threshold for persistent contrail formation.

T_sat_liquid(G)

Calculate temperature at which liquid saturation curve has slope G.

T_sat_liquid_high_accuracy(G[, maxiter])

Calculate temperature at which liquid saturation curve has slope G.

rh_critical_sac(air_temperature, T_sat_liquid, G)

Calculate critical relative humidity threshold of contrail formation.

sac(rh, rh_crit_sac)

Points at which the Schmidt-Appleman Criteria is satisfied.

slope_mixing_line(specific_humidity, ...)

Calculate the slope of the mixing line in a temperature-humidity diagram.

Classes

SAC([met, params])

Determine points where Schmidt-Appleman Criteria is satisfied.

SACParams([copy_source, ...])

Parameters for SAC.

class pycontrails.models.sac.SAC(met=None, params=None, **params_kwargs)

Bases: Model

Determine points where Schmidt-Appleman Criteria is satisfied.

Parameters:
  • met (MetDataset) – Dataset containing “air_temperature”, “specific_humidity” variables.

  • params (dict[str, Any], optional) – Override SACParams with dictionary.

  • **params_kwargs – Override SACParams with keyword arguments.

default_params

alias of SACParams

eval(source=None, **params)

Evaluate the Schmidt-Appleman criteria along flight trajectory or on meteorology grid.

Changed in version 0.27.0: Humidity scaling now handled automatically. This is controlled by model parameter humidity_scaling.

Changed in version 0.48.0: If the source is a MetDataset, the returned object will also be a MetDataset. Previous the “sac” MetDataArray was returned.

Parameters:
  • source (GeoVectorDataset | Flight | MetDataset | None, optional) – Input GeoVectorDataset or Flight. If None, evaluates at the met grid points.

  • **params (Any) – Overwrite model parameters before eval

Returns:

GeoVectorDataset | Flight | MetDataset – Returns 1 where SAC is satisfied, 0 everywhere else. Returns np.nan if interpolating outside meteorology grid.

long_name = 'Schmidt-Appleman contrail formation criteria'
met

Meteorology data

met_variables = (MetVariable(short_name='t', standard_name='air_temperature', long_name='Air Temperature', level_type='isobaricInhPa', ecmwf_id=130, grib1_id=11, grib2_id=(0, 0, 0), units='K', amip='ta', description='Air temperature is the bulk temperature of the air, not the surface (skin) temperature.'), MetVariable(short_name='q', standard_name='specific_humidity', long_name='Specific Humidity', level_type='isobaricInhPa', ecmwf_id=133, grib1_id=51, grib2_id=(0, 1, 0), units='kg kg**-1', amip='hus', description='Specific means per unit mass. Specific humidity is the mass fraction of water vapor in (moist) air.'))

Required meteorology pressure level variables. Each element in the list is a MetVariable or a tuple[MetVariable]. If element is a tuple[MetVariable], the variable depends on the data source. Only one variable in the tuple is required.

name = 'sac'
params

Instantiated model parameters, in dictionary form

source

Data evaluated in model

class pycontrails.models.sac.SACParams(copy_source=True, interpolation_method='linear', interpolation_bounds_error=False, interpolation_fill_value=nan, interpolation_localize=False, interpolation_use_indices=False, interpolation_q_method=None, verify_met=True, downselect_met=True, met_longitude_buffer=(0.0, 0.0), met_latitude_buffer=(0.0, 0.0), met_level_buffer=(0.0, 0.0), met_time_buffer=(np.timedelta64(0, 'h'), np.timedelta64(0, 'h')), engine_efficiency=0.3, fuel=<factory>, humidity_scaling=None)

Bases: ModelParams

Parameters for SAC.

engine_efficiency = 0.3

Jet engine efficiency, [\(0 - 1\)]

fuel

Fuel type. Overridden by Fuel provided on input source attributes

humidity_scaling = None

Humidity scaling

pycontrails.models.sac.T_critical_sac(T_LM, relative_humidity, G, maxiter=10)

Estimate temperature threshold for persistent contrail formation.

This quantity is defined as T_LC in Schumann (see reference below). Equation (11) of this paper implicitly defines T_LC as the solution to the equation

T_LC = T_LM - (e_L(T_LM) - rh * e_L(T_LC)) / G

For relative humidity above 0.999, the corresponding entry from T_LM is returned (page 10, top of the right-hand column). Otherwise, the solution to the equation above is approximated via Newton’s method.

Parameters:
Returns:

ArrayLike – Critical temperature threshold values.

References

pycontrails.models.sac.T_sat_liquid(G)

Calculate temperature at which liquid saturation curve has slope G.

Parameters:

G (ArrayLike) – Slope of the mixing line in a temperature-humidity diagram.

Returns:

ArrayLike – Maximum threshold temperature for 100% relative humidity with respect to liquid, [\(K\)]. This can also be interpreted as the temperature at which the liquid saturation curve has slope G.

References

Notes

Defined (using notation T_LM) in [Schumann, 1996] in the first full paragraph on page 10 as

for T = T_LC, the mixing line just touches [is tangent to] the saturation curve. See equation (10).

The formula used here is taken from equation (31).

pycontrails.models.sac.T_sat_liquid_high_accuracy(G, maxiter=5)

Calculate temperature at which liquid saturation curve has slope G.

The function T_sat_liquid() gives a first order approximation to equation (10) of the Schumann paper referenced below. This function uses Newton’s method to compute the numeric solution to (10).

Parameters:
  • G (ArrayLike) – Slope of the mixing line

  • maxiter (int, optional) – Passed into scipy.optimize.newton(). Because T_sat_liquid is already fairly accurate, few iterations are needed for Newton’s method to converge. By default, 5.

Returns:

ArrayLike – Maximum threshold temperature for 100% relative humidity with respect to liquid, [\(K\)].

References

See also

T_sat_liquid_high()

pycontrails.models.sac.rh_critical_sac(air_temperature, T_sat_liquid, G)

Calculate critical relative humidity threshold of contrail formation.

Parameters:
  • air_temperature (ArrayLike) – A sequence or array of temperature values, [\(K\)]

  • T_sat_liquid (ArrayLike) – Maximum threshold temperature for 100% relative humidity with respect to liquid, [\(K\)]

  • G (ArrayLike) – Slope of the mixing line in a temperature-humidity diagram.

Returns:

ArrayLike – Critical relative humidity of contrail formation, [\([0 - 1]\)]

References

pycontrails.models.sac.sac(rh, rh_crit_sac)

Points at which the Schmidt-Appleman Criteria is satisfied.

Parameters of type ArrayLike must have compatible shapes.

Parameters:
  • rh (ArrayLike) – Relative humidity values

  • rh_crit_sac (ArrayLike) – Critical relative humidity threshold of contrail formation

Returns:

ArrayLike – SAC state of each point indexed by the ArrayLike parameters. Returned array has floating dtype with values

  • 0.0 signifying SAC fails

  • 1.0 signifying SAC holds

NaN entries of parameters propagate into the returned array.

pycontrails.models.sac.slope_mixing_line(specific_humidity, air_pressure, engine_efficiency, ei_h2o, q_fuel)

Calculate the slope of the mixing line in a temperature-humidity diagram.

This quantity is often notated with G in the literature.

Parameters:
  • specific_humidity (ArrayLike) – A sequence or array of specific humidity values, [\(kg_{H_{2}O} \ kg_{air}\)]

  • air_pressure (ArrayLike) – A sequence or array of atmospheric pressure values, [\(Pa\)].

  • engine_efficiency (float | ArrayLike) – Engine efficiency, [\(0 - 1\)]

  • ei_h2o (float) – Emission index of water vapor, [\(kg \ kg^{-1}\)]

  • q_fuel (float) – Specific combustion heat of fuel combustion, [\(J \ kg^{-1} \ K^{-1}\)]

Returns:

ArrayLike – Slope of the mixing line in a temperature-humidity diagram, [\(Pa \ K^{-1}\)]