Generate the temperature zone for a given scenario and gcm member.
Parameters
gcm_member
The gcm member to generate the temperature zone for.
scenario
The scenario to generate the temperature zone for. Pass historical
(with gcm_member="era5") to build a pure-ERA5 zone from the raw
historical annual mean temperature rather than the compiled
historical+forecast series; the output then spans EXPOSURE_START_YEAR
through the last historical year present on disk.
output_dir
The directory to save the temperature zone to (root for this run mode).
Source code in src/climate_data/special/temperature_zone.py
| def generate_temperature_zone_main(
gcm_member: str,
scenario: str,
output_dir: str | Path,
) -> None:
"""Generate the temperature zone for a given scenario and gcm member.
Parameters
----------
gcm_member
The gcm member to generate the temperature zone for.
scenario
The scenario to generate the temperature zone for. Pass ``historical``
(with ``gcm_member="era5"``) to build a pure-ERA5 zone from the raw
historical annual mean temperature rather than the compiled
historical+forecast series; the output then spans ``EXPOSURE_START_YEAR``
through the last historical year present on disk.
output_dir
The directory to save the temperature zone to (root for this run mode).
"""
print(f"Generating temperature zone for {scenario} {gcm_member}")
cdata = ClimateData(output_dir)
if scenario == "historical":
ds = cdata.load_raw_annual_mfdataset("historical", "mean_temperature")
else:
ds = cdata.load_compiled_annual_results(
scenario, "mean_temperature", gcm_member
)
temperature_zone = (
ds.rolling(year=10)
.mean()
.sel(year=slice(cdc.EXPOSURE_START_YEAR, int(cdc.FORECAST_YEARS[-1])))
)
print(f"Saving temperature zone for {scenario} {gcm_member}")
cdata.save_compiled_annual_results(
temperature_zone,
scenario=scenario,
variable="temperature_zone",
gcm_member=gcm_member,
encoding_kwargs={"scale_factor": 0.01, "add_offset": 0.0},
)
|