pycontrails.models.cocip.radiative_forcing¶
Module for calculating radiative forcing of contrail cirrus.
References
Functions
|
Calculate albedo along contrail waypoint. |
|
Calculate the contrail albedo, |
Calculate radiative properties after accounting for contrail overlapping. |
|
|
Calculate the effective emissivity of the contrail, |
|
Calculate the effective radius |
|
Calculate the effective radius of contrail ice particles assuming a droxtal particle habit. |
|
Calculate the effective radius of ice particles assuming a hollow column particle habit. |
|
Calculate the effective radius of contrail ice particles assuming a sphere particle habit. |
|
Calculate the effective radius of contrail ice particles assuming a plate particle habit. |
|
Calculate the effective radius of contrail ice particles assuming a rosette particle habit. |
|
Calculate the effective radius of ice particles assuming a rough aggregate particle habit. |
|
Calculate the effective radius of contrail ice particles assuming a solid column particle habit. |
|
Calculate the effective radius of contrail ice particles assuming a sphere particle habit. |
|
Calculate the effective optical depth of natural cirrus above the contrail, |
|
Determine regime of ice particle habits based on contrail ice particle volume mean radius. |
|
Assign weights to different ice particle habits for each waypoint. |
|
Calculate the local contrail longwave radiative forcing (\(RF_{LW}\)). |
|
Calculate the local contrail net radiative forcing (rf_net). |
|
Calculate reduction in outgoing longwave radiation (OLR) due to the presence of natural cirrus. |
|
Calculate the local contrail shortwave radiative forcing (\(RF_{SW}\)). |
Classes
Constants that are used to calculate the local contrail radiative forcing. |
- class pycontrails.models.cocip.radiative_forcing.RFConstants¶
Bases:
object
Constants that are used to calculate the local contrail radiative forcing.
See Table 1 of [Schumann et al., 2012].
Each coefficient has 8 elements, one corresponding to each contrail ice particle habit (shape):
[ Sphere, Solid column, Hollow column, Rough aggregate, Rosette-6, Plate, Droxtal, Myhre, ]
For each waypoint, the distinct mix of ice particle habits are approximated using the mean contrail ice particle radius (
r_vol_um
) relative toradius_threshold_um
.For example:
if
r_vol_um
for a waypoint < 5 um, the mix of ice particle habits will be 100% droxtals.if
r_vol_um
for a waypoint between 5 and 9.5 um, the mix of ice particle habits will be 30% solid columns, 70% droxtals.
See Table 2 from [Schumann et al., 2011].
References
- A_mu = array([0.361226, 0.294072, 0.343894, 0.317866, 0.337227, 0.310978, 0.342593, 0.269179])¶
\(A_{\mu}\) in Eq. (6) in [Schumann et al., 2012]
- B_mu = array([1.67592, 1.55687, 1.71065, 1.55843, 1.70782, 1.71789, 1.56399, 1.59015])¶
Approximate the SZA-dependent contrail sideward scattering \(B_{\mu}\) in Eq. (10) in [Schumann et al., 2012]
- C_mu = array([0.7093 , 0.678016, 0.687546, 0.675315, 0.712041, 0.713317, 0.660267, 0.545716])¶
\(C_{\mu}\) in Eq. (6) in [Schumann et al., 2012]
- F_r = array([0.511852, 0.576911, 0.597351, 0.22575 , 0.550734, 0.817858, 0.249004, 0. ])¶
Approximates the effective contrail optical depth \(F_r\) in Eq. (7) and (8) in [Schumann et al., 2012]
- T_0 = array([152.237, 152.724, 152.923, 152.36 , 151.879, 152.318, 165.692, 153.073])¶
Approximates the temperature of the atmosphere without contrails \(T_{0}\) in Eq. (2) in [Schumann et al., 2012]
- delta_lc = array([0.159942 , 0.0958129, 0.092485 , 0.0462023, 0.132925 , 0.0870067, 0.0626339, 0.0665289])¶
Optical depth scaling factor for reduction of the OLR at the contrail level due to existing cirrus above the contrail \(\delta_{lc} in Eq. (4) in :cite:`schumannParametricRadiativeForcing2012\)
- delta_lr = array([0.211276, 0.341194, 0.325496, 0.255921, 0.170265, 1.65441 , 0.201949, 0. ])¶
Effective radius scaling factor for optical properties (extinction relative to scattering) \(\delta_{lr} in Eq. (3) in :cite:`schumannParametricRadiativeForcing2012\)
- delta_sc = array([0.157017, 0.143274, 0.167995, 0.148547, 0.173036, 0.162442, 0.171855, 0.213488])¶
Account for the optical depth of natural cirrus above the contrail \(\delta_{sc}\) in Eq. (11) in [Schumann et al., 2012]
- delta_sc_aps = array([0.229574, 0.197611, 0.245036, 0.204875, 0.248328, 0.254029, 0.244051, 0.302246])¶
- delta_sr = array([0.149851 , 0.025427 , 0.0238836, 0.0463724, 0.0478892, 0.0700234, 0.0517942, 0. ])¶
Approximates the effective contrail optical depth \(delta_sr\) in Eq. (7) and (8) in [Schumann et al., 2012]
- delta_t = array([0.940846, 0.808397, 0.736222, 0.675591, 0.748757, 0.708515, 0.927592, 0.795527])¶
Approximate the effective emmissivity factor \(\delta_{\tau} in :cite:`schumannParametricRadiativeForcing2012\)
- gamma_lower = array([0.323166, 0.392598, 0.356189, 0.34504 , 0.407515, 0.523604, 0.310853, 0.274741])¶
Approximates the contrail reflectances \(\gamma\) in Eq. (9) in [Schumann et al., 2012]
- gamma_upper = array([0.241507, 0.347023, 0.288452, 0.296813, 0.327857, 0.43756 , 0.27471 , 0.208154])¶
Approximates the contrail reflectances \(\Gamma\) in Eq. (9) in [Schumann et al., 2012]
- k_t = array([1.93466, 1.95456, 1.95994, 1.95906, 1.94397, 1.95123, 2.30363, 1.94611])¶
Linear approximation of Stefan-Boltzmann Law \(k_t\) in Eq. (2) in [Schumann et al., 2012]
- t_a = array([0.879119, 0.901701, 0.881812, 0.899144, 0.879896, 0.883212, 0.899096, 1.00744 ])¶
Approximates the dependence on the effective albedo \(t_a\): Eq. (5) in [Schumann et al., 2012]
- pycontrails.models.cocip.radiative_forcing.albedo(sdr, rsr)¶
Calculate albedo along contrail waypoint.
Albedo, the diffuse reflection of solar radiation out of the total solar radiation, is computed based on the solar direct radiation (sdr) and reflected solar radiation (rsr).
Output values range between 0 (corresponding to a black body that absorbs all incident radiation) and 1 (a body that reflects all incident radiation).
- Parameters:
sdr (
npt.NDArray[np.float64]
) – Solar direct radiation, [\(W m^{-2}\)]rsr (
npt.NDArray[np.float64]
) – Reflected solar radiation, [\(W m^{-2}\)]
- Returns:
npt.NDArray[np.float64]
– Albedo value, [\([0 - 1]\)]
- pycontrails.models.cocip.radiative_forcing.contrail_albedo(tau_contrail, mue, r_eff_um, A_mu, B_mu, C_mu, delta_sr, F_r, gamma_lower, gamma_upper)¶
Calculate the contrail albedo,
alpha_c
.Refer to Eq. (6) of Schumann et al. (2012),
- Parameters:
tau_contrail (
npt.NDArray[np.float64]
) – Contrail optical depth for each waypointmue (
npt.NDArray[np.float64]
) – Cosine of the solar zenith angle (theta), mue = cos(theta) = sdr/sd0r_eff_um (
npt.NDArray[np.float64]
) – Effective radius for each waypoint, n_waypoints x 8 (habit) columns, [\(\mu m\)] Seeeffective_radius_habit()
.A_mu (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the albedo of the contrailB_mu (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the SZA-dependent contrail sideward scatteringC_mu (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the albedo of the contraildelta_sr (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the effective contrail optical depthF_r (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the effective contrail optical depthgamma_lower (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the contrail reflectancesgamma_upper (
npt.NDArray[np.float64]
) – Habit-specific parameter to approximate the contrail reflectances
- Returns:
npt.NDArray[np.float64]
– Contrail albedo for each waypoint and ice particle habit
- pycontrails.models.cocip.radiative_forcing.contrail_contrail_overlap_radiative_effects(contrails, habit_distributions, radius_threshold_um, *, min_altitude_m=6000.0, max_altitude_m=13000.0, dz_overlap_m=500.0, spatial_grid_res=0.25)¶
Calculate radiative properties after accounting for contrail overlapping.
This function mutates the
contrails
parameter.- Parameters:
contrails (
GeoVectorDataset
) – Contrail waypoints at a given time. Must include the following variables: - segment_length - width - r_ice_vol - tau_contrail - tau_cirrus - air_temperature - sdr - rsr - olrhabit_distributions (
npt.NDArray[np.float64]
) – Habit weight distributions. SeeCocipParams.habit_distributions
radius_threshold_um (
npt.NDArray[np.float64]
) – Radius thresholds for habit distributions. SeeCocipParams.radius_threshold_um
min_altitude_m (
float
) – Minimum altitude domain in simulation, [\(m\)] SeeCocipParams.min_altitude_m
max_altitude_m – Maximum altitude domain in simulation, [\(m\)] See
CocipParams.min_altitude_m
dz_overlap_m (
float
) – Altitude interval used to segment contrail waypoints, [\(m\)] SeeCocipParams.dz_overlap_m
spatial_grid_res (
float
) – Spatial grid resolution, [\(\deg\)]
- Returns:
GeoVectorDataset
– Contrail waypoints at a given time with additional variables attached, including - rsr_overlap - olr_overlap - tau_cirrus_overlap - rf_sw_overlap - rf_lw_overlap - rf_net_overlap
References
- Schumann et al. (2021) Air traffic and contrail changes over Europe during COVID-19:
A model study, Atmos. Chem. Phys., 21, 7429-7450, https://doi.org/10.5194/ACP-21-7429-2021.
Teoh et al. (2023) Global aviation contrail climate effects from 2019 to 2021.
Notes
The radiative effects of contrail-contrail overlapping is approximated by changing the background RSR and OLR fields, and the overlying cirrus optical depth above the contrail.
All contrail segments within each altitude interval are treated as one contrail layer, where they do not overlap. Contrail layers are processed starting from the bottom to the top.
Refer to the Supporting Information (S4.3) of Teoh et al. (2023)
- pycontrails.models.cocip.radiative_forcing.contrail_effective_emissivity(r_eff_um, delta_lr)¶
Calculate the effective emissivity of the contrail,
f_lw
.Refer to Eq. (3) of Schumann et al. (2012).
- Parameters:
r_eff_um (
npt.NDArray[np.float64]
) – Effective radius for each waypoint, n_waypoints x 8 (habit) columns, [\(\mu m\)] Seeeffective_radius_habit()
.delta_lr (
npt.NDArray[np.float64]
) – Habit specific parameter to approximate the effective emissivity of the contrail.
- Returns:
npt.NDArray[np.float64]
– Effective emissivity of the contrail
- pycontrails.models.cocip.radiative_forcing.effective_radius_by_habit(r_vol_um, habit_idx)¶
Calculate the effective radius
r_eff_um
via the mean ice particle radius and habit type.The
habit_idx
corresponds to the habit types inrf_const.habits
. Each habit type has a specific parameterization to calculater_eff_um
based onr_vol_um
. derived from [Schumann et al., 2011].- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]habit_idx (
npt.NDArray[np.intp]
) – Habit type index for the contrail ice particle, corresponding to the habits inrf_const.habits
.
- Returns:
npt.NDArray[np.float64]
– Effective radius of ice particles for each combination ofr_vol_um
andhabit_idx
, [\(\mu m\)]
References
- pycontrails.models.cocip.radiative_forcing.effective_radius_droxtal(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a droxtal particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_hollow_column(r_vol_um)¶
Calculate the effective radius of ice particles assuming a hollow column particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_myhre(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a sphere particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_plate(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a plate particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_rosette(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a rosette particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_rough_aggregate(r_vol_um)¶
Calculate the effective radius of ice particles assuming a rough aggregate particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_solid_column(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a solid column particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_radius_sphere(r_vol_um)¶
Calculate the effective radius of contrail ice particles assuming a sphere particle habit.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]- Returns:
npt.NDArray[np.float64]
– Effective radius, [\(\mu m\)]
- pycontrails.models.cocip.radiative_forcing.effective_tau_cirrus(tau_cirrus, mue, delta_sc, delta_sc_aps)¶
Calculate the effective optical depth of natural cirrus above the contrail,
e_sw
.Refer to Eq. (11) of [Schumann et al., 2012]. See Notes for a correction to the equation.
- Parameters:
tau_cirrus (
npt.NDArray[np.float64]
) – Optical depth of numerical weather prediction (NWP) cirrus above the contrail for each waypoint.mue (
npt.NDArray[np.float64]
) – Cosine of the solar zenith angle (theta), mue = cos(theta) = sdr/sd0delta_sc (
npt.NDArray[np.float64]
) – Habit-specific parameter to account for the optical depth of natural cirrus above the contraildelta_sc_aps (
npt.NDArray[np.float64]
) – Habit-specific parameter to account for the optical depth of natural cirrus above the contrail
- Returns:
npt.NDArray[np.float64]
– Effective optical depth of natural cirrus above the contrail,n_waypoints x 8
(habit) columns.
Notes
In a personal correspondence, Dr. Schumann identified a print error in Eq. (11) in [Schumann et al., 2012], where the positions of
delta_sc_aps
anddelta_sc
should be swapped. The correct function is provided below.
- pycontrails.models.cocip.radiative_forcing.habit_weight_regime_idx(r_vol_um, radius_threshold_um)¶
Determine regime of ice particle habits based on contrail ice particle volume mean radius.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]radius_threshold_um (
npt.NDArray[np.float64]
) – Radius thresholds for habit distributions. SeeCocipParams.radius_threshold_um
- Returns:
npt.NDArray[np.intp]
– Row index of the habit distribution in arrayCocipParams().habit_distributions
- pycontrails.models.cocip.radiative_forcing.habit_weights(r_vol_um, habit_distributions, radius_threshold_um)¶
Assign weights to different ice particle habits for each waypoint.
For each waypoint, the distinct mix of ice particle habits are approximated using the mean contrail ice particle radius (
r_vol_um
) binned byradius_threshold_um
.For example:
For waypoints with r_vol_um < 5 um, the mix of ice particle habits will be from Group 1 (100% Droxtals, refer to
CocipParams().habit_distributions
).For waypoints with 5 um <=
r_vol_um
< 9.5 um, the mix of ice particle habits will be from Group 2 (30% solid columns, 70% droxtals)
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]habit_distributions (
npt.NDArray[np.float64]
) – Habit weight distributions. SeeCocipParams().habit_distributions
radius_threshold_um (
npt.NDArray[np.float64]
) – Radius thresholds for habit distributions. SeeCocipParams.radius_threshold_um
- Returns:
npt.NDArray[np.float64]
– Array with shapen_waypoints x 8 columns
, where each column is the weights to the ice particle habits, [\([0 - 1]\)], and the sum of each column should be equal to 1.- Raises:
ValueError – Raises when
habit_distributions
do not sum to 1 across columns or if there is a size mismatch withradius_threshold_um
.
- pycontrails.models.cocip.radiative_forcing.longwave_radiative_forcing(r_vol_um, olr, air_temperature, tau_contrail, tau_cirrus, habit_weights_, r_eff_um=None)¶
Calculate the local contrail longwave radiative forcing (\(RF_{LW}\)).
All returned values are positive.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]olr (
npt.NDArray[np.float64]
) – Outgoing longwave radiation at each waypoint, [\(W m^{-2}\)]air_temperature (
npt.NDArray[np.float64]
) – Ambient temperature at each waypoint, [\(K\)]tau_contrail (
npt.NDArray[np.float64]
) – Contrail optical depth at each waypointtau_cirrus (
npt.NDArray[np.float64]
) – Optical depth of numerical weather prediction (NWP) cirrus above the contrail at each waypointhabit_weights_ (
npt.NDArray[np.float64]
) – Weights to different ice particle habits for each waypoint,n_waypoints x 8
(habit) columns, [\([0 - 1]\)]r_eff_um (
npt.NDArray[np.float64]
, optional) – Provide effective radius corresponding to elements inr_vol_um
, [\(\mu m\)]. Defaults to None, which means the effective radius will be calculated usingr_vol_um
and habit types ineffective_radius_by_habit()
.
- Returns:
npt.NDArray[np.float64]
– Local contrail longwave radiative forcing (positive), [\(W m^{-2}\)]- Raises:
ValueError – If r_eff_um and olr have different shapes.
References
- pycontrails.models.cocip.radiative_forcing.net_radiative_forcing(rf_lw, rf_sw)¶
Calculate the local contrail net radiative forcing (rf_net).
RF Net = Longwave RF (positive) + Shortwave RF (negative)
- Parameters:
rf_lw (
npt.NDArray[np.float64]
) – local contrail longwave radiative forcing, [\(W m^{-2}\)]rf_sw (
npt.NDArray[np.float64]
) – local contrail shortwave radiative forcing, [\(W m^{-2}\)]
- Returns:
npt.NDArray[np.float64]
– local contrail net radiative forcing, [\(W m^{-2}\)]
- pycontrails.models.cocip.radiative_forcing.olr_reduction_natural_cirrus(tau_cirrus, delta_lc)¶
Calculate reduction in outgoing longwave radiation (OLR) due to the presence of natural cirrus.
Natural cirrus has optical depth
tau_cirrus
above the contrail. Seee_lw
in Eq. (4) of Schumann et al. (2012).- Parameters:
tau_cirrus (
npt.NDArray[np.float64]
) – Optical depth of numerical weather prediction (NWP) cirrus above the contrail for each waypoint.delta_lc (
npt.NDArray[np.float64]
) – Habit specific parameter to approximate the reduction of the outgoing longwave radiation at the contrail level due to natural cirrus above the contrail.
- Returns:
npt.NDArray[np.float64]
– Reduction of outgoing longwave radiation
- pycontrails.models.cocip.radiative_forcing.shortwave_radiative_forcing(r_vol_um, sdr, rsr, sd0, tau_contrail, tau_cirrus, habit_weights_, r_eff_um=None)¶
Calculate the local contrail shortwave radiative forcing (\(RF_{SW}\)).
All returned values are negative.
- Parameters:
r_vol_um (
npt.NDArray[np.float64]
) – Contrail ice particle volume mean radius, [\(\mu m\)]sdr (
npt.NDArray[np.float64]
) – Solar direct radiation, [\(W m^{-2}\)]rsr (
npt.NDArray[np.float64]
) – Reflected solar radiation, [\(W m^{-2}\)]sd0 (
npt.NDArray[np.float64]
) – Solar constant, [\(W m^{-2}\)]tau_contrail (
npt.NDArray[np.float64]
) – Contrail optical depth for each waypointtau_cirrus (
npt.NDArray[np.float64]
) – Optical depth of numerical weather prediction (NWP) cirrus above the contrail for each waypoint.habit_weights_ (
npt.NDArray[np.float64]
) – Weights to different ice particle habits for each waypoint,n_waypoints x 8
(habit) columns, [\([0 - 1]\)]r_eff_um (
npt.NDArray[np.float64]
, optional) – Provide effective radius corresponding to elements inr_vol_um
, [\(\mu m\)]. Defaults to None, which means the effective radius will be calculated usingr_vol_um
and habit types ineffective_radius_by_habit()
.
- Returns:
npt.NDArray[np.float64]
– Local contrail shortwave radiative forcing (negative), [\(W m^{-2}\)]- Raises:
ValueError – If r_eff_um and sdr have different shapes.
References