From 48273dec91a14210b3a6f97a9f7400e394bd1ece Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA <134300700+DavidNew-NOAA@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:02:28 -0500 Subject: [PATCH 1/7] Make do_testing an optional parameter (#44) Does the same thing as jcb-algorithms PR [#8](https://github.com/NOAA-EMC/jcb-algorithms/pull/8) --- algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 | 2 +- algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 b/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 index bb53866..723abc6 100644 --- a/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 +++ b/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 @@ -64,7 +64,7 @@ members from template: zero padding: 3 # Optionally test the application -{% if do_testing %} +{% if do_testing | default(false) %} test: reference filename: {{test_reference_filename}} {% if test_output_filename is defined %} diff --git a/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 b/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 index f0d06a6..b795b06 100644 --- a/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 +++ b/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 @@ -60,7 +60,7 @@ members: filename: ./anl/atminc. # Optionally test the application -{% if do_testing %} +{% if do_testing | default(false) %} test: reference filename: {{test_reference_filename}} {% if test_output_filename is defined %} From c41e7d7aca3f4053b177709adaa66488f3643980 Mon Sep 17 00:00:00 2001 From: RussTreadon-NOAA <26926959+RussTreadon-NOAA@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:45:30 -0500 Subject: [PATCH 2/7] Update variables to be consistent with updated jedi hashes (#45) This PR updates variables to be consistent with the updated jedi hashes in GDASApp branch [`feature/resume_nightly`](https://github.com/NOAA-EMC/GDASApp/tree/feature/resume_nightly) Resolves #43 --- algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 | 2 +- .../atmosphere/fv3jedi_fv3inc_variational.yaml.j2 | 2 +- algorithm/marine/soca_2cice_antarctic.yaml.j2 | 4 ++-- algorithm/marine/soca_2cice_arctic.yaml.j2 | 4 ++-- algorithm/marine/soca_diagb.yaml.j2 | 2 +- .../marine/soca_parameters_diffusion_hz.yaml.j2 | 4 ++-- .../marine/soca_parameters_diffusion_vt.yaml.j2 | 4 ++-- algorithm/marine/soca_setcorscales.yaml.j2 | 4 ++-- algorithm/marine/socaincr2mom6.yaml.j2 | 4 ++-- model/atmosphere/atmosphere_background.yaml.j2 | 4 ++-- .../atmosphere_background_ensemble.yaml.j2 | 4 ++-- ...phere_background_error_hybrid_gsibec_bump.yaml.j2 | 12 ++++++------ ...atmosphere_background_error_static_gsibec.yaml.j2 | 4 ++-- model/marine/marine_background.yaml.j2 | 2 +- .../marine_background_error_static_diffusion.yaml.j2 | 8 ++++---- .../atmosphere-lgetkf/ascatw.ascat_metop-b.yaml.j2 | 2 +- .../atmosphere-lgetkf/conventional_ps.yaml.j2 | 4 ++-- .../atmosphere-lgetkf/satwnd.abi_goes-16.yaml.j2 | 2 +- observations/atmosphere/ascatw.ascat_metop-b.yaml.j2 | 2 +- observations/atmosphere/conventional_ps.yaml.j2 | 4 ++-- observations/atmosphere/satwnd.abi_goes-16.yaml.j2 | 2 +- .../atmosphere/scatwind_ascat_metop-a.yaml.j2 | 2 +- observations/atmosphere/sondes.yaml.j2 | 4 ++-- 23 files changed, 43 insertions(+), 43 deletions(-) diff --git a/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 b/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 index 723abc6..576a133 100644 --- a/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 +++ b/algorithm/atmosphere/fv3jedi_fv3inc_lgetkf.yaml.j2 @@ -1,6 +1,6 @@ variable change: variable change name: Model2GeoVaLs - input variables: &bkgvars [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr,surface_geopotential_height] + input variables: &bkgvars [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr,hgtsfc] output variables: &fv3incrvars [ua,va,t,sphum,ice_wat,liq_wat,o3mr,delp,delz] jedi increment variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] fv3 increment variables: *fv3incrvars diff --git a/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 b/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 index b795b06..dd60ebb 100644 --- a/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 +++ b/algorithm/atmosphere/fv3jedi_fv3inc_variational.yaml.j2 @@ -1,6 +1,6 @@ variable change: variable change name: Model2GeoVaLs - input variables: &bkgvars [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr,surface_geopotential_height] + input variables: &bkgvars [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr,hgtsfc] output variables: &fv3incrvars [ua,va,t,sphum,ice_wat,liq_wat,o3mr,delp,delz] jedi increment variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] fv3 increment variables: *fv3incrvars diff --git a/algorithm/marine/soca_2cice_antarctic.yaml.j2 b/algorithm/marine/soca_2cice_antarctic.yaml.j2 index 73fa367..c740c53 100644 --- a/algorithm/marine/soca_2cice_antarctic.yaml.j2 +++ b/algorithm/marine/soca_2cice_antarctic.yaml.j2 @@ -26,7 +26,7 @@ variable change: tstep: PT1H cice output: restart: {{ ice_rst }} - output variables: [tocn, socn, hocn, cicen, hicen, hsnon] + output variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] states: - input: @@ -35,7 +35,7 @@ states: ocn_filename: {{ ocn_ana }} ice_filename: {{ ice_ana }} date: '{{ fcst_begin }}' - state variables: [tocn, socn, hocn, cicen, hicen, hsnon] + state variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] output: datadir: Data exp: soca2cice diff --git a/algorithm/marine/soca_2cice_arctic.yaml.j2 b/algorithm/marine/soca_2cice_arctic.yaml.j2 index e686eea..178b8fa 100644 --- a/algorithm/marine/soca_2cice_arctic.yaml.j2 +++ b/algorithm/marine/soca_2cice_arctic.yaml.j2 @@ -23,7 +23,7 @@ variable change: tstep: PT1H cice output: restart: {{ ice_rst }} - output variables: [tocn, socn, hocn, cicen, hicen, hsnon] + output variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] states: - input: @@ -32,7 +32,7 @@ states: ocn_filename: {{ ocn_ana }} ice_filename: {{ ice_ana }} date: '{{ fcst_begin }}' - state variables: [tocn, socn, hocn, cicen, hicen, hsnon] + state variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] output: datadir: Data exp: soca2cice diff --git a/algorithm/marine/soca_diagb.yaml.j2 b/algorithm/marine/soca_diagb.yaml.j2 index 7d8e0d6..02633ac 100644 --- a/algorithm/marine/soca_diagb.yaml.j2 +++ b/algorithm/marine/soca_diagb.yaml.j2 @@ -18,7 +18,7 @@ background error: type: incr variables: - name: [tocn, socn, uocn, vocn, hocn, ssh, cicen, hicen, hsnon, mom6_mld] + name: [sea_water_potential_temperature, sea_water_salinity, eastward_sea_water_velocity, northward_sea_water_velocity, sea_water_cell_thickness, sea_surface_height_above_geoid, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, mom6_mld] rescale: 2.0 # rescales the filtered std. dev. by "rescale" min sst: 0.0 # Added to sst bkg. err. diff --git a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 index d313e46..c79d469 100644 --- a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 +++ b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 @@ -8,7 +8,7 @@ background: ocn_filename: MOM.res.nc ice_filename: cice.res.nc date: '{{ marine_window_end_iso }}' - state variables: [ssh] + state variables: [sea_surface_height_above_geoid] background error: covariance model: SABER @@ -26,7 +26,7 @@ background error: date: '{{ marine_window_end_iso }}' basename: ./ ocn_filename: ocn.cor_rh.incr.0001-01-01T00:00:00Z.nc - model variable: ssh + model variable: sea_surface_height_above_geoid write: filepath: ./staticb/hz_ocean diff --git a/algorithm/marine/soca_parameters_diffusion_vt.yaml.j2 b/algorithm/marine/soca_parameters_diffusion_vt.yaml.j2 index 07f56de..8e23f2d 100644 --- a/algorithm/marine/soca_parameters_diffusion_vt.yaml.j2 +++ b/algorithm/marine/soca_parameters_diffusion_vt.yaml.j2 @@ -8,7 +8,7 @@ background: ocn_filename: MOM.res.nc ice_filename: cice.res.nc date: '{{ marine_window_middle_iso }}' - state variables: [tocn] + state variables: [sea_water_potential_temperature] background error: covariance model: SABER @@ -29,6 +29,6 @@ background error: date: '{{ marine_window_middle_iso }}' basename: ./ ocn_filename: vt_scales.nc - model variable: tocn + model variable: sea_water_potential_temperature write: filepath: ./staticb/vt_ocean diff --git a/algorithm/marine/soca_setcorscales.yaml.j2 b/algorithm/marine/soca_setcorscales.yaml.j2 index b7b80a7..c1a1ec8 100644 --- a/algorithm/marine/soca_setcorscales.yaml.j2 +++ b/algorithm/marine/soca_setcorscales.yaml.j2 @@ -4,11 +4,11 @@ resolution: date: "0001-01-01T00:00:00Z" -corr variables: [ssh] +corr variables: [sea_surface_height_above_geoid] scales: vert layers: 5 # in units of layer - ssh: + sea_surface_height_above_geoid: rossby mult: 1.00 min grid mult: 2.0 diff --git a/algorithm/marine/socaincr2mom6.yaml.j2 b/algorithm/marine/socaincr2mom6.yaml.j2 index ececb6b..deaec76 100644 --- a/algorithm/marine/socaincr2mom6.yaml.j2 +++ b/algorithm/marine/socaincr2mom6.yaml.j2 @@ -4,9 +4,9 @@ geometry: date: '{{ marine_window_begin }}' -layers variable: [hocn] +layers variable: [sea_water_cell_thickness] -increment variables: [tocn, socn, uocn, vocn, ssh] +increment variables: [sea_water_potential_temperature, sea_water_salinity, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] vertical geometry: date: '{{ marine_window_begin }}' diff --git a/model/atmosphere/atmosphere_background.yaml.j2 b/model/atmosphere/atmosphere_background.yaml.j2 index 580fc68..24a45f4 100644 --- a/model/atmosphere/atmosphere_background.yaml.j2 +++ b/model/atmosphere/atmosphere_background.yaml.j2 @@ -5,6 +5,6 @@ ufs soil nlev: 4 ufs fields split by level: [smc,stc] datetime: "{{ atmosphere_background_time_iso }}" filenames: [ {{ atmosphere_variational_history_prefix }}cubed_sphere_grid_atmf006.nc, {{ atmosphere_variational_history_prefix }}cubed_sphere_grid_sfcf006.nc ] -state variables: [ua,va,t,delp,ps,sphum,ice_wat,liq_wat,o3mr,surface_geopotential_height, - slmsk,sheleg,tsea,vtype,stype,vfrac,stc,smc,snwdphMeters, +state variables: [ua,va,t,delp,ps,sphum,ice_wat,liq_wat,o3mr,hgtsfc, + slmsk,sheleg,tmpsfc,vtype,stype,vfrac,stc,smc,snwdphMeters, u_srf,v_srf,f10m] diff --git a/model/atmosphere/atmosphere_background_ensemble.yaml.j2 b/model/atmosphere/atmosphere_background_ensemble.yaml.j2 index 16b980e..2167885 100644 --- a/model/atmosphere/atmosphere_background_ensemble.yaml.j2 +++ b/model/atmosphere/atmosphere_background_ensemble.yaml.j2 @@ -6,8 +6,8 @@ members from template: provider: ufs ufs soil nlev: 4 ufs fields split by level: [smc,stc] - state variables: [ua,va,t,delz,delp,ps,sphum,ice_wat,liq_wat,o3mr,surface_geopotential_height, - slmsk,sheleg,tsea,vtype,stype,vfrac,stc,smc,snwdphMeters, + state variables: [ua,va,t,delz,delp,ps,sphum,ice_wat,liq_wat,o3mr,hgtsfc, + slmsk,sheleg,tmpsfc,vtype,stype,vfrac,stc,smc,snwdphMeters, u_srf,v_srf,f10m] datapath: {{ atmosphere_background_ensemble_path }} filename is datetime templated: true diff --git a/model/atmosphere/atmosphere_background_error_hybrid_gsibec_bump.yaml.j2 b/model/atmosphere/atmosphere_background_error_hybrid_gsibec_bump.yaml.j2 index e5b06aa..5880917 100644 --- a/model/atmosphere/atmosphere_background_error_hybrid_gsibec_bump.yaml.j2 +++ b/model/atmosphere/atmosphere_background_error_hybrid_gsibec_bump.yaml.j2 @@ -21,8 +21,8 @@ components: debugging mode: false linear variable change: linear variable change name: Control2Analysis - input variables: [eastward_wind,northward_wind,air_temperature,surface_pressure, - specific_humidity,cloud_liquid_ice,cloud_liquid_water, + input variables: [eastward_wind,northward_wind,air_temperature,air_pressure_at_surface, + water_vapor_mixing_ratio_wrt_moist_air,cloud_liquid_ice,cloud_liquid_water, mole_fraction_of_ozone_in_air] output variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] weight: @@ -45,8 +45,8 @@ components: localization method: SABER saber central block: saber block name: BUMP_NICAS - active variables: [eastward_wind,northward_wind,air_temperature,surface_pressure, - specific_humidity,cloud_liquid_ice,cloud_liquid_water, + active variables: [eastward_wind,northward_wind,air_temperature,air_pressure_at_surface, + water_vapor_mixing_ratio_wrt_moist_air,cloud_liquid_ice,cloud_liquid_water, ozone_mass_mixing_ratio ] read: general: @@ -198,8 +198,8 @@ components: value: 0.3 linear variable change: linear variable change name: Control2Analysis - input variables: [eastward_wind,northward_wind,air_temperature,surface_pressure, - specific_humidity,cloud_liquid_ice,cloud_liquid_water, + input variables: [eastward_wind,northward_wind,air_temperature,air_pressure_at_surface, + water_vapor_mixing_ratio_wrt_moist_air,cloud_liquid_ice,cloud_liquid_water, ozone_mass_mixing_ratio ] output variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] weight: diff --git a/model/atmosphere/atmosphere_background_error_static_gsibec.yaml.j2 b/model/atmosphere/atmosphere_background_error_static_gsibec.yaml.j2 index 242ce4f..1133aaf 100644 --- a/model/atmosphere/atmosphere_background_error_static_gsibec.yaml.j2 +++ b/model/atmosphere/atmosphere_background_error_static_gsibec.yaml.j2 @@ -19,7 +19,7 @@ saber outer blocks: debugging mode: false linear variable change: linear variable change name: Control2Analysis - input variables: [eastward_wind,northward_wind,air_temperature,surface_pressure, - specific_humidity,cloud_liquid_ice,cloud_liquid_water, + input variables: [eastward_wind,northward_wind,air_temperature,air_pressure_at_surface, + water_vapor_mixing_ratio_wrt_moist_air,cloud_liquid_ice,cloud_liquid_water, mole_fraction_of_ozone_in_air] output variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] diff --git a/model/marine/marine_background.yaml.j2 b/model/marine/marine_background.yaml.j2 index d0047e8..205f583 100644 --- a/model/marine/marine_background.yaml.j2 +++ b/model/marine/marine_background.yaml.j2 @@ -3,4 +3,4 @@ basename: {{ marine_background_path}} ocn_filename: MOM.res.nc ice_filename: cice.res.nc date: "{{ marine_background_time }}" -state variables: [cicen, hicen, hsnon, socn, tocn, uocn, vocn, ssh, hocn, mld, layer_depth] +state variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid, sea_water_cell_thickness, ocean_mixed_layer_thickness, sea_water_depth] diff --git a/model/marine/marine_background_error_static_diffusion.yaml.j2 b/model/marine/marine_background_error_static_diffusion.yaml.j2 index bb5de61..0c57790 100644 --- a/model/marine/marine_background_error_static_diffusion.yaml.j2 +++ b/model/marine/marine_background_error_static_diffusion.yaml.j2 @@ -3,13 +3,13 @@ saber central block: saber block name: diffusion read: groups: - - variables: [tocn, socn, ssh] + - variables: [sea_water_potential_temperature, sea_water_salinity, sea_surface_height_above_geoid] horizontal: filepath: ./staticb/hz_ocean vertical: levels: {{marine_vt_levels}} filepath: ./staticb/vt_ocean - - variables: [cicen] + - variables: [sea_ice_area_fraction] horizontal: filepath: ./staticb/hz_ice @@ -24,7 +24,7 @@ saber outer blocks: read_from_file: 3 linear variable change: - input variables: [cicen, hicen, hsnon, socn, tocn, uocn, vocn, ssh] - output variables: [cicen, hicen, hsnon, socn, tocn, uocn, vocn, ssh] + input variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] + output variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] linear variable changes: - linear variable change name: BalanceSOCA diff --git a/observations/atmosphere-lgetkf/ascatw.ascat_metop-b.yaml.j2 b/observations/atmosphere-lgetkf/ascatw.ascat_metop-b.yaml.j2 index 35a8a06..831fb80 100644 --- a/observations/atmosphere-lgetkf/ascatw.ascat_metop-b.yaml.j2 +++ b/observations/atmosphere-lgetkf/ascatw.ascat_metop-b.yaml.j2 @@ -110,7 +110,7 @@ - variable: ObsType/windEastward is_in: 290 # - variable: GeoVaLs/surface_temperature - - variable: GeoVaLs/surface_temperature_where_land + - variable: GeoVaLs/skin_temperature_at_surface_where_land maxvalue: 273. action: name: reject diff --git a/observations/atmosphere-lgetkf/conventional_ps.yaml.j2 b/observations/atmosphere-lgetkf/conventional_ps.yaml.j2 index f094ca9..49f99a5 100644 --- a/observations/atmosphere-lgetkf/conventional_ps.yaml.j2 +++ b/observations/atmosphere-lgetkf/conventional_ps.yaml.j2 @@ -27,7 +27,7 @@ - name: stationPressure da_psfc_scheme: GSI station_altitude: height - geovar_sfc_geomz: surface_altitude + geovar_sfc_geomz: height_above_mean_sea_level_at_surface geovar_geomz: geopotential_height # Linear Observation Operator @@ -264,7 +264,7 @@ function: name: ObsFunction/ObsErrorFactorSfcPressure options: - geovar_sfc_geomz: surface_altitude + geovar_sfc_geomz: height_above_mean_sea_level_at_surface geovar_geomz: geopotential_height station_altitude: height diff --git a/observations/atmosphere-lgetkf/satwnd.abi_goes-16.yaml.j2 b/observations/atmosphere-lgetkf/satwnd.abi_goes-16.yaml.j2 index e5543ba..d3b214c 100644 --- a/observations/atmosphere-lgetkf/satwnd.abi_goes-16.yaml.j2 +++ b/observations/atmosphere-lgetkf/satwnd.abi_goes-16.yaml.j2 @@ -448,7 +448,7 @@ - variable: name: ObsType/windEastward is_in: 247 - reference: GeoVaLs/surface_pressure + reference: GeoVaLs/air_pressure_at_surface value: MetaData/pressure maxvalue: -11000. # within 110 hPa above surface pressure, negative p-diff action: diff --git a/observations/atmosphere/ascatw.ascat_metop-b.yaml.j2 b/observations/atmosphere/ascatw.ascat_metop-b.yaml.j2 index bb3d5de..88ee802 100644 --- a/observations/atmosphere/ascatw.ascat_metop-b.yaml.j2 +++ b/observations/atmosphere/ascatw.ascat_metop-b.yaml.j2 @@ -107,7 +107,7 @@ - variable: ObsType/windEastward is_in: 290 # - variable: GeoVaLs/surface_temperature - - variable: GeoVaLs/surface_temperature_where_land + - variable: GeoVaLs/skin_temperature_at_surface_where_land maxvalue: 273. action: name: reject diff --git a/observations/atmosphere/conventional_ps.yaml.j2 b/observations/atmosphere/conventional_ps.yaml.j2 index d8d90f9..1ecd386 100644 --- a/observations/atmosphere/conventional_ps.yaml.j2 +++ b/observations/atmosphere/conventional_ps.yaml.j2 @@ -24,7 +24,7 @@ - name: stationPressure da_psfc_scheme: GSI station_altitude: height - geovar_sfc_geomz: surface_altitude + geovar_sfc_geomz: height_above_mean_sea_level_at_surface geovar_geomz: geopotential_height # Linear Observation Operator @@ -261,7 +261,7 @@ function: name: ObsFunction/ObsErrorFactorSfcPressure options: - geovar_sfc_geomz: surface_altitude + geovar_sfc_geomz: height_above_mean_sea_level_at_surface geovar_geomz: geopotential_height station_altitude: height diff --git a/observations/atmosphere/satwnd.abi_goes-16.yaml.j2 b/observations/atmosphere/satwnd.abi_goes-16.yaml.j2 index e01f17c..94b0458 100644 --- a/observations/atmosphere/satwnd.abi_goes-16.yaml.j2 +++ b/observations/atmosphere/satwnd.abi_goes-16.yaml.j2 @@ -445,7 +445,7 @@ - variable: name: ObsType/windEastward is_in: 247 - reference: GeoVaLs/surface_pressure + reference: GeoVaLs/air_pressure_at_surface value: MetaData/pressure maxvalue: -11000. # within 110 hPa above surface pressure, negative p-diff action: diff --git a/observations/atmosphere/scatwind_ascat_metop-a.yaml.j2 b/observations/atmosphere/scatwind_ascat_metop-a.yaml.j2 index 0c1a745..774fef9 100644 --- a/observations/atmosphere/scatwind_ascat_metop-a.yaml.j2 +++ b/observations/atmosphere/scatwind_ascat_metop-a.yaml.j2 @@ -107,7 +107,7 @@ - variable: ObsType/windEastward is_in: 290 # - variable: GeoVaLs/surface_temperature - - variable: GeoVaLs/surface_temperature_where_land + - variable: GeoVaLs/skin_temperature_at_surface_where_land maxvalue: 273. action: name: reject diff --git a/observations/atmosphere/sondes.yaml.j2 b/observations/atmosphere/sondes.yaml.j2 index aff438b..224c814 100644 --- a/observations/atmosphere/sondes.yaml.j2 +++ b/observations/atmosphere/sondes.yaml.j2 @@ -34,7 +34,7 @@ - name: specificHumidity - name: SfcPCorrected da_psfc_scheme: GSI - geovar_sfc_geomz: surface_geopotential_height + geovar_sfc_geomz: geopotential_height_at_surface geovar_geomz: geopotential_height variables: - name: stationPressure @@ -106,7 +106,7 @@ error_min: 100.0 # 1 mb error_max: 300.0 # 3 mb geovar_geomz: geopotential_height - geovar_sfc_geomz: surface_geopotential_height + geovar_sfc_geomz: geopotential_height_at_surface # # Gross error check with (O - B) / ObsError greater than threshold - filter: Background Check From 77fdc329d45b54529499f4033851e50e1dee0697 Mon Sep 17 00:00:00 2001 From: Anna Shlyaeva Date: Thu, 21 Nov 2024 12:06:39 -0700 Subject: [PATCH 3/7] Add soca->cice global file (#47) --- algorithm/marine/soca_2cice_arctic.yaml.j2 | 40 ------------------- ...ctic.yaml.j2 => soca_2cice_global.yaml.j2} | 25 +++++++----- 2 files changed, 14 insertions(+), 51 deletions(-) delete mode 100644 algorithm/marine/soca_2cice_arctic.yaml.j2 rename algorithm/marine/{soca_2cice_antarctic.yaml.j2 => soca_2cice_global.yaml.j2} (76%) diff --git a/algorithm/marine/soca_2cice_arctic.yaml.j2 b/algorithm/marine/soca_2cice_arctic.yaml.j2 deleted file mode 100644 index 178b8fa..0000000 --- a/algorithm/marine/soca_2cice_arctic.yaml.j2 +++ /dev/null @@ -1,40 +0,0 @@ -input geometry: - mom6_input_nml: mom_input.nml - fields metadata: ./fields_metadata.yaml - -output geometry: - mom6_input_nml: mom_input.nml - fields metadata: ./fields_metadata.yaml - -variable change: - variable change name: Soca2Cice - do inverse: false - seaice edge: 0.8 - shuffle: false - rescale prior: - min hice: 0.5 - min hsno: 0.1 - domain: arctic - cice background state: - restart: {{ ice_rst }} - ncat: 5 - ice_lev: 7 - sno_lev: 1 - tstep: PT1H - cice output: - restart: {{ ice_rst }} - output variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] - -states: -- input: - read_from_file: 1 - basename: ./ - ocn_filename: {{ ocn_ana }} - ice_filename: {{ ice_ana }} - date: '{{ fcst_begin }}' - state variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] - output: - datadir: Data - exp: soca2cice - type: fc - date: '{{ fcst_begin }}' diff --git a/algorithm/marine/soca_2cice_antarctic.yaml.j2 b/algorithm/marine/soca_2cice_global.yaml.j2 similarity index 76% rename from algorithm/marine/soca_2cice_antarctic.yaml.j2 rename to algorithm/marine/soca_2cice_global.yaml.j2 index c740c53..0798d02 100644 --- a/algorithm/marine/soca_2cice_antarctic.yaml.j2 +++ b/algorithm/marine/soca_2cice_global.yaml.j2 @@ -1,29 +1,32 @@ input geometry: mom6_input_nml: mom_input.nml fields metadata: fields_metadata.yaml - geom_grid_file: soca_gridspec.nc output geometry: mom6_input_nml: mom_input.nml fields metadata: fields_metadata.yaml - geom_grid_file: soca_gridspec.nc variable change: variable change name: Soca2Cice - do inverse: false - seaice edge: 0.9 - shuffle: false # seg. fault when true - rescale prior: - min hice: 0.5 - min hsno: 0.1 - domain: antarctic + arctic: + seaice edge: 0.8 + shuffle: false + rescale prior: + rescale: true + min hice: 0.5 + min hsno: 0.1 + antarctic: + seaice edge: 0.9 + shuffle: false # seg. fault when true + rescale prior: + rescale: true + min hice: 0.5 + min hsno: 0.1 cice background state: restart: {{ ice_rst }} - grid: ' ' ncat: 5 ice_lev: 7 sno_lev: 1 - tstep: PT1H cice output: restart: {{ ice_rst }} output variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] From 7d406643316163faf27d5b269a3313cdb08a50ce Mon Sep 17 00:00:00 2001 From: Cory Martin Date: Tue, 26 Nov 2024 14:37:02 -0500 Subject: [PATCH 4/7] more changes for switching aerosol DA to JCB (#48) --- algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 | 21 ++++++++++++++++++- algorithm/aero/aero_obs_staging.yaml.j2 | 8 +++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 algorithm/aero/aero_obs_staging.yaml.j2 diff --git a/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 index d1f3eda..d90756e 100644 --- a/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 +++ b/algorithm/aero/aero_gen_bmatrix_diagb.yaml.j2 @@ -73,7 +73,26 @@ variables: - mass_fraction_of_sea_salt003_in_air - mass_fraction_of_sea_salt004_in_air -rescale: {{ aero_diagb_rescale_factor }} # rescales the filtered std. dev. by "rescale" +global rescale: + geometry: + fms initialization: + namelist filename: "{{aero_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{aero_fv3jedi_files_path}}/field_table" + akbk: "{{aero_fv3jedi_files_path}}/akbk.nc4" + layout: + - {{ aero_layout_x }} + - {{ aero_layout_y }} + npx: {{ aero_npx_clim_b }} + npy: {{ aero_npy_clim_b }} + npz: {{ aero_npz_clim_b }} + field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" + rescale stddev: + filetype: fms restart + skip coupler file: true + datapath: {{ aero_rescale_b_path }} + filename_trcr: rescale.fv_tracer.res.nc + filename_cplr: rescale.coupler.res + number of halo points: {{ aero_diagb_n_halo }} number of neighbors: {{ aero_diagb_n_neighbors }} simple smoothing: diff --git a/algorithm/aero/aero_obs_staging.yaml.j2 b/algorithm/aero/aero_obs_staging.yaml.j2 new file mode 100644 index 0000000..0e5c992 --- /dev/null +++ b/algorithm/aero/aero_obs_staging.yaml.j2 @@ -0,0 +1,8 @@ +mkdir: + - '{{aero_obsdatain_path}}' +copy: + {% for observation_from_jcb in observations %} + {% if use_observer(observation_from_jcb) %} + - ['{{aero_obsdataroot_path}}/{{aero_obsdatain_prefix}}{{observation_from_jcb}}{{aero_obsdatain_suffix}}', '{{aero_obsdatain_path}}'] + {% endif %} + {% endfor %} From c9f2d79833de83f342055140cac679e6e7ec9ff7 Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 2 Dec 2024 13:19:10 -0500 Subject: [PATCH 5/7] Bug fixes and changes necessary to run the Ens. var (#46) --- algorithm/marine/soca_2cice_global.yaml.j2 | 17 +++++++-- algorithm/marine/soca_diagb.yaml.j2 | 15 ++++++-- algorithm/marine/soca_ensb.yaml.j2 | 31 ++++++++++++---- algorithm/marine/soca_ensweights.yaml.j2 | 13 +++++-- .../soca_parameters_diffusion_hz.yaml.j2 | 13 ++++--- ..._background_error_static_diffusion.yaml.j2 | 35 +++++++++++++++---- 6 files changed, 101 insertions(+), 23 deletions(-) diff --git a/algorithm/marine/soca_2cice_global.yaml.j2 b/algorithm/marine/soca_2cice_global.yaml.j2 index 0798d02..8d13d46 100644 --- a/algorithm/marine/soca_2cice_global.yaml.j2 +++ b/algorithm/marine/soca_2cice_global.yaml.j2 @@ -29,7 +29,13 @@ variable change: sno_lev: 1 cice output: restart: {{ ice_rst }} - output variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] + output variables: + - sea_water_potential_temperature + - sea_water_salinity + - sea_water_cell_thickness + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness states: - input: @@ -38,7 +44,14 @@ states: ocn_filename: {{ ocn_ana }} ice_filename: {{ ice_ana }} date: '{{ fcst_begin }}' - state variables: [sea_water_potential_temperature, sea_water_salinity, sea_water_cell_thickness, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness] + state variables: + - sea_water_potential_temperature + - sea_water_salinity + - sea_water_cell_thickness + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness + output: datadir: Data exp: soca2cice diff --git a/algorithm/marine/soca_diagb.yaml.j2 b/algorithm/marine/soca_diagb.yaml.j2 index 02633ac..30e9c68 100644 --- a/algorithm/marine/soca_diagb.yaml.j2 +++ b/algorithm/marine/soca_diagb.yaml.j2 @@ -18,9 +18,20 @@ background error: type: incr variables: - name: [sea_water_potential_temperature, sea_water_salinity, eastward_sea_water_velocity, northward_sea_water_velocity, sea_water_cell_thickness, sea_surface_height_above_geoid, sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, mom6_mld] + name: + - sea_water_potential_temperature + - sea_water_salinity + - eastward_sea_water_velocity + - northward_sea_water_velocity + - sea_water_cell_thickness + - sea_surface_height_above_geoid + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness + - mom6_mld -rescale: 2.0 # rescales the filtered std. dev. by "rescale" +vertical e-folding scale: 500.0 +rescale: 1.0 # rescales the filtered std. dev. by "rescale" min sst: 0.0 # Added to sst bkg. err. max ssh: 0.0 # Limits the amplitude of the unbalanced bkg err min depth: 500.0 # zero out the bkg. error. at less than min depth diff --git a/algorithm/marine/soca_ensb.yaml.j2 b/algorithm/marine/soca_ensb.yaml.j2 index 01c9777..852850f 100644 --- a/algorithm/marine/soca_ensb.yaml.j2 +++ b/algorithm/marine/soca_ensb.yaml.j2 @@ -5,11 +5,20 @@ geometry: date: '{{ marine_window_begin_iso }}' -layers variable: [hocn] +layers variable: [sea_water_cell_thickness] -increment variables: [tocn, socn, uocn, vocn, ssh, hocn, cicen, hicen, hsnon] +increment variables: +- sea_water_potential_temperature +- sea_water_salinity +- eastward_sea_water_velocity +- northward_sea_water_velocity +- sea_surface_height_above_geoid +- sea_water_cell_thickness +- sea_ice_area_fraction +- sea_ice_thickness +- sea_ice_snow_thickness -set increment variables to zero: [ssh] +set increment variables to zero: [sea_surface_height_above_geoid] vertical geometry: date: '{{ marine_window_begin_iso }}' @@ -81,7 +90,18 @@ linear variable change: - linear variable change name: BalanceSOCA trajectory: - state variables: [tocn, socn, uocn, vocn, ssh, hocn, layer_depth, mld, cicen, hicen, hsnon] + state variables: + - sea_water_potential_temperature + - sea_water_salinity + - eastward_sea_water_velocity + - northward_sea_water_velocity + - sea_surface_height_above_geoid + - sea_water_cell_thickness + - sea_water_depth + - ocean_mixed_layer_thickness + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness date: '{{ marine_window_begin_iso }}' basename: ./INPUT/ ocn_filename: MOM.res.nc @@ -89,8 +109,7 @@ trajectory: read_from_file: 1 output increment: - # TODO: Revert this when fms can take more than 128 charactres file names - datadir: '{{ enspert_relpath }}/enspert/' + datadir: '{{ enspert_relpath }}/' date: '{{ marine_window_begin_iso }}' exp: trash type: incr diff --git a/algorithm/marine/soca_ensweights.yaml.j2 b/algorithm/marine/soca_ensweights.yaml.j2 index 792bbdc..9f818b3 100644 --- a/algorithm/marine/soca_ensweights.yaml.j2 +++ b/algorithm/marine/soca_ensweights.yaml.j2 @@ -5,8 +5,17 @@ geometry: date: '{{ marine_window_middle_iso }}' variables: - ice: [cicen, hicen, hsnon] - ocean: [tocn, socn, uocn, vocn, ssh] + ice: + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness + + ocean: + - sea_water_potential_temperature + - sea_water_salinity + - eastward_sea_water_velocity + - northward_sea_water_velocity + - sea_surface_height_above_geoid background: date: '{{ marine_window_begin_iso }}' diff --git a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 index c79d469..a0fc0e1 100644 --- a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 +++ b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 @@ -30,8 +30,11 @@ background error: write: filepath: ./staticb/hz_ocean - - horizontal: - as gaussian: true - fixed value: 50000.0 - write: - filepath: ./staticb/hz_ice +# TODO(G): OK to not use what's below but it will need +# to be fixed when we add ice thickness and +# snow depth +# - horizontal: +# as gaussian: true +# fixed value: 50000.0 +# write: +# filepath: ./staticb/hz_ice diff --git a/model/marine/marine_background_error_static_diffusion.yaml.j2 b/model/marine/marine_background_error_static_diffusion.yaml.j2 index 0c57790..4b31572 100644 --- a/model/marine/marine_background_error_static_diffusion.yaml.j2 +++ b/model/marine/marine_background_error_static_diffusion.yaml.j2 @@ -3,15 +3,22 @@ saber central block: saber block name: diffusion read: groups: - - variables: [sea_water_potential_temperature, sea_water_salinity, sea_surface_height_above_geoid] + - variables: + - sea_water_potential_temperature + - sea_water_salinity + - sea_surface_height_above_geoid + - sea_ice_area_fraction horizontal: filepath: ./staticb/hz_ocean vertical: levels: {{marine_vt_levels}} filepath: ./staticb/vt_ocean - - variables: [sea_ice_area_fraction] - horizontal: - filepath: ./staticb/hz_ice +# TODO(G): OK to not use what's below but it will need +# to be fixed when we add ice thickness and +# snow depth +# - variables: [sea_ice_area_fraction] +# horizontal: +# filepath: ./staticb/hz_ice saber outer blocks: - saber block name: StdDev @@ -24,7 +31,23 @@ saber outer blocks: read_from_file: 3 linear variable change: - input variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] - output variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] + input variables: + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness + - sea_water_salinity + - sea_water_potential_temperature + - eastward_sea_water_velocity + - northward_sea_water_velocity + - sea_surface_height_above_geoid + output variables: + - sea_ice_area_fraction + - sea_ice_thickness + - sea_ice_snow_thickness + - sea_water_salinity + - sea_water_potential_temperature + - eastward_sea_water_velocity + - northward_sea_water_velocity + - sea_surface_height_above_geoid linear variable changes: - linear variable change name: BalanceSOCA From 5a468be9996dd44cb45f05bb4445da1b3a340a5b Mon Sep 17 00:00:00 2001 From: Cory Martin Date: Thu, 12 Dec 2024 14:28:59 -0500 Subject: [PATCH 6/7] Changes to get snow 2DVar for deterministic and ensemble mean working (#52) Changes to JCB templates to allow for 2DVar snow analyses for the deterministic and the ensemble mean for GDAS. --------- Co-authored-by: Jiarui Dong Co-authored-by: yuanxue2870 <136842224+yuanxue2870@users.noreply.github.com> --- algorithm/snow/fv3jedi_snow_ensmean.yaml.j2 | 26 +++++ algorithm/snow/snow_obs_staging.yaml.j2 | 16 +++ model/snow/snow_3dvar_outer_loop_1.yaml.j2 | 25 +++++ model/snow/snow_background.yaml.j2 | 8 ++ model/snow/snow_background_error.yaml.j2 | 47 ++++++++ model/snow/snow_final_increment_fms.yaml.j2 | 20 ++++ model/snow/snow_geometry.yaml.j2 | 0 model/snow/snow_geometry_background.yaml.j2 | 11 ++ observations/snow/adpsfc_snow.yaml.j2 | 114 +++++++++++++++++++ observations/snow/ghcn_snow.yaml.j2 | 57 ++++++++++ observations/snow/ims_snow.yaml.j2 | 68 ++++++++++++ observations/snow/sfcsno.yaml.j2 | 116 ++++++++++++++++++++ observations/snow/snocvr_snow.yaml.j2 | 109 ++++++++++++++++++ 13 files changed, 617 insertions(+) create mode 100644 algorithm/snow/fv3jedi_snow_ensmean.yaml.j2 create mode 100644 algorithm/snow/snow_obs_staging.yaml.j2 create mode 100644 model/snow/snow_3dvar_outer_loop_1.yaml.j2 create mode 100644 model/snow/snow_background.yaml.j2 create mode 100644 model/snow/snow_background_error.yaml.j2 create mode 100644 model/snow/snow_final_increment_fms.yaml.j2 delete mode 100644 model/snow/snow_geometry.yaml.j2 create mode 100644 model/snow/snow_geometry_background.yaml.j2 create mode 100644 observations/snow/adpsfc_snow.yaml.j2 create mode 100644 observations/snow/ghcn_snow.yaml.j2 create mode 100644 observations/snow/ims_snow.yaml.j2 create mode 100644 observations/snow/sfcsno.yaml.j2 create mode 100644 observations/snow/snocvr_snow.yaml.j2 diff --git a/algorithm/snow/fv3jedi_snow_ensmean.yaml.j2 b/algorithm/snow/fv3jedi_snow_ensmean.yaml.j2 new file mode 100644 index 0000000..bf13c15 --- /dev/null +++ b/algorithm/snow/fv3jedi_snow_ensmean.yaml.j2 @@ -0,0 +1,26 @@ +geometry: +{% filter indent(width=2) %} +{% set geometry_background_file = geometry_background_file|default(model_component ~ 'geometry_background', true) ~ '.yaml.j2' %} +{% include geometry_background_file %} +{% endfilter %} +mean output: + filetype: fms restart + datapath: ./bkg/ensmean + filename_core: fv_core.res.nc + filename_trcr: fv_tracer.res.nc + filename_sfcd: sfc_data.nc + filename_sfcw: fv_srf_wnd.res.nc + filename_cplr: coupler.res +ensemble: + members from template: + template: + datetime: '{{ snow_background_time_iso }}' + filetype: fms restart + state variables: [snodl,vtype,slmsk,orog_filt,stc,sheleg] + datapath: ./bkg/mem%mem%/ + filename_sfcd: '{{ snow_background_time_fv3 }}.sfc_data.nc' + filename_cplr: '{{ snow_background_time_fv3 }}.coupler.res' + filename_orog: '{{ snow_orog_prefix }}_oro_data.nc' + pattern: '%mem%' + nmembers: {{ snow_number_ensemble_members }} + zero padding: 3 diff --git a/algorithm/snow/snow_obs_staging.yaml.j2 b/algorithm/snow/snow_obs_staging.yaml.j2 new file mode 100644 index 0000000..a8d3dc8 --- /dev/null +++ b/algorithm/snow/snow_obs_staging.yaml.j2 @@ -0,0 +1,16 @@ +mkdir: + - '{{snow_obsdatain_path}}' +copy: + {% for observation_from_jcb in observations %} + {% if use_observer(observation_from_jcb) %} + {% if not observation_from_jcb == 'ims_snow' %} + # skip if ims_snow since it is special + {% if observation_from_jcb == 'snocvr_snow' %} + # snocvr_snow is a .nc file, TODO rename this eventually? + - ['{{snow_obsdataroot_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}.nc4', '{{snow_obsdatain_path}}'] + {% else %} + - ['{{snow_obsdataroot_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}{{snow_obsdatain_suffix}}', '{{snow_obsdatain_path}}'] + {% endif %} + {% endif %} + {% endif %} + {% endfor %} diff --git a/model/snow/snow_3dvar_outer_loop_1.yaml.j2 b/model/snow/snow_3dvar_outer_loop_1.yaml.j2 new file mode 100644 index 0000000..48de31e --- /dev/null +++ b/model/snow/snow_3dvar_outer_loop_1.yaml.j2 @@ -0,0 +1,25 @@ +- ninner: 50 + gradient norm reduction: 1e-10 + test: on + geometry: + fms initialization: + namelist filename: {{ snow_fv3jedi_files_path }}/fmsmpp.nml + field table filename: {{ snow_fv3jedi_files_path }}/field_table + akbk: {{ snow_fv3jedi_files_path }}/akbk.nc4 + layout: + - {{ snow_layout_x }} + - {{ snow_layout_y }} + npx: {{ snow_npx_anl }} + npy: {{ snow_npy_anl }} + npz: {{ snow_npz_anl }} + field metadata override: {{ snow_fv3jedi_files_path }}/fv3jedi_fieldmetadata_restart.yaml + time invariant fields: + state fields: + datetime: '{{ snow_background_time_iso }}' + filetype: fms restart + skip coupler file: true + state variables: [orog_filt] + datapath: {{ snow_orog_files_path }}/ + filename_orog: {{ snow_orog_prefix }}_oro_data.nc + diagnostics: + departures: bkgmob diff --git a/model/snow/snow_background.yaml.j2 b/model/snow/snow_background.yaml.j2 new file mode 100644 index 0000000..737d5e3 --- /dev/null +++ b/model/snow/snow_background.yaml.j2 @@ -0,0 +1,8 @@ +datapath: {{ snow_background_path }} +filetype: fms restart +skip coupler file: true +datetime: '{{ snow_background_time_iso }}' +state variables: [snodl,vtype,slmsk,sheleg,orog_filt] +filename_sfcd: '{{ snow_background_time_fv3 }}.sfc_data.nc' +filename_cplr: '{{ snow_background_time_fv3 }}.coupler.res' +filename_orog: '{{ snow_orog_prefix }}_oro_data.nc' diff --git a/model/snow/snow_background_error.yaml.j2 b/model/snow/snow_background_error.yaml.j2 new file mode 100644 index 0000000..3d85303 --- /dev/null +++ b/model/snow/snow_background_error.yaml.j2 @@ -0,0 +1,47 @@ +covariance model: SABER +saber central block: + saber block name: BUMP_NICAS + read: + general: + universe length-scale: 300000.0 + drivers: + multivariate strategy: univariate + read global nicas: true + nicas: + explicit length-scales: true + horizontal length-scale: + - groups: + - totalSnowDepth_shadowLevels + value: 250000.0 + vertical length-scale: + - groups: + - totalSnowDepth_shadowLevels + value: 0.0 + interpolation type: + - groups: + - totalSnowDepth_shadowLevels + type: c0 + same horizontal convolution: true + io: + data directory: {{snow_bump_data_directory}} + files prefix: snow_bump_nicas_250km_shadowlevels +saber outer blocks: +- saber block name: ShadowLevels + fields metadata: + totalSnowDepth: + vert_coord: filtered_orography + calibration: + number of shadow levels: 50 + lowest shadow level: -450.0 + highest shadow level: 8850.0 + vertical length-scale: 2000.0 +- saber block name: BUMP_StdDev + read: + drivers: + compute variance: true + variance: + explicit stddev: true + stddev: + - variables: + - totalSnowDepth + value: 30.0 diff --git a/model/snow/snow_final_increment_fms.yaml.j2 b/model/snow/snow_final_increment_fms.yaml.j2 new file mode 100644 index 0000000..3bd182f --- /dev/null +++ b/model/snow/snow_final_increment_fms.yaml.j2 @@ -0,0 +1,20 @@ +output: + state component: + datapath: ./anl + prefix: snowinc + filetype: fms restart + filename_sfcd: '{{ snow_background_time_fv3 }}.sfc_data.nc' + filename_cplr: '{{ snow_background_time_fv3 }}.coupler.res' + state variables: [snodl,vtype,slmsk] +geometry: + fms initialization: + namelist filename: "{{ snow_fv3jedi_files_path }}/fmsmpp.nml" + field table filename: "{{ snow_fv3jedi_files_path }}/field_table" + akbk: "{{ snow_fv3jedi_files_path }}/akbk.nc4" + layout: + - {{ snow_layout_x }} + - {{ snow_layout_y }} + npx: {{ snow_npx_ges }} + npy: {{ snow_npy_ges }} + npz: {{ snow_npz_ges }} + field metadata override: "{{ snow_fv3jedi_files_path }}/fv3jedi_fieldmetadata_restart.yaml" diff --git a/model/snow/snow_geometry.yaml.j2 b/model/snow/snow_geometry.yaml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/model/snow/snow_geometry_background.yaml.j2 b/model/snow/snow_geometry_background.yaml.j2 new file mode 100644 index 0000000..e53d5ae --- /dev/null +++ b/model/snow/snow_geometry_background.yaml.j2 @@ -0,0 +1,11 @@ +fms initialization: + namelist filename: "{{snow_fv3jedi_files_path}}/fmsmpp.nml" + field table filename: "{{snow_fv3jedi_files_path}}/field_table" +akbk: "{{snow_fv3jedi_files_path}}/akbk.nc4" +layout: +- {{snow_layout_x}} +- {{snow_layout_y}} +npx: {{snow_npx_ges}} +npy: {{snow_npy_ges}} +npz: {{snow_npz_ges}} +field metadata override: "{{snow_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" diff --git a/observations/snow/adpsfc_snow.yaml.j2 b/observations/snow/adpsfc_snow.yaml.j2 new file mode 100644 index 0000000..2f7726b --- /dev/null +++ b/observations/snow/adpsfc_snow.yaml.j2 @@ -0,0 +1,114 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: adpsfc_snow + obsdatain: + engine: + type: H5File + obsfile: "{{snow_obsdatain_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}{{snow_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{snow_obsdataout_path}}/{{snow_obsdataout_prefix}}{{observation_from_jcb}}{{snow_obsdataout_suffix}}" + simulated variables: [totalSnowDepth] + # + + # Observation Operator + # -------------------- + obs operator: + name: Composite + components: + - name: Identity + - name: BackgroundErrorIdentity + obs error: + covariance model: diagonal + + # Observation Filters (QC) + # ------------------------ + obs pre filters: + - filter: Perform Action + filter variables: + - name: totalSnowDepth + action: + name: assign error + error parameter: 40.0 + - filter: Variable Assignment + assignments: + - name: GrossErrorProbability/totalSnowDepth + type: float + value: 0.02 + - name: BkgError/totalSnowDepth_background_error + type: float + value: 30.0 + obs prior filters: + - filter: Bounds Check + filter variables: + - name: totalSnowDepth + minvalue: 0.0 + maxvalue: 20000.0 + action: + name: reject + - filter: Domain Check + where: + - variable: + name: MetaData/stationElevation + value: is_valid + - filter: Domain Check # land only + where: + - variable: + name: GeoVaLs/slmsk + minvalue: 0.5 + maxvalue: 1.5 + - filter: RejectList # no land-ice + where: + - variable: + name: GeoVaLs/vtype + minvalue: 14.5 + maxvalue: 15.5 + - filter: Difference Check # elevation check + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. + - filter: BlackList + where: + - variable: + name: MetaData/stationIdentification + is_in: [71120,71397,71621,71727,71816] + size where true: 5 + obs post filters: + - filter: Background Check # gross error check + filter variables: + - name: totalSnowDepth + threshold: 6.25 + action: + name: reject + - filter: Temporal Thinning + min_spacing: '{{ window_length }}' + seed_time: '{{ snow_background_time_iso }}' + category_variable: + name: MetaData/stationIdentification + - filter: Met Office Buddy Check + filter variables: + - name: totalSnowDepth + rejection_threshold: 0.5 + traced_boxes: # trace all observations + min_latitude: -90 + max_latitude: 90 + min_longitude: -180 + max_longitude: 180 + search_radius: 150 # km + station_id_variable: + name: MetaData/stationIdentification + num_zonal_bands: 24 + sort_by_pressure: false + max_total_num_buddies: 15 + max_num_buddies_from_single_band: 10 + max_num_buddies_with_same_station_id: 5 + use_legacy_buddy_collector: false + horizontal_correlation_scale: { "-90": 150, "90": 150 } + temporal_correlation_scale: PT6H + damping_factor_1: 1.0 + damping_factor_2: 1.0 + background_error_group: BkgError diff --git a/observations/snow/ghcn_snow.yaml.j2 b/observations/snow/ghcn_snow.yaml.j2 new file mode 100644 index 0000000..37022cb --- /dev/null +++ b/observations/snow/ghcn_snow.yaml.j2 @@ -0,0 +1,57 @@ + - + + # Observation Space (I/O) + # ----------------------- + obs space: + name: ghcn_snow + obsdatain: + engine: + type: H5File + obsfile: "{{snow_obsdatain_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}.nc" + obsdataout: + engine: + type: H5File + obsfile: "{{snow_obsdataout_path}}/{{snow_obsdataout_prefix}}{{observation_from_jcb}}{{snow_obsdataout_suffix}}" + simulated variables: [totalSnowDepth] + # + + # Observation Operator + # -------------------- + obs operator: + name: Identity + # + + # Observation Filters (QC) + # ------------------------ + obs filters: + - filter: Bounds Check + filter variables: + - name: totalSnowDepth + minvalue: 0.0 + - filter: Domain Check + where: + - variable: + name: MetaData/stationElevation + value: is_valid + - filter: Domain Check # land only + where: + - variable: + name: GeoVaLs/slmsk + minvalue: 0.5 + maxvalue: 1.5 + - filter: RejectList # no land-ice + where: + - variable: + name: GeoVaLs/vtype + minvalue: 14.5 + maxvalue: 15.5 + - filter: Difference Check # elevation check + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. + - filter: Background Check + filter variables: + - name: totalSnowDepth + threshold: 6.25 + action: + name: reject diff --git a/observations/snow/ims_snow.yaml.j2 b/observations/snow/ims_snow.yaml.j2 new file mode 100644 index 0000000..612f2d7 --- /dev/null +++ b/observations/snow/ims_snow.yaml.j2 @@ -0,0 +1,68 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: ims_snow + obsdatain: + engine: + type: H5File + obsfile: "{{snow_obsdatain_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}.tm00.nc" + missing file action: warn + obsdataout: + engine: + type: H5File + obsfile: "{{snow_obsdataout_path}}/{{snow_obsdataout_prefix}}{{observation_from_jcb}}{{snow_obsdataout_suffix}}" + simulated variables: [totalSnowDepth] + # + + # Observation Operator + # -------------------- + obs operator: + name: Identity + # + + # Observation Filters (QC) + # ------------------------ + obs pre filters: + # assign observation error + - filter: Perform Action + filter variables: + - name: totalSnowDepth + action: + name: assign error + error parameter: 80.0 + + obs prior filters: + # remove land-ice and sea points + - filter: Domain Check # land only + where: + - variable: + name: GeoVaLs/slmsk + minvalue: 0.5 + maxvalue: 1.5 + - filter: RejectList # no land-ice + where: + - variable: + name: GeoVaLs/vtype + minvalue: 14.5 + maxvalue: 15.5 + + obs post filters: + # gross error check + - filter: Background Check + filter variables: + - name: totalSnowDepth + threshold: 3. + action: + name: reject + + # thinning of remaining obs + - filter: Gaussian Thinning + horizontal_mesh: 40.0 # km + + # excludes where both obs & mod = 100% (set in IMS_proc) + - filter: Bounds Check + filter variables: + - name: totalSnowDepth + minvalue: 0.0 diff --git a/observations/snow/sfcsno.yaml.j2 b/observations/snow/sfcsno.yaml.j2 new file mode 100644 index 0000000..a8f340a --- /dev/null +++ b/observations/snow/sfcsno.yaml.j2 @@ -0,0 +1,116 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: sfcsno + obsdatain: + engine: + type: bufr + obsfile: "{{snow_obsdatain_path}}/{{snow_obsdatain_prefix}}sfcsno.tm00.bufr_d" + mapping file: "{{snow_obsdatain_path}}/bufr_sfcsno_mapping.yaml" + obsdataout: + engine: + type: H5File + obsfile: "{{snow_obsdataout_path}}/{{snow_obsdataout_prefix}}sfcsno{{snow_obsdataout_suffix}}" + simulated variables: [totalSnowDepth] + # + + # Observation Operator + # -------------------- + obs operator: + name: Composite + components: + - name: Identity + - name: BackgroundErrorIdentity + linear obs operator: + name: Identity + # + + # Observation Filters (QC) + # ------------------------ + obs pre filters: + - filter: Perform Action + filter variables: + - name: totalSnowDepth + action: + name: assign error + error parameter: 40.0 + - filter: Variable Assignment + assignments: + - name: GrossErrorProbability/totalSnowDepth + type: float + value: 0.02 + - name: BkgError/totalSnowDepth_background_error + type: float + value: 30.0 + obs prior filters: + - filter: Bounds Check + filter variables: + - name: totalSnowDepth + minvalue: 0.0 + maxvalue: 20000.0 + action: + name: reject + - filter: Domain Check + where: + - variable: + name: MetaData/stationElevation + value: is_valid + - filter: Domain Check # land only + where: + - variable: + name: GeoVaLs/slmsk + minvalue: 0.5 + maxvalue: 1.5 + - filter: RejectList # no land-ice + where: + - variable: + name: GeoVaLs/vtype + minvalue: 14.5 + maxvalue: 15.5 + - filter: Difference Check # elevation check + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. + - filter: BlackList + where: + - variable: + name: MetaData/stationIdentification + is_in: [71120,71397,71621,71727,71816] + size where true: 5 + obs post filters: + - filter: Background Check # gross error check + filter variables: + - name: totalSnowDepth + threshold: 6.25 + action: + name: reject + - filter: Temporal Thinning + min_spacing: '{{ window_length }}' + seed_time: '{{ snow_background_time_iso }}' + category_variable: + name: MetaData/stationIdentification + - filter: Met Office Buddy Check + filter variables: + - name: totalSnowDepth + rejection_threshold: 0.5 + traced_boxes: # trace all observations + min_latitude: -90 + max_latitude: 90 + min_longitude: -180 + max_longitude: 180 + search_radius: 150 # km + station_id_variable: + name: MetaData/stationIdentification + num_zonal_bands: 24 + sort_by_pressure: false + max_total_num_buddies: 15 + max_num_buddies_from_single_band: 10 + max_num_buddies_with_same_station_id: 5 + use_legacy_buddy_collector: false + horizontal_correlation_scale: { "-90": 150, "90": 150 } + temporal_correlation_scale: PT6H + damping_factor_1: 1.0 + damping_factor_2: 1.0 + background_error_group: BkgError diff --git a/observations/snow/snocvr_snow.yaml.j2 b/observations/snow/snocvr_snow.yaml.j2 new file mode 100644 index 0000000..b072f7f --- /dev/null +++ b/observations/snow/snocvr_snow.yaml.j2 @@ -0,0 +1,109 @@ +- + + # Observation Space (I/O) + # ----------------------- + obs space: + name: snocvr_snow + obsdatain: + engine: + type: H5File + obsfile: "{{snow_obsdatain_path}}/{{snow_obsdatain_prefix}}{{observation_from_jcb}}.nc4" + obsdataout: + engine: + type: H5File + obsfile: "{{snow_obsdataout_path}}/{{snow_obsdataout_prefix}}{{observation_from_jcb}}{{snow_obsdataout_suffix}}" + simulated variables: [totalSnowDepth] + # + + # Observation Operator + # -------------------- + obs operator: + name: Composite + components: + - name: Identity + - name: BackgroundErrorIdentity + linear obs operator: + name: Identity + # + + # Observation Filters (QC) + # ------------------------ + obs pre filters: + - filter: Perform Action + filter variables: + - name: totalSnowDepth + action: + name: assign error + error parameter: 40.0 + - filter: Variable Assignment + assignments: + - name: GrossErrorProbability/totalSnowDepth + type: float + value: 0.02 + - name: BkgError/totalSnowDepth_background_error + type: float + value: 30.0 + obs prior filters: + - filter: Bounds Check + filter variables: + - name: totalSnowDepth + minvalue: 0.0 + maxvalue: 20000.0 + action: + name: reject + - filter: Domain Check + where: + - variable: + name: MetaData/stationElevation + value: is_valid + - filter: Domain Check # land only + where: + - variable: + name: GeoVaLs/slmsk + minvalue: 0.5 + maxvalue: 1.5 + - filter: RejectList # no land-ice + where: + - variable: + name: GeoVaLs/vtype + minvalue: 14.5 + maxvalue: 15.5 + - filter: Difference Check # elevation check + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. + obs post filters: + - filter: Background Check # gross error check + filter variables: + - name: totalSnowDepth + threshold: 6.25 + action: + name: reject + - filter: Temporal Thinning + min_spacing: '{{ window_length }}' + seed_time: '{{ snow_background_time_iso }}' + category_variable: + name: MetaData/stationIdentification + - filter: Met Office Buddy Check + filter variables: + - name: totalSnowDepth + rejection_threshold: 0.5 + traced_boxes: # trace all observations + min_latitude: -90 + max_latitude: 90 + min_longitude: -180 + max_longitude: 180 + search_radius: 150 # km + station_id_variable: + name: MetaData/stationIdentification + num_zonal_bands: 24 + sort_by_pressure: false + max_total_num_buddies: 15 + max_num_buddies_from_single_band: 10 + max_num_buddies_with_same_station_id: 5 + use_legacy_buddy_collector: false + horizontal_correlation_scale: { "-90": 150, "90": 150 } + temporal_correlation_scale: PT6H + damping_factor_1: 1.0 + damping_factor_2: 1.0 + background_error_group: BkgError From accd7a5bf96524430d8d03a4b2d707eca4c48c13 Mon Sep 17 00:00:00 2001 From: Jiarui Dong Date: Fri, 13 Dec 2024 09:29:40 -0500 Subject: [PATCH 7/7] Fix the ParserError due to the indent spaces. (#54) This PR fixes the issues with yaml format for the `Difference Check` filter. --- observations/snow/adpsfc_snow.yaml.j2 | 6 +++--- observations/snow/ghcn_snow.yaml.j2 | 6 +++--- observations/snow/sfcsno.yaml.j2 | 6 +++--- observations/snow/snocvr_snow.yaml.j2 | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/observations/snow/adpsfc_snow.yaml.j2 b/observations/snow/adpsfc_snow.yaml.j2 index 2f7726b..f0fe2fd 100644 --- a/observations/snow/adpsfc_snow.yaml.j2 +++ b/observations/snow/adpsfc_snow.yaml.j2 @@ -68,9 +68,9 @@ minvalue: 14.5 maxvalue: 15.5 - filter: Difference Check # elevation check - reference: MetaData/stationElevation - value: GeoVaLs/filtered_orography - threshold: 200. + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. - filter: BlackList where: - variable: diff --git a/observations/snow/ghcn_snow.yaml.j2 b/observations/snow/ghcn_snow.yaml.j2 index 37022cb..ea7a956 100644 --- a/observations/snow/ghcn_snow.yaml.j2 +++ b/observations/snow/ghcn_snow.yaml.j2 @@ -46,9 +46,9 @@ minvalue: 14.5 maxvalue: 15.5 - filter: Difference Check # elevation check - reference: MetaData/stationElevation - value: GeoVaLs/filtered_orography - threshold: 200. + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. - filter: Background Check filter variables: - name: totalSnowDepth diff --git a/observations/snow/sfcsno.yaml.j2 b/observations/snow/sfcsno.yaml.j2 index a8f340a..f1ef5d4 100644 --- a/observations/snow/sfcsno.yaml.j2 +++ b/observations/snow/sfcsno.yaml.j2 @@ -70,9 +70,9 @@ minvalue: 14.5 maxvalue: 15.5 - filter: Difference Check # elevation check - reference: MetaData/stationElevation - value: GeoVaLs/filtered_orography - threshold: 200. + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. - filter: BlackList where: - variable: diff --git a/observations/snow/snocvr_snow.yaml.j2 b/observations/snow/snocvr_snow.yaml.j2 index b072f7f..29ba159 100644 --- a/observations/snow/snocvr_snow.yaml.j2 +++ b/observations/snow/snocvr_snow.yaml.j2 @@ -69,9 +69,9 @@ minvalue: 14.5 maxvalue: 15.5 - filter: Difference Check # elevation check - reference: MetaData/stationElevation - value: GeoVaLs/filtered_orography - threshold: 200. + reference: MetaData/stationElevation + value: GeoVaLs/filtered_orography + threshold: 200. obs post filters: - filter: Background Check # gross error check filter variables: