From 2f1638f126d010ee2f34aa4da5013ce14549d436 Mon Sep 17 00:00:00 2001 From: DavidBurrows-NCO <82525974+DavidBurrows-NCO@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:05:14 -0500 Subject: [PATCH 1/3] Update build scripts on Gaea-C5 to conform with ufs-wx-model and global-workflow (#1361) After the recent Gaea-C5 OS upgrade, GDASApp fails to build. This issue corrects Gaea-C5 build and updates the build scripts to conform to ufs-wx-model (following ufs-wx-model https://github.com/ufs-community/ufs-weather-model/pull/2448) and eventual global-workflow updates. Refs NOAA-EMC/global-workflow 3011 https://github.com/NOAA-EMC/global-workflow/issues/3011 Refs NOAA-EMC/global-workflow 3032 https://github.com/NOAA-EMC/global-workflow/pull/3032 Resolves #1360 --- build.sh | 2 +- .../GDAS/{gaea.intel.lua => gaeac5.intel.lua} | 0 ush/detect_machine.sh | 13 ++++++++----- 3 files changed, 9 insertions(+), 6 deletions(-) rename modulefiles/GDAS/{gaea.intel.lua => gaeac5.intel.lua} (100%) diff --git a/build.sh b/build.sh index 4ebb3666e..6445f80cf 100755 --- a/build.sh +++ b/build.sh @@ -71,7 +71,7 @@ while getopts "p:t:c:hvdfa" opt; do done case ${BUILD_TARGET} in - hera | orion | hercules | wcoss2 | noaacloud | gaea | gaeac6 ) + hera | orion | hercules | wcoss2 | noaacloud | gaeac5 | gaeac6 ) echo "Building GDASApp on $BUILD_TARGET" source $dir_root/ush/module-setup.sh module use $dir_root/modulefiles diff --git a/modulefiles/GDAS/gaea.intel.lua b/modulefiles/GDAS/gaeac5.intel.lua similarity index 100% rename from modulefiles/GDAS/gaea.intel.lua rename to modulefiles/GDAS/gaeac5.intel.lua diff --git a/ush/detect_machine.sh b/ush/detect_machine.sh index 997c394fa..ab039aebf 100755 --- a/ush/detect_machine.sh +++ b/ush/detect_machine.sh @@ -21,8 +21,8 @@ case $(hostname -f) in dlogin0[1-9].dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dogwood01-9 dlogin10.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dogwood10 - gaea5[1-8]) MACHINE_ID=gaea ;; ### gaea51-58 - gaea5[1-8].ncrc.gov) MACHINE_ID=gaea ;; ### gaea51-58 + gaea5[1-8]) MACHINE_ID=gaeac5 ;; ### gaea51-58 + gaea5[1-8].ncrc.gov) MACHINE_ID=gaeac5 ;; ### gaea51-58 gaea6[1-8]) MACHINE_ID=gaeac6 ;; ### gaea61-68 gaea6[1-8].ncrc.gov) MACHINE_ID=gaeac6 ;; ### gaea61-68 @@ -84,9 +84,12 @@ elif [[ -d /work ]]; then else MACHINE_ID=orion fi -elif [[ -d /gpfs && -d /ncrc ]]; then - # We are on GAEA. - MACHINE_ID=gaea +elif [[ -d /gpfs/f5 ]]; then + # We are on GAEAC5. + MACHINE_ID=gaeac5 +elif [[ -d /gpfs/f6 ]]; then + # We are on GAEAC6. + MACHINE_ID=gaeac6 elif [[ -d /data/prod ]]; then # We are on SSEC's S4 MACHINE_ID=s4 From e5d6563dcc44caa713e75f3626dadac76f3a955a Mon Sep 17 00:00:00 2001 From: Cory Martin Date: Wed, 6 Nov 2024 14:46:55 -0500 Subject: [PATCH 2/3] Use JCB for aerosol DA (#1343) What the title says. Depends on: https://github.com/NOAA-EMC/jcb-gdas/pull/33 https://github.com/NOAA-EMC/jcb-algorithms/pull/5 --- parm/aero/jcb-base.yaml.j2 | 136 ++++++++++++++++++++++++++ parm/aero/jcb-prototype_3dvar.yaml.j2 | 10 ++ parm/jcb-algorithms | 2 +- 3 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 parm/aero/jcb-base.yaml.j2 create mode 100644 parm/aero/jcb-prototype_3dvar.yaml.j2 diff --git a/parm/aero/jcb-base.yaml.j2 b/parm/aero/jcb-base.yaml.j2 new file mode 100644 index 000000000..86988206d --- /dev/null +++ b/parm/aero/jcb-base.yaml.j2 @@ -0,0 +1,136 @@ +# Search path for model and obs for JCB +# ------------------------------------- +algorithm_path: "{{PARMgfs}}/gdas/jcb-algorithms" +app_path_algorithm: "{{PARMgfs}}/gdas/jcb-gdas/algorithm/aero" +app_path_model: "{{PARMgfs}}/gdas/jcb-gdas/model/aero" +app_path_observations: "{{PARMgfs}}/gdas/jcb-gdas/observations/aero" +app_path_observation_chronicle: "{{PARMgfs}}/gdas/jcb-gdas/observation_chronicle/aero" + + +# Places where we deviate from the generic file name of a yaml +# ------------------------------------------------------------ +final_increment_to_latlon_file: aero_final_increment_gaussian +final_increment_file: aero_final_increment_cubed_sphere +model_file: aero_model_pseudo +initial_condition_file: aero_background # Initial conditions for 4D apps is background +background_error_file: "{{BERROR_YAML}}" + +# Assimilation standard things (not prepended with model choice) +# ---------------------------- +window_begin: "{{ AERO_WINDOW_BEGIN | to_isotime }}" +window_length: "{{ AERO_WINDOW_LENGTH }}" +bound_to_include: begin +minimizer: DRPCG +final_diagnostics_departures: anlmob +final_prints_frequency: PT3H +number_of_outer_loops: 2 +analysis_variables: [mass_fraction_of_sulfate_in_air, + mass_fraction_of_hydrophobic_black_carbon_in_air, + mass_fraction_of_hydrophilic_black_carbon_in_air, + mass_fraction_of_hydrophobic_organic_carbon_in_air, + mass_fraction_of_hydrophilic_organic_carbon_in_air, + mass_fraction_of_dust001_in_air, mass_fraction_of_dust002_in_air, + mass_fraction_of_dust003_in_air, mass_fraction_of_dust004_in_air, + mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air, + mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air, + mass_fraction_of_sea_salt004_in_air] + +# Model things +# ------------ +# Geometry +aero_layout_x: {{ layout_x | default(1, true) }} +aero_layout_y: {{ layout_y | default(1, true) }} +aero_npx_ges: {{ npx_ges | default(49, true) }} +aero_npy_ges: {{ npy_ges | default(49, true) }} +aero_npz_ges: {{ npz_ges | default(127, true) }} +aero_npx_anl: {{ npx_anl | default(49, true) }} +aero_npy_anl: {{ npy_anl | default(49, true) }} +aero_npz_anl: {{ npz_anl | default(127, true) }} +aero_npx_clim_b: {{ npx_clim_b | default(49, true) }} +aero_npy_clim_b: {{ npy_clim_b | default(49, true) }} +aero_npz_clim_b: {{ npz_anl | default(127, true) }} + +aero_fv3jedi_files_path: ./fv3jedi # Ideally this would be {{DATA}}/fv3jedi but FMS + +# Background +aero_background_path: ./bkg +aero_background_ensemble_path: ./ens/mem%mem% + +# Default background time is for 3D applications +{% if DOIAU == True %} +aero_background_time_iso: "{{ AERO_WINDOW_BEGIN | to_isotime }}" +{% else %} +aero_background_time_iso: "{{ current_cycle | to_isotime }}" +{% endif %} +aero_cycle_time_iso: "{{ current_cycle | to_isotime }}" +aero_cycle_time_fv3: "{{ current_cycle | to_fv3time }}" + +# time for background error calculation for next cycle +{% set offset_td = "+6H" | to_timedelta %} +{% set background_time = current_cycle | add_to_datetime(offset_td) %} +aero_background_error_time_iso: "{{ background_time | to_isotime }}" +aero_background_error_time_fv3: "{{ background_time | to_fv3time }}" + +# Background error +aero_berror_data_directory: "{{ DATA }}/berror" +aero_berror_diffusion_directory: "{{ DATA }}/diffusion" +aero_standard_devation_path: ./stddev +aero_climatological_b_path: ./clm_stddev +aero_diagb_weight: {{ aero_diagb_weight | default(1.0, true) }} +aero_diagb_static_rescale_factor: {{aero_staticb_rescaling_factor | default(1.0, true) }} +aero_diagb_rescale_factor: {{aero_diagb_rescale | default(1.0, true) }} +aero_diagb_n_halo: {{ aero_diagb_n_halo | default(1, true) }} +aero_diagb_n_neighbors: {{ aero_diagb_n_neighbors | default(1, true) }} +aero_diagb_smooth_horiz_iter: {{ aero_diagb_smooth_horiz_iter | default(1, true) }} +aero_diagb_smooth_vert_iter: {{ aero_diagb_smooth_vert_iter | default(1, true) }} +aero_diffusion_iter: {{ aero_diffusion_iter | default(1, true) }} +aero_diffusion_horiz_len: {{ aero_diffusion_horiz_len | default(1.0, true)}} +aero_diffusion_fixed_val: {{ aero_diffusion_fixed_val | default(1.0, true)}} + +# Forecasting +aero_forecast_timestep: "{{ BKG_TSTEP }}" + +# Observation things +# ------------------ +observations: all_observations + +crtm_coefficient_path: "{{ DATA }}/crtm/" + +# Naming conventions for observational files +aero_obsdataroot_path: "{{COM_OBS}}" + +aero_obsdatain_path: "{{aero_obsdatain_path}}" +aero_obsdatain_prefix: "{{OPREFIX}}" +aero_obsdatain_suffix: ".tm00.nc" + +aero_obsdataout_path: "{{aero_obsdataout_path}}" +aero_obsdataout_prefix: diag_ +aero_obsdataout_suffix: "_{{ current_cycle | to_YMDH }}.nc" + +# Naming conventions for bias correction files +aero_obsbiasroot_path: "{{COM_CHEM_ANALYSIS_PREV}}" + +aero_obsbiasin_path: "{{DATA}}/obs/" +aero_obsbiasin_prefix: "{{GPREFIX}}" +aero_obsbiasin_suffix: ".satbias.nc" +aero_obstlapsein_prefix: "{{GPREFIX}}" +aero_obstlapsein_suffix: ".tlapse.txt" +aero_obsbiascovin_prefix: "{{GPREFIX}}" +aero_obsbiascovin_suffix: ".satbias_cov.nc" + +aero_obsbiasout_path: "{{DATA}}/bc/" +aero_obsbiasout_prefix: "{{APREFIX}}" +aero_obsbiasout_suffix: ".satbias.nc" +aero_obsbiascovout_prefix: "{{APREFIX}}" +aero_obsbiascovout_suffix: ".satbias_cov.nc" + +bias_files: + atms_n20: rad_varbc_params.tar + atms_npp: rad_varbc_params.tar + mtiasi_metop-a: rad_varbc_params.tar + mtiasi_metop-b: rad_varbc_params.tar + amsua_n19: rad_varbc_params.tar + ssmis_f17: rad_varbc_params.tar + ssmis_f18: rad_varbc_params.tar + cris-fsr_n20: rad_varbc_params.tar + cris-fsr_npp: rad_varbc_params.tar diff --git a/parm/aero/jcb-prototype_3dvar.yaml.j2 b/parm/aero/jcb-prototype_3dvar.yaml.j2 new file mode 100644 index 000000000..da4739bca --- /dev/null +++ b/parm/aero/jcb-prototype_3dvar.yaml.j2 @@ -0,0 +1,10 @@ +# Algorithm +# --------- +algorithm: 3dfgat + +# Observation things +# ------------------ +observations: +- viirs_n20_aod +- viirs_npp_aod +# - viirs_n21_aod diff --git a/parm/jcb-algorithms b/parm/jcb-algorithms index a6822d8c1..43d8ff6ba 160000 --- a/parm/jcb-algorithms +++ b/parm/jcb-algorithms @@ -1 +1 @@ -Subproject commit a6822d8c1e72f6b1bf951e378b153cb6df1faee5 +Subproject commit 43d8ff6ba14baf9402ee58d0f3351a143c21211b From 5bb63e7428280e9e876b44e14889c4c08b7b3338 Mon Sep 17 00:00:00 2001 From: emilyhcliu <36091766+emilyhcliu@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:22:16 -0500 Subject: [PATCH 3/3] Rename mtiasi to iasi (#1292) 1. Rename mtiasi to iasi in GDASApp 2. There is a companion [PR #29](https://github.com/NOAA-EMC/jcb-gdas/pull/29) in jcb-gdas - rename mtiasi to iasi - add `reduce obs space` - remove obsolete QC-flag related variables in filters This partly resolves Issue #1291 Co-authored-by: Emily Liu Co-authored-by: Cory Martin --- parm/atm/jcb-prototype_3dvar.yaml.j2 | 4 ++-- parm/atm/jcb-prototype_lgetkf.yaml.j2 | 4 ++-- parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 | 4 ++-- parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 | 4 ++-- .../bufr2ioda/{bufr2ioda_mtiasi.yaml => bufr2ioda_iasi.yaml} | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) rename parm/ioda/bufr2ioda/{bufr2ioda_mtiasi.yaml => bufr2ioda_iasi.yaml} (98%) diff --git a/parm/atm/jcb-prototype_3dvar.yaml.j2 b/parm/atm/jcb-prototype_3dvar.yaml.j2 index 152683110..1975c1f05 100644 --- a/parm/atm/jcb-prototype_3dvar.yaml.j2 +++ b/parm/atm/jcb-prototype_3dvar.yaml.j2 @@ -16,8 +16,8 @@ observations: - conventional_ps - gnssro # - gpsro -# - mtiasi_metop-a -# - mtiasi_metop-b +# - iasi_metop-a +# - iasi_metop-b # - ompsnp_n20 - ompsnp_npp # - ompstc_n20 diff --git a/parm/atm/jcb-prototype_lgetkf.yaml.j2 b/parm/atm/jcb-prototype_lgetkf.yaml.j2 index a1b099bb6..2ed04df3b 100644 --- a/parm/atm/jcb-prototype_lgetkf.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf.yaml.j2 @@ -25,8 +25,8 @@ observations: - conventional_ps - gnssro # - gpsro -# - mtiasi_metop-a -# - mtiasi_metop-b +# - iasi_metop-a +# - iasi_metop-b # - ompsnp_n20 - ompsnp_npp # - ompstc_n20 diff --git a/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 b/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 index 26654b175..4b800ac8f 100644 --- a/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 @@ -25,8 +25,8 @@ observations: - conventional_ps - gnssro # - gpsro -# - mtiasi_metop-a -# - mtiasi_metop-b +# - iasi_metop-a +# - iasi_metop-b # - ompsnp_n20 - ompsnp_npp # - ompstc_n20 diff --git a/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 b/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 index 677934158..b5123dde9 100644 --- a/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 @@ -25,8 +25,8 @@ observations: - conventional_ps - gnssro # - gpsro -# - mtiasi_metop-a -# - mtiasi_metop-b +# - iasi_metop-a +# - iasi_metop-b # - ompsnp_n20 - ompsnp_npp # - ompstc_n20 diff --git a/parm/ioda/bufr2ioda/bufr2ioda_mtiasi.yaml b/parm/ioda/bufr2ioda/bufr2ioda_iasi.yaml similarity index 98% rename from parm/ioda/bufr2ioda/bufr2ioda_mtiasi.yaml rename to parm/ioda/bufr2ioda/bufr2ioda_iasi.yaml index c15df2b62..c11e147c6 100755 --- a/parm/ioda/bufr2ioda/bufr2ioda_mtiasi.yaml +++ b/parm/ioda/bufr2ioda/bufr2ioda_iasi.yaml @@ -94,7 +94,7 @@ observations: ioda: backend: netcdf - obsdataout: "{{ COM_OBS }}/{{ RUN }}.t{{ cyc }}z.mtiasi_$(splitvar).tm00.nc" + obsdataout: "{{ COM_OBS }}/{{ RUN }}.t{{ cyc }}z.iasi_$(splitvar).tm00.nc" dimensions: - name: Channel