pycontrails.models.issr

Ice super-saturated regions (ISSR).

Functions

issr(air_temperature[, specific_humidity, ...])

Calculate ice super-saturated regions.

Classes

ISSR([met, params])

Ice super-saturated regions over a Flight trajectory or MetDataset grid.

ISSRParams([copy_source, ...])

Default ISSR model parameters.

class pycontrails.models.issr.ISSR(met=None, params=None, **params_kwargs)

Bases: Model

Ice super-saturated regions over a Flight trajectory or MetDataset grid.

This model calculates points where the relative humidity over ice is greater than 1.

Parameters:

met (MetDataset) – Dataset containing “air_temperature” and “specific_humidity” variables

Examples

>>> from datetime import datetime
>>> from pycontrails.datalib.ecmwf import ERA5
>>> from pycontrails.models.issr import ISSR
>>> from pycontrails.models.humidity_scaling import ConstantHumidityScaling
>>> # Get met data
>>> time = datetime(2022, 3, 1, 0), datetime(2022, 3, 1, 2)
>>> variables = ["air_temperature", "specific_humidity"]
>>> pressure_levels = [200, 250, 300]
>>> era5 = ERA5(time, variables, pressure_levels)
>>> met = era5.open_metdataset()
>>> # Instantiate and run model
>>> scaling = ConstantHumidityScaling(rhi_adj=0.98)
>>> model = ISSR(met, humidity_scaling=scaling)
>>> out1 = model.eval()
>>> issr1 = out1["issr"]
>>> issr1.proportion  # Get proportion of values with ice supersaturation
0.114...
>>> # Run with a lower threshold
>>> out2 = model.eval(rhi_threshold=0.95)
>>> issr2 = out2["issr"]
>>> issr2.proportion
0.146...
default_params

alias of ISSRParams

downselect_met()

Downselect met domain to the max/min bounds of source.

Override this method if special handling is needed in met down-selection.

  • source must be defined before calling downselect_met().

  • This method copies and re-assigns met using met.copy() to avoid side-effects.

Raises:
eval(source=None, **params)

Evaluate ice super-saturated regions 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 “issr” 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 in ISSR, 0 everywhere else. Returns np.nan if interpolating outside meteorology grid.

Raises:

NotImplementedError – Raises if input source is not supported.

get_source_param(key, default=<object object>, *, set_attr=True)

Get source data with default set by parameter key.

Retrieves data with the following hierarchy:

  1. source.data[key]. Returns np.ndarray | xr.DataArray.

  2. source.attrs[key]

  3. params[key]

  4. default

In case 3., the value of params[key] is attached to source.attrs[key].

Parameters:
  • key (str) – Key to retrieve

  • default (Any, optional) – Default value if key is not found.

  • set_attr (bool, optional) – If True (default), set source.attrs[key] to params[key] if found. This allows for better post model evaluation tracking.

Returns:

Any – Value(s) found for key in source data, source attrs, or model params

Raises:

KeyError – Raises KeyError if key is not found in any location and default is not provided.

See also

-

property hash

Generate a unique hash for model instance.

Returns:

str – Unique hash for model instance (sha1)

property interp_kwargs

Shortcut to create interpolation arguments from params.

The output of this is useful for passing to interpolate_met().

Returns:

dict[str, Any] – Dictionary with keys

  • ”method”

  • ”bounds_error”

  • ”fill_value”

  • ”localize”

  • ”use_indices”

  • ”q_method”

as determined by params.

long_name = 'Ice super-saturated regions'
met

Meteorology data

met_required = False

Require meteorology is not None on __init__()

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 = 'issr'
optional_met_variables

Optional meteorology variables

params

Instantiated model parameters, in dictionary form

processed_met_variables

Set of required parameters if processing already complete on met input.

require_met()

Ensure that met is a MetDataset.

Returns:

MetDataset – Returns reference to met. This is helpful for type narrowing met when meteorology is required.

Raises:

ValueError – Raises when met is None.

require_source_type(type_)

Ensure that source is type_.

Returns:

_Source – Returns reference to source. This is helpful for type narrowing source to specific type(s).

Raises:

ValueError – Raises when source is not _type_.

set_source(source=None)

Attach original or copy of input source to source.

Parameters:

