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.

3.6. External Model Coupling#

Coupling SUEWS with external models for anthropogenic heat flux.

This example demonstrates how SUEWS can be coupled to external models that provide forcing data. We use a simple anthropogenic heat flux (\(Q_F\)) model driven by outdoor air temperature to show the coupling approach.

Key concepts:

  • Anthropogenic heat flux depends on outdoor temperature

  • SUEWS can receive external \(Q_F\) as forcing input

  • One-way coupling: external model provides forcing to SUEWS

  • Temperature feedback affects urban energy balance

API approach: This tutorial uses the SUEWSSimulation OOP interface but extracts DataFrames for forcing modification. This hybrid pattern is required for external model coupling where forcing variables must be modified at runtime.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from supy import SUEWSSimulation

3.6.1. Simple Anthropogenic Heat Model#

We define a simple \(Q_F\) model based on building heating and cooling:

  • Heating activates when T < 10 \(^{\circ}C\)

  • Cooling activates when T > 20 \(^{\circ}C\)

  • Between 10-20 \(^{\circ}C\): baseline \(Q_F\) = 0

This simplified model captures the temperature-dependent nature of building energy use without requiring detailed building simulation.

def QF_simple(T2):
    """Calculate anthropogenic heat flux from air temperature.

    Parameters
    ----------
    T2 : float
        2-metre air temperature (:math:`^{\circ}C`)

    Returns
    -------
    float
        Anthropogenic heat flux (W m\ :sup:`-2`)
    """
    T_cool = 20  # Cooling threshold (degC)
    T_heat = 10  # Heating threshold (degC)
    C_B = 5  # Cooling rate (W m^-2 K^-1)
    H_B = 10  # Heating rate (W m^-2 K^-1)
    scale = 0.3  # Scaling factor

    if T2 > T_cool:  # noqa: SIM300
        qf = (T2 - T_cool) * C_B
    elif T2 < T_heat:  # noqa: SIM300
        qf = (T_heat - T2) * H_B
    else:
        qf = 0

    return qf * scale
/home/runner/work/SUEWS/SUEWS/docs/source/tutorials/tutorial_06_external_coupling.py:49: SyntaxWarning: invalid escape sequence '\c'
  2-metre air temperature (:math:`^{\circ}C`)

3.6.2. Visualise the \(Q_F\) Model#

Plot the \(Q_F\) response to temperature to understand the model behaviour.

temp_range = np.arange(-5, 45, 0.5)
qf_values = [QF_simple(t) for t in temp_range]

# Create DataFrames for plotting by region
df_qf = pd.DataFrame({"Temperature": temp_range, "QF": qf_values})

fig, ax = plt.subplots(figsize=(8, 5))

# Heating region (T < 10 degC)
mask_heat = temp_range < 10
ax.plot(temp_range[mask_heat], np.array(qf_values)[mask_heat], "C1-", label="Heating", linewidth=2)

# Neutral region (10 <= T <= 20 degC)
mask_neutral = (temp_range >= 10) & (temp_range <= 20)
ax.plot(
    temp_range[mask_neutral], np.array(qf_values)[mask_neutral], "C2-", label="Baseline", linewidth=2
)

# Cooling region (T > 20 degC)
mask_cool = temp_range > 20
ax.plot(temp_range[mask_cool], np.array(qf_values)[mask_cool], "C0-", label="Cooling", linewidth=2)

# Annotations
ax.axvline(10, color="grey", linestyle="--", alpha=0.5)
ax.axvline(20, color="grey", linestyle="--", alpha=0.5)
ax.annotate("$T_H$ = 10$^{\\circ}$C", xy=(10, 5), fontsize=10)
ax.annotate("$T_C$ = 20$^{\\circ}$C", xy=(20, 5), fontsize=10)

ax.set_xlabel("Air Temperature ($^\\circ$C)")
ax.set_ylabel("$Q_F$ (W m$^{-2}$)")
ax.set_title("Simple Anthropogenic Heat Flux Model")
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
Simple Anthropogenic Heat Flux Model

3.6.3. Load Sample Data#

Load the sample dataset and prepare for coupled simulation.

sim = SUEWSSimulation.from_sample_data()
df_state_init = sim.state_init.copy()

# Disable snow module (not needed for this site)
df_state_init.loc[:, "snowuse"] = 0

# Slice forcing by time (returns SUEWSForcing object)
# Use shorter period for faster tutorial execution
forcing_sliced = sim.forcing["2012-01":"2012-02"].iloc[1:]

Important

External coupling requires DataFrame extraction: When injecting variables from external models (here: \(Q_F\)), you must extract the DataFrame with .df, add the new column, then pass it to the simulation. This is the expected pattern for model coupling.

# Get DataFrame for modification (adding external :math:`Q_F`)
df_forcing = forcing_sliced.df

print(f"Simulation period: {df_forcing.index[0]} to {df_forcing.index[-1]}")
print(f"Time steps: {len(df_forcing)}")
Simulation period: 2012-01-01 00:10:00 to 2012-02-29 23:55:00
Time steps: 17278

3.6.4. Calculate External \(Q_F\) from Forcing Data#

