supy.util.attribute_q2

Contents

Tip

  1. Need help? Please let us know in the SUEWS Community.

  2. Please report issues with the manual on GitHub Issues (or use Report Issue for This Page for page-specific feedback).

  3. Please cite SUEWS with proper information from our Zenodo page.

6.3.7.4. supy.util.attribute_q2#

supy.util.attribute_q2(df_output_A: DataFrame, df_output_B: DataFrame, df_forcing_A: DataFrame, df_forcing_B: DataFrame, min_flux: float = 0.1) AttributionResult[source]#

Decompose q2 (2m specific humidity) differences between two SUEWS scenarios.

The difference in 2m specific humidity is attributed to: - Flux changes (Q_E latent heat flux) - Resistance changes (turbulent exchange efficiency) - Air property changes (rho * L_v)

Parameters:
  • df_output_A (pd.DataFrame) – SUEWS output DataFrame for scenario A (reference/baseline)

  • df_output_B (pd.DataFrame) – SUEWS output DataFrame for scenario B (modified/test)

  • df_forcing_A (pd.DataFrame) – Forcing DataFrame for scenario A. Must contain ‘Tair’, ‘RH’, ‘pres’ columns.

  • df_forcing_B (pd.DataFrame) – Forcing DataFrame for scenario B. Must contain ‘Tair’, ‘RH’, ‘pres’ columns.

  • min_flux (float, optional) – Minimum flux threshold (W/m2) for resistance calculation. Timesteps with abs(Q_E) < min_flux are flagged. Default 0.1.

Returns:

Container with contributions timeseries, summary statistics, and metadata.

Return type:

AttributionResult

Examples

Compare baseline vs. irrigated scenario:

>>> result = attribute_q2(df_output_baseline, df_output_irrigated,
...                       df_forcing_A=df_forcing, df_forcing_B=df_forcing)
>>> print(result)
q2 Attribution Results
========================================
Mean delta_q2: +0.0012 g/kg

6.3.7.4. Component Breakdown:#

flux_total : +0.0008 g/kg (66.7%) resistance : +0.0003 g/kg (25.0%) air_props : +0.0001 g/kg ( 8.3%)

>>> result.plot(kind="bar")  # Visualise contributions