source (MetDataset | GeoVectorDataset | Flight | Iterable[Flight] | None) – Parameter source passed in eval(). If None, an empty MetDataset with coordinates like met is set to source.

See also

-

meth:eval

set_source_met(optional=False, variable=None)

Ensure or interpolate each required met_variables on source .

For each variable in met_variables, check source for data variable with the same name.

For GeoVectorDataset sources, try to interpolate met if variable does not exist.

For MetDataset sources, try to get data from met if variable does not exist.

Parameters:
Raises:
source

Data evaluated in model

transfer_met_source_attrs(source=None)

Transfer met source metadata from met to source.

update_params(params=None, **params_kwargs)

Update model parameters on params.

Parameters:
  • params (dict[str, Any], optional) – Model parameters to update, as dictionary. Defaults to {}

  • **params_kwargs (Any) – Override keys in params with keyword arguments.

class pycontrails.models.issr.ISSRParams(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')), rhi_threshold=1.0, humidity_scaling=None)

Bases: ModelParams

Default ISSR model parameters.

as_dict()

Convert object to dictionary.

We use this method instead of dataclasses.asdict to use a shallow/unrecursive copy. This will return values as Any instead of dict.

Returns:

dict[str, Any] – Dictionary version of self.

copy_source = True

Copy input source data on eval

downselect_met = True

Downselect input MetDataset` to region around source.

humidity_scaling = None

Humidity scaling

interpolation_bounds_error = False

If True, points lying outside interpolation will raise an error

interpolation_fill_value = nan

Used for outside interpolation value if interpolation_bounds_error is False

interpolation_localize = False

Experimental. See pycontrails.core.interpolation.

interpolation_method = 'linear'

Interpolation method. Supported methods include “linear”, “nearest”, “slinear”, “cubic”, and “quintic”. See scipy.interpolate.RegularGridInterpolator for the description of each method. Not all methods are supported by all met grids. For example, the “cubic” method requires at least 4 points per dimension.

interpolation_q_method = None

Experimental. Alternative interpolation method to account for specific humidity lapse rate bias. Must be one of None, "cubic-spline", or "log-q-log-p". If None, no special interpolation is used for specific humidity. The "cubic-spline" method applies a custom stretching of the met interpolation table to account for the specific humidity lapse rate bias. The "log-q-log-p" method interpolates in the log of specific humidity and pressure, then converts back to specific humidity. Only used by models calling to interpolate_met().

interpolation_use_indices = False

Experimental. See pycontrails.core.interpolation.

met_latitude_buffer = (0.0, 0.0)

Met latitude buffer for input to Flight.downselect_met(), in WGS84 coordinates. Only applies when downselect_met is True.

met_level_buffer = (0.0, 0.0)

Met level buffer for input to Flight.downselect_met(), in [\(hPa\)]. Only applies when downselect_met is True.

met_longitude_buffer = (0.0, 0.0)

Met longitude buffer for input to Flight.downselect_met(), in WGS84 coordinates. Only applies when downselect_met is True.

met_time_buffer = (np.timedelta64(0,'h'), np.timedelta64(0,'h'))

Met time buffer for input to Flight.downselect_met() Only applies when downselect_met is True.

rhi_threshold = 1.0

RHI Threshold

verify_met = True

Call _verify_met() on model instantiation.

pycontrails.models.issr.issr(air_temperature, specific_humidity=None, air_pressure=None, rhi=None, rhi_threshold=1.0)

Calculate ice super-saturated regions.

Regions where the atmospheric relative humidity over ice is greater than 1.

Parameters air_temperature, specific_humidity, air_pressure, and rhi must have compatible shapes when defined.

Either specific_humidity and air_pressure must both be provided, or rhi must be provided.

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

  • specific_humidity (ArrayLike | None) – A sequence or array of specific humidity values, [\(kg_{H_{2}O} \ kg_{moist air}\)] None by default.

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

  • rhi (ArrayLike | None, optional) – A sequence of array of RHi values, if already known. If not provided, this function will compute RHi from air_temperature, specific_humidity, and air_pressure. None by default.

  • rhi_threshold (float, optional) – Relative humidity over ice threshold for determining ISSR state

Returns:

ArrayLike – ISSR state of each point indexed by the parameters.