From d76510f6dc5a0bb4f07901b9be34e2e39072e702 Mon Sep 17 00:00:00 2001 From: Brewster Malevich Date: Mon, 24 Aug 2026 16:45:21 -0700 Subject: [PATCH 1/3] Move GMFD extreme value filling to "parse GMFD" step This fixes an issue where extreme values in GMFD were only cleaned for the ERA5 bias adjustment, and not included in the forecast adjustment. --- scripts/01-parse_gmfd.py | 7 +++++++ scripts/02-bias_adjust_era5.py | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/01-parse_gmfd.py b/scripts/01-parse_gmfd.py index 9fd8511..d4d38aa 100644 --- a/scripts/01-parse_gmfd.py +++ b/scripts/01-parse_gmfd.py @@ -73,9 +73,16 @@ def open_gmfd(file_pattern: str, start_year: int, stop_year: int) -> xr.Dataset: start_year=START_YEAR, stop_year=STOP_YEAR, ) + # Cannot have leap years in QDM bias adjustment. gmfd = gmfd.convert_calendar("noleap", dim="time") +# Fill extreme values +gmfd = ( + gmfd.where(gmfd["tas"] < 1000) + .interpolate_na(dim="lat", method="linear") +) + regridder = xe.Regridder(gmfd, regrid_target, method="bilinear", periodic=True) gmfd_regrid = regridder(gmfd) gmfd_regrid.attrs |= gmfd.attrs diff --git a/scripts/02-bias_adjust_era5.py b/scripts/02-bias_adjust_era5.py index ee2448c..e181127 100644 --- a/scripts/02-bias_adjust_era5.py +++ b/scripts/02-bias_adjust_era5.py @@ -27,13 +27,6 @@ chunks={}, backend_kwargs={"storage_options": {"token": "anon"}}, ) -# Fill extreme values -gmfd = gmfd.sortby("latitude").chunk({"latitude": -1, "longitude": 30, "time": -1}) -gmfd = ( - gmfd.where(gmfd["tas"] < 1000) - .interpolate_na(dim="latitude", method="linear") - .compute() -) era5 = xr.open_dataset( ERA5_URI, From 5b21d902b4c5f97ae84ea01eada2a6a345c99f5a Mon Sep 17 00:00:00 2001 From: Brewster Malevich Date: Mon, 24 Aug 2026 16:58:51 -0700 Subject: [PATCH 2/3] Add CHANGELOG entry --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5948f8..990922a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- +### Fixed + +- GMFD extreme value cleaning moved so applies to all subsequent steps, not just ERA5 bias adjustment. ([@brews](https://github.com/brews), [PR#17](https://github.com/ClimateImpactLab/poreallas/pull/28)) ## [0.5.0] - 2026-08-24 From b21960ff2e0a03e376223984a66ea81071eaca99 Mon Sep 17 00:00:00 2001 From: Brewster Malevich Date: Mon, 24 Aug 2026 17:01:35 -0700 Subject: [PATCH 3/3] Make lint checker happy --- scripts/01-parse_gmfd.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/01-parse_gmfd.py b/scripts/01-parse_gmfd.py index d4d38aa..f004910 100644 --- a/scripts/01-parse_gmfd.py +++ b/scripts/01-parse_gmfd.py @@ -78,10 +78,7 @@ def open_gmfd(file_pattern: str, start_year: int, stop_year: int) -> xr.Dataset: gmfd = gmfd.convert_calendar("noleap", dim="time") # Fill extreme values -gmfd = ( - gmfd.where(gmfd["tas"] < 1000) - .interpolate_na(dim="lat", method="linear") -) +gmfd = gmfd.where(gmfd["tas"] < 1000).interpolate_na(dim="lat", method="linear") regridder = xe.Regridder(gmfd, regrid_target, method="bilinear", periodic=True) gmfd_regrid = regridder(gmfd)