Apply the simple \(Q_F\) model to the air temperature from the forcing data. This is a one-way coupling: the external model uses prescribed temperatures.

# Calculate :math:`Q_F` for each timestep
qf_external = df_forcing["Tair"].apply(QF_simple)

# Create modified forcing with external :math:`Q_F`
df_forcing_with_qf = df_forcing.copy()
df_forcing_with_qf["qf"] = qf_external

# Configure SUEWS to use external :math:`Q_F`
df_state_qf = df_state_init.copy()
df_state_qf.loc[:, "emissionsmethod"] = 0  # Use prescribed Q_F

print("Q_F statistics:")
print(f"  Mean: {qf_external.mean():.2f} W/m^2")
print(f"  Max:  {qf_external.max():.2f} W/m^2")
print(f"  Min:  {qf_external.min():.2f} W/m^2")
Q_F statistics:
  Mean: 15.49 W/m^2
  Max:  47.10 W/m^2
  Min:  0.00 W/m^2

3.6.5. Run Baseline Simulation (\(Q_F\) = 0)#

First, run a simulation without anthropogenic heat for comparison.

df_forcing_baseline = df_forcing.copy()
df_forcing_baseline["qf"] = 0

df_state_baseline = df_state_init.copy()
df_state_baseline.loc[:, "emissionsmethod"] = 0

sim_baseline = SUEWSSimulation.from_state(df_state_baseline).update_forcing(df_forcing_baseline)
output_baseline = sim_baseline.run(logging_level=90)

grid = df_state_init.index[0]
df_suews_baseline = output_baseline.SUEWS.loc[grid]

print("Baseline simulation complete (Q_F = 0)")
/home/runner/work/SUEWS/SUEWS/.venv/lib/python3.13/site-packages/pydantic/main.py:250: UserWarning: Configuration uses schema 0.1, current is 2025.12 (compatible)
  validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
