Skip to content

Add H SAF ASCAT H121/H139 soil moisture reader - #186

Draft
amfox37 wants to merge 17 commits into
developfrom
feature/amfox/ascat-hsaf-v8
Draft

Add H SAF ASCAT H121/H139 soil moisture reader#186
amfox37 wants to merge 17 commits into
developfrom
feature/amfox/ascat-hsaf-v8

Conversation

@amfox37

@amfox37 amfox37 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

This PR adds support for reading H SAF ASCAT surface soil moisture from the H121 CDR v8 and H139 ICDR NetCDF products.

Summary:

  • Adds read_obs_sm_ASCAT_HSAF() for H SAF ASCAT NetCDF swath files on the 12.5 km Fibonacci grid.
  • Adds MetOp-A/B/C H SAF ASCAT observation species:
    • ASCAT_HSAF_META_SM
    • ASCAT_HSAF_METB_SM
    • ASCAT_HSAF_METC_SM
  • Increases N_obs_species_nml from 55 to 58.
  • Adds default ensupd namelist entries for H121/H139 data paths and flists.
  • Wires the new H SAF ASCAT species into read_obs().
  • Applies H SAF-specific QC using surface/processing flags, wetland fraction, topographic complexity, subsurface scattering probability, soil moisture sensitivity, and noisy backscatter flags.
  • Leaves snow/frozen screening to the existing model-based satellite soil moisture QC.
  • Updates CHANGELOG.md.

Notes:

  • MetOp-A is configured for the H121 CDR period.
  • MetOp-B/C are configured for the H121 CDR plus H139 ICDR continuity path.

Testing:

  • Passed GEOSldas regression tests on Discover.
  • Used extensively in multi-year experiments on Discover with real H SAF ASCAT H121/H139 input.
  • Built locally on macOS with cmake --build build-develop-20260520 --target install -j 4; the latest pushed commit is changelog/comment-only.

amfox37 and others added 11 commits June 12, 2026 13:15
Adds read_obs_sm_ASCAT_HSAF and three new obs species (ASCAT_HSAF_META_SM,
ASCAT_HSAF_METB_SM, ASCAT_HSAF_METC_SM) reading netCDF swath files from the
H SAF H121 CDR and H139 ICDR products on the 12.5 km Fibonacci grid.

QC uses flags embedded in the netCDF files (no external mask needed), including
subsurface_scattering_probability which was not available in the prior EUMET
BUFR product. N_obs_species_nml bumped from 55 to 58.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
H121/H139 files arrive from FTP in monthly directories (YYYY/MM/);
using obs_dir_hier=1 makes read_obs_fnames prepend Y{YYYY}/M{MM}/
instead of Y{YYYY}/M{MM}/D{DD}/, so data can stay in monthly dirs
without restructuring.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Point to shared land_da project directory on Discover for H121 obs
files and consolidated flists directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
qc_model_based_for_sat_sfmc screens for snow and frozen soil using
model state, so duplicating those checks with H SAF product flags
is unnecessary. Retain wetland, topographic complexity, and
subsurface scattering screening at read time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wetland, topographic complexity, and subsurface scattering probability
variables are NC_BYTE or NC_UBYTE; fill values read as negative signed
bytes. Add explicit < 0 guard so fill values are rejected rather than
silently passing the threshold check.

Update MetOp-B and MetOp-C namelist paths from H121/metop_{b,c}/ to
H121_H139/metop_{b,c}/ to reflect that CDR and ICDR files are staged
together under the same root directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…AT QC

Fill means no subsurface scattering region detected here, not missing data.
Wetland and topo fill still rejected (unknown coverage from static databases).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…T reader

Hahn et al. (2026, ESSD essd-2025-746) state surface_soil_moisture_sensitivity
below 1 dB indicates unreliable retrievals, and their own validation masks
subsurface_scattering_probability > 5% rather than the 10% previously used
here. Add a sensitivity check and tighten thr_subsfc to match.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ader

This reader assigns every accepted obs the same fixed this_obs_param%errstd
with no per-observation noise down-weighting, so noise_out_of_limits obs get
the same Kalman weight as clean ones. Hard rejection on bit 4 only (not bit
2/slightly_degraded, which discards more data for no measurable benefit).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@amfox37 amfox37 added enhancement New feature or request 0-diff labels Jul 21, 2026
@gmao-rreichle

Copy link
Copy Markdown
Collaborator

@amfox37 : Thanks for putting this together, looks great. I added a few commits, mostly comments and white-space changes for cleanup.

There is, however, one change that needs discussion: I think the FOV value should be 12.5 km: 3f267f3. The FOV value is a radius. SMAP Tb has ~40 km resolution, and the FOV value is 20 km. The "12.5km" ASCAT product a nominal resolution of 25 km per Hahn et al, so FOV should be 12.5 km.

Not sure what the resolution of the old EUMETSAT product is. Probably the FOV value of 20 km isn't quite right, but we can leave that alone given that we're going to use the HSAF product going forward.

Does this make sense to you?

Comment thread GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

0-diff enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants