Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
b33d942
Add optional ObsFcstAna NetCDF output mode and wire through landassim
amfox37 Feb 20, 2026
1e6fc81
Add ObsFcstAna NetCDF metadata and thread runtime context
amfox37 Feb 20, 2026
b5a4a3b
Add ObsFcstAna bin-vs-nc4 comparison utility
amfox37 Feb 21, 2026
09afdf4
Remove species orbit/pol/freq from ObsFcstAna nc4 output
amfox37 Feb 21, 2026
e3eb583
Harden ObsFcstAna nc4 write error handling
amfox37 Feb 22, 2026
66f0f77
Refine ObsFcstAna nc4 metadata and species fields
amfox37 Mar 12, 2026
fc2b58d
ObsFcstAna nc4: keep assim per-observation; move species flags to glo…
amfox37 Mar 12, 2026
e584f2c
Expand ObsFcstAna nc4 species table and simplify global species attrs
amfox37 Mar 12, 2026
5f75581
Remove ObsFcstAna bin-vs-nc4 utility from GridComp repo
amfox37 Mar 12, 2026
0782a9a
Remove MKL build-system changes from netcdf_obsfcstana PR
amfox37 Mar 12, 2026
70225d2
Merge branch 'develop' into feature/amfox/netcdf_obsfcstana
gmao-rreichle Mar 13, 2026
068d984
Consolidate ObsFcstAna file move loop for bin/nc4 outputs
amfox37 Mar 16, 2026
51989c1
Merge branch 'feature/amfox/netcdf_obsfcstana' of github.com:GEOS-ESM…
amfox37 Mar 16, 2026
3b1acb3
Write ObsFcstAna species text metadata as netCDF4 string vars
amfox37 Mar 16, 2026
4cc2f33
Use 3-digit species descriptor attribute formatting
amfox37 Mar 16, 2026
222549d
Fix ObsFcstAna netCDF string writes for species metadata
amfox37 Mar 16, 2026
5732eb1
Fix ObsFcstAna NF90_STRING species metadata writes
amfox37 Mar 16, 2026
4993461
Use PFIO helper for ObsFcstAna NF90_STRING writes
amfox37 Mar 16, 2026
5b0c475
Use integer out_ObsFcstAna mode and centralize format mapping
amfox37 Mar 17, 2026
4e28809
Drop redundant ObsFcstAna count attributes from nc4 header
amfox37 Mar 17, 2026
8ae7319
Rename obs_param metadata variables to obsparam_* in ObsFcstAna nc4
amfox37 Mar 17, 2026
9587a8f
Rename ObsFcstAna nc4 assim variable to assim_flag
amfox37 Mar 17, 2026
046924b
Reapply non-MKL GEOSlandpert build fix
amfox37 Feb 20, 2026
e1bc6f3
Refine ObsFcstAna nc4 metadata attributes
amfox37 Mar 18, 2026
9c35f48
Adjust ObsFcstAna nc4 globals and special output mode
amfox37 Mar 18, 2026
d374f6f
Set special ensupd ObsFcstAna mode back to BIN
amfox37 Mar 18, 2026
675cd21
Merge branch 'develop' into feature/amfox/netcdf_obsfcstana
gmao-rreichle Mar 20, 2026
bf1bfe3
Merge branch 'develop' into feature/amfox/netcdf_obsfcstana
gmao-rreichle Mar 23, 2026
c8304a9
clarified description of out_ObsFcstAna change in CHANGELOG.md
gmao-rreichle Apr 13, 2026
263a4ee
edited comment re. out_ObsFcstAna (LDASsa_DEFAULT_inputs_ensupd.nml; …
gmao-rreichle Apr 13, 2026
b26a34f
removed redundant out_ObsFcstAna_mode/FMT (GEOS_LandAssimGridComp.F90…
gmao-rreichle Apr 13, 2026
f46a93e
removed unused variables from argument list of write_ObsFcstAna_nc4()…
gmao-rreichle Apr 13, 2026
92c9308
edited long_name attributes of ObsFcstAna variables (clsm_ensupd_enkf…
gmao-rreichle Apr 13, 2026
6d172cb
removed unused "grid_name" from argument list of ObsFcstAna output su…
gmao-rreichle Apr 13, 2026
3f1ed0f
edited meta-data written into ObsFcstAna nc4 output files (clsm_ensup…
gmao-rreichle Apr 15, 2026
73baa90
updated obs_param structure and ObsFcstAna nc4 output (clsm_ensupd_en…
gmao-rreichle Apr 17, 2026
2bacee3
needed to deal with obs_param_nml(25)%varname = 'NULL' in DEFAULT
amfox37 Apr 23, 2026
e9ef89b
Fix logic for intended behaviour
amfox37 Apr 23, 2026
be65778
Refactor input validation for obs_param_nml for NULL checks for fcstv…
amfox37 Apr 23, 2026
4aecf20
in ObsFcstAna nc4 output, replace LDAS no_data_generic with MAPL_UNDE…
gmao-rreichle Apr 28, 2026
138c6b2
in ObsFcstAna nc4 output, add "_FillValue" attribute for CF-complianc…
gmao-rreichle Apr 28, 2026
58d3484
in ObsFcstAna nc4 output, changed name of "nobs" dimension to "n_obs"…
gmao-rreichle Apr 28, 2026
52ef3bb
added comment/documentation re. "rf2f"; minimal white-space changes (…
gmao-rreichle Apr 28, 2026
41ab7d8
Use scalar no-data replacement when writing ObsFcstAna nc4 fields
amfox37 Apr 30, 2026
b241d31
Add optional ObsFcstAna NetCDF4 output with structured species metada…
gmao-rreichle May 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- Added optional NetCDF4 output mode for ObsFcstAna, including NetCDF metadata and runtime context. Changed namelist variable "out_ObsFcstAna" from logical to integer.

### Changed

- Revised and cleaned up RESTART options:
Expand Down
7 changes: 4 additions & 3 deletions GEOSlandassim_GridComp/GEOS_LandAssimGridComp.F90
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,14 @@ module GEOS_LandAssimGridCompMod
real :: fcsterr_inflation_fac
integer :: N_obs_param
logical :: out_obslog
logical :: out_ObsFcstAna
integer :: out_ObsFcstAna
logical :: out_smapL4SMaup
integer :: N_obsbias_max

integer, dimension(:), pointer :: N_catl_vec,low_ind
integer :: N_catf

!reordered tile_coord_rf and mapping l2rf
! reordered tile_coord_rf and mapping l2rf
integer, dimension(:), pointer :: l2rf, rf2l,rf2g, rf2f
type(tile_coord_type), dimension(:), pointer :: tile_coord_rf => null()

Expand Down Expand Up @@ -1407,7 +1407,7 @@ subroutine Initialize(gc, import, export, clock, rc)
call MPI_BCAST(fcsterr_inflation_fac, 1, MPI_REAL, 0,MPICOMM,mpierr)
call MPI_BCAST(N_obs_param, 1, MPI_INTEGER, 0,MPICOMM,mpierr)
call MPI_BCAST(out_obslog, 1, MPI_LOGICAL, 0,MPICOMM,mpierr)
call MPI_BCAST(out_ObsFcstAna, 1, MPI_LOGICAL, 0,MPICOMM,mpierr)
call MPI_BCAST(out_ObsFcstAna, 1, MPI_INTEGER, 0,MPICOMM,mpierr)
call MPI_BCAST(out_smapL4SMaup, 1, MPI_LOGICAL, 0,MPICOMM,mpierr)
call MPI_BCAST(N_obsbias_max, 1, MPI_INTEGER, 0,MPICOMM,mpierr)

Expand Down Expand Up @@ -1953,6 +1953,7 @@ subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC )
N_catl, tile_coord_l, &
N_catf, tile_coord_rf, tcinternal%pgrid_g, &
N_catl_vec, low_ind, rf2l, &
update_type, LandAssimDTstep, &
obs_param, &
met_force, lai, &
cat_param, cat_progn, mwRTM_param, &
Expand Down
401 changes: 360 additions & 41 deletions GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90

Large diffs are not rendered by default.

71 changes: 67 additions & 4 deletions GEOSlandassim_GridComp/clsm_ensupd_upd_routines.F90
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ subroutine read_ens_upd_inputs( &
type(obs_param_type), dimension(:), pointer :: obs_param ! output

logical, intent(out) :: out_obslog
logical, intent(out) :: out_ObsFcstAna
integer, intent(out) :: out_ObsFcstAna
logical, intent(out) :: out_smapL4SMaup

integer, intent(out) :: N_obsbias_max
Expand Down Expand Up @@ -272,6 +272,8 @@ subroutine read_ens_upd_inputs( &
character(len=400) :: err_msg
character(len= 6) :: tmpstring6
logical :: file_exists
integer :: ios
character(len=400) :: iomsg

! -----------------------------------------------------------------

Expand Down Expand Up @@ -300,8 +302,12 @@ subroutine read_ens_upd_inputs( &
if (logit) write (logunit,*)
if (logit) write (logunit,'(400A)') 'reading *default* EnKF inputs from ' // trim(fname)
if (logit) write (logunit,*)

read (10, nml=ens_upd_inputs)

read (10, nml=ens_upd_inputs, iostat=ios, iomsg=iomsg)
if (ios /= 0) then
err_msg = 'Error reading ens_upd_inputs. NOTE: "out_ObsFcstAna" must be integer. ' // trim(iomsg)
call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
end if

close(10,status='keep')

Expand All @@ -325,7 +331,13 @@ subroutine read_ens_upd_inputs( &
if (logit) write (logunit,'(400A)') 'reading *special* EnKF inputs from ' // trim(fname)
if (logit) write (logunit,*)

read (10, nml=ens_upd_inputs)
read (10, nml=ens_upd_inputs, iostat=ios, iomsg=iomsg)

! if read error, exit gracefully; hint at possible cause (out_ObsFcstAna changed from logical to integer, Apr 2026)
if (ios /= 0) then
err_msg = 'Error reading ens_upd_inputs. NOTE: "out_ObsFcstAna" must be integer. ' // trim(iomsg)
call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
end if

close(10,status='keep')

Expand All @@ -337,15 +349,63 @@ subroutine read_ens_upd_inputs( &
!
! none implemented so far (reichle, 19 Jul 2005)


! -----------------------------------------------------------------

! fill obs_param%fcstvarname and obs_param%fcstunits

do i=1,N_obs_species_nml

! expect "fcstvarname" and "fcstunits" to be 'NULL'; they are not meant to be filled by the user in the config nml file

if (trim(obs_param_nml(i)%fcstvarname) /= 'NULL' .and. trim(obs_param_nml(i)%fcstvarname) /= 'null') &
call ldas_abort(LDAS_GENERIC_ERROR, Iam, 'obs_param_nml%fcstvarname must be NULL on input')

if (trim(obs_param_nml(i)%fcstunits ) /= 'NULL' .and. trim(obs_param_nml(i)%fcstunits ) /= 'null') &
call ldas_abort(LDAS_GENERIC_ERROR, Iam, 'obs_param_nml%fcstunits must be NULL on input')

! IMPORTANT: Must maintain consistency in the mapping between obs and model variables
! that is encoded here with that in get_obs_pred().

select case (trim(obs_param_nml(i)%varname))

case ('sfmc', 'sfds')

! NOTE: 'sfds' is scaled into volumetric units of sfmc

obs_param_nml(i)%fcstvarname = 'sfmc'
obs_param_nml(i)%fcstunits = 'm3 m-3'

case ('rzmc', 'tsurf', 'FT', 'Tb', 'asnow', 'NULL')

obs_param_nml(i)%fcstvarname = obs_param_nml(i)%varname
obs_param_nml(i)%fcstunits = obs_param_nml(i)%units

case default

call ldas_abort(LDAS_GENERIC_ERROR, Iam, 'unknown obs_param_nml%varname')

end select

end do

! -----------------------------------------------------------------
!
! consistency checks etc

if (out_ObsFcstAna<0 .or. out_ObsFcstAna>3) then
write(tmpstring6,'(I6)') out_ObsFcstAna
err_msg = 'Unknown integer value of "out_ObsFcstAna": "' // trim(tmpstring6) // '". Use 0=OFF, 1=BIN, 2=NC4, 3=BIN and NC4.'
call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
end if

if (update_type==0) then
err_msg = 'executable was built for assimilation but update_type=0'
call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg)
end if

! obs bias init and checks

N_obsbias_max = 0 ! initialize

do i=1,N_obs_species_nml
Expand Down Expand Up @@ -1166,6 +1226,9 @@ subroutine get_obs_pred( &

do i=1,N_obs_param

! IMPORTANT: Must maintain consistency in the mapping between obs and model ("lH") variables
! that is encoded here with that in read_ens_upd_inputs().

select case (trim(obs_param(i)%varname))

case ('sfmc', 'sfds')
Expand Down
Loading
Loading