/home/runner/work/SUEWS/SUEWS/.venv/lib/python3.13/site-packages/pydantic/main.py:464: UserWarning: Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.02, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.02, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_runoff', input_value=0.98, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_runoff', input_value=0.98, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_runoff', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_runoff', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faibldg', input_value=0.11, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faibldg', input_value=0.11, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='bldgh', input_value=22.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='bldgh', input_value=22.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=7.4, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=7.4, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faievetree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faievetree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='evetreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='evetreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=11.7, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=11.7, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faidectree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faidectree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='dectreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='dectreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='pormin_dec', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='pormin_dec', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='pormax_dec', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='pormax_dec', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='capmax_dec', input_value=0.8, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='capmax_dec', input_value=0.8, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='capmin_dec', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='capmin_dec', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.21, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.21, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=33.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=33.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='flowchange', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='flowchange', input_value=0.0, input_type=RefValue])
  return self.__pydantic_serializer__.to_python(
Baseline simulation complete (Q_F = 0)

3.6.6. Run Simulation with External \(Q_F\)#

Now run with the temperature-dependent \(Q_F\) from our simple model.

sim_with_qf = SUEWSSimulation.from_state(df_state_qf).update_forcing(df_forcing_with_qf)
output_qf = sim_with_qf.run(logging_level=90)

df_suews_qf = output_qf.SUEWS.loc[grid]

print("Coupled simulation complete (with external Q_F)")
/home/runner/work/SUEWS/SUEWS/.venv/lib/python3.13/site-packages/pydantic/main.py:250: UserWarning: Configuration uses schema 0.1, current is 2025.12 (compatible)
  validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
/home/runner/work/SUEWS/SUEWS/.venv/lib/python3.13/site-packages/pydantic/main.py:464: UserWarning: Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.02, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.02, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_runoff', input_value=0.98, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_runoff', input_value=0.98, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_runoff', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_runoff', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faibldg', input_value=0.11, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faibldg', input_value=0.11, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='bldgh', input_value=22.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='bldgh', input_value=22.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=7.4, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=7.4, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faievetree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faievetree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='evetreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='evetreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.12, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=11.7, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=11.7, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='faidectree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='faidectree', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='dectreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='dectreeh', input_value=13.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='pormin_dec', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='pormin_dec', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='pormax_dec', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='pormax_dec', input_value=0.9, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='capmax_dec', input_value=0.8, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='capmax_dec', input_value=0.8, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='capmin_dec', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='capmin_dec', input_value=0.3, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bsoil', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_min', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_min', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb_max', input_value=0.21, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb_max', input_value=0.21, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_bioco2', input_value=8.747, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='beta_enh_bioco2', input_value=33.353, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_bioco2', input_value=0.004, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alpha_enh_bioco2', input_value=0.016, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_a', input_value=2.43, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='resp_b', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='theta_bioco2', input_value=0.96, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='maxconductance', input_value=33.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='maxconductance', input_value=33.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='min_res_bioco2', input_value=0.6, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_a', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='ie_m', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_paved', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_bldgs', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_dectr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_evetr', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_grass', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_water', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='to_soilstore', input_value=1.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.18, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='alb', input_value=0.1, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `RefValue[float]` - serialized value may not be as expected [field_name='flowchange', input_value=0.0, input_type=RefValue])
  PydanticSerializationUnexpectedValue(Expected `float` - serialized value may not be as expected [field_name='flowchange', input_value=0.0, input_type=RefValue])
  return self.__pydantic_serializer__.to_python(
Coupled simulation complete (with external Q_F)

3.6.7. Compare \(Q_F\) Values#

Compare the prescribed \(Q_F\) with the baseline (zero) case.

fig, axes = plt.subplots(2, 1, figsize=(10, 6), sharex=True)

# Plot Q_F time series
df_suews_qf["QF"].resample("1h").mean().plot(ax=axes[0], label="With external $Q_F$")
df_suews_baseline["QF"].resample("1h").mean().plot(ax=axes[0], label="Baseline ($Q_F$=0)")
axes[0].set_ylabel("$Q_F$ (W m$^{-2}$)")
axes[0].set_title("Anthropogenic Heat Flux")
axes[0].legend()

# Plot difference
diff_qf = (df_suews_qf["QF"] - df_suews_baseline["QF"]).resample("1h").mean()
diff_qf.plot(ax=axes[1], color="C2")
axes[1].set_ylabel("$\\Delta Q_F$ (W m$^{-2}$)")
axes[1].set_xlabel("Date")
axes[1].set_title("$Q_F$ Difference (Coupled - Baseline)")
axes[1].axhline(0, color="grey", linestyle="--", alpha=0.5)

plt.tight_layout()
Anthropogenic Heat Flux, $Q_F$ Difference (Coupled - Baseline)

3.6.8. Temperature Feedback#

Examine how the external \(Q_F\) affects the simulated 2-metre temperature.

fig, axes = plt.subplots(2, 1, figsize=(10, 6), sharex=True)

# Plot T2 time series
df_suews_qf["T2"].resample("1h").mean().plot(ax=axes[0], label="With external $Q_F$")
df_suews_baseline["T2"].resample("1h").mean().plot(ax=axes[0], label="Baseline")
axes[0].set_ylabel("$T_2$ ($^\\circ$C)")
axes[0].set_title("2-Metre Air Temperature")
axes[0].legend()

# Plot temperature difference
diff_t2 = (df_suews_qf["T2"] - df_suews_baseline["T2"]).resample("1h").mean()
diff_t2.plot(ax=axes[1], color="C3")
axes[1].set_ylabel("$\\Delta T_2$ ($^\\circ$C)")
axes[1].set_xlabel("Date")
axes[1].set_title("Temperature Difference (Coupled - Baseline)")
axes[1].axhline(0, color="grey", linestyle="--", alpha=0.5)

plt.tight_layout()
2-Metre Air Temperature, Temperature Difference (Coupled - Baseline)

3.6.9. \(Q_F\) vs Temperature Response#

Analyse the relationship between \(Q_F\) change and temperature change.

# Daily statistics
df_daily_qf = df_suews_qf.resample("1D").mean()
df_daily_baseline = df_suews_baseline.resample("1D").mean()

diff_qf_daily = df_daily_qf["QF"] - df_daily_baseline["QF"]
diff_t2_daily = df_daily_qf["T2"] - df_daily_baseline["T2"]

fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(diff_qf_daily, diff_t2_daily, alpha=0.7, s=30)
ax.set_xlabel("$\\Delta Q_F$ (W m$^{-2}$)")
ax.set_ylabel("$\\Delta T_2$ ($^\\circ$C)")
ax.set_title("$Q_F$ - Temperature Feedback (Daily Means)")

# Add trend line
if len(diff_qf_daily.dropna()) > 2:
    z = np.polyfit(diff_qf_daily.dropna(), diff_t2_daily.dropna(), 1)
    p = np.poly1d(z)
    x_line = np.linspace(diff_qf_daily.min(), diff_qf_daily.max(), 100)
    ax.plot(x_line, p(x_line), "r--", alpha=0.7, label=f"Slope: {z[0]:.3f} $^{{\\circ}}$C/(W/m$^2$)")
    ax.legend()

ax.grid(True, alpha=0.3)
plt.tight_layout()
$Q_F$ - Temperature Feedback (Daily Means)

3.6.10. Summary#

This example demonstrated one-way coupling between SUEWS and an external anthropogenic heat flux model:

  1. Simple \(Q_F\) model: Temperature-dependent heating/cooling emissions

  2. One-way coupling: External \(Q_F\) prescribed from air temperature

  3. Temperature feedback: \(Q_F\) affects simulated air temperature

Key findings:

  • Anthropogenic heat adds energy to the urban surface

  • Higher \(Q_F\) leads to elevated air temperatures

  • The feedback magnitude depends on atmospheric conditions

Extensions:

  • Two-way coupling: SUEWS T2 drives external model, which provides \(Q_F\)

  • Building energy models for detailed \(Q_F\) estimation

  • Traffic and metabolic heat contributions

Note

For tight two-way coupling (timestep-by-timestep interaction), low-level SUEWS functions are required. See the source notebook for implementation details.

Total running time of the script: (0 minutes 21.984 seconds)

Gallery generated by Sphinx-Gallery