diff --git a/parm/aero/berror/aero_diagb.yaml.j2 b/parm/aero/berror/aero_diagb.yaml.j2 index 31cf00b34..a2b0ea95f 100644 --- a/parm/aero/berror/aero_diagb.yaml.j2 +++ b/parm/aero/berror/aero_diagb.yaml.j2 @@ -76,7 +76,26 @@ variables: - mass_fraction_of_sea_salt003_in_air - mass_fraction_of_sea_salt004_in_air -rescale: {{ aero_diagb_rescale }} # rescales the filtered std. dev. by "rescale" +global rescale: + geometry: + fms initialization: + namelist filename: ./fv3jedi/fmsmpp.nml + field table filename: ./fv3jedi/field_table + akbk: ./fv3jedi/akbk.nc4 + layout: + - {{ layout_x }} + - {{ layout_y }} + nxp: {{ npx_rescale }} + npy: {{ npy_rescale }} + npz: {{ npz_ges }} + field metadata override: ./fv3jedi/fv3jedi_fieldmetadata_restart.yaml + rescale stddev: + filetype: fms restart + skip coupler file: true + dateapath: ./stddev + 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/parm/soca/gridgen/gridgen.yaml b/parm/soca/gridgen/gridgen.yaml new file mode 100644 index 000000000..34fbdeca6 --- /dev/null +++ b/parm/soca/gridgen/gridgen.yaml @@ -0,0 +1,5 @@ +geometry: + geom_grid_file: soca_gridspec.nc + mom6_input_nml: mom_input.nml + fields metadata: fields_metadata.yaml + rossby file: rossrad.nc diff --git a/parm/soca/obs/config/icec_amsu_mb_l2.yaml b/parm/soca/obs/config/icec_amsu_mb_l2.yaml index 9ab19e569..cc66e80f4 100644 --- a/parm/soca/obs/config/icec_amsu_mb_l2.yaml +++ b/parm/soca/obs/config/icec_amsu_mb_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_atms_n20_l2.yaml b/parm/soca/obs/config/icec_atms_n20_l2.yaml index d9efd3b35..86edc632b 100644 --- a/parm/soca/obs/config/icec_atms_n20_l2.yaml +++ b/parm/soca/obs/config/icec_atms_n20_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_atms_n21_l2.yaml b/parm/soca/obs/config/icec_atms_n21_l2.yaml index b3e204dd6..b74a70693 100644 --- a/parm/soca/obs/config/icec_atms_n21_l2.yaml +++ b/parm/soca/obs/config/icec_atms_n21_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_atms_npp_l2.yaml b/parm/soca/obs/config/icec_atms_npp_l2.yaml index ede7e0bb1..2c1fb1a73 100644 --- a/parm/soca/obs/config/icec_atms_npp_l2.yaml +++ b/parm/soca/obs/config/icec_atms_npp_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_gmi_gpm_l2.yaml b/parm/soca/obs/config/icec_gmi_gpm_l2.yaml index ba6d3d42a..0bba5b355 100644 --- a/parm/soca/obs/config/icec_gmi_gpm_l2.yaml +++ b/parm/soca/obs/config/icec_gmi_gpm_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_ssmis_f17_l2.yaml b/parm/soca/obs/config/icec_ssmis_f17_l2.yaml index c8e5e40e1..5cec721da 100644 --- a/parm/soca/obs/config/icec_ssmis_f17_l2.yaml +++ b/parm/soca/obs/config/icec_ssmis_f17_l2.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_viirs_n20_l2_north.yaml b/parm/soca/obs/config/icec_viirs_n20_l2_north.yaml index f6a24d7f8..a305ee09a 100644 --- a/parm/soca/obs/config/icec_viirs_n20_l2_north.yaml +++ b/parm/soca/obs/config/icec_viirs_n20_l2_north.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/icec_viirs_n20_l2_south.yaml b/parm/soca/obs/config/icec_viirs_n20_l2_south.yaml index 030b1091f..a295d1a8d 100644 --- a/parm/soca/obs/config/icec_viirs_n20_l2_south.yaml +++ b/parm/soca/obs/config/icec_viirs_n20_l2_south.yaml @@ -43,3 +43,10 @@ obs filters: where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_dbuoy.yaml b/parm/soca/obs/config/insitu_profile_dbuoy.yaml index 2f0b2a873..4a0ae885b 100644 --- a/parm/soca/obs/config/insitu_profile_dbuoy.yaml +++ b/parm/soca/obs/config/insitu_profile_dbuoy.yaml @@ -32,3 +32,10 @@ obs filters: coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_dbuoyb.yaml b/parm/soca/obs/config/insitu_profile_dbuoyb.yaml index d238ada6a..ac70f2b09 100644 --- a/parm/soca/obs/config/insitu_profile_dbuoyb.yaml +++ b/parm/soca/obs/config/insitu_profile_dbuoyb.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/waterTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_glider.yaml b/parm/soca/obs/config/insitu_profile_glider.yaml index 366462323..1b9625010 100644 --- a/parm/soca/obs/config/insitu_profile_glider.yaml +++ b/parm/soca/obs/config/insitu_profile_glider.yaml @@ -32,3 +32,10 @@ obs filters: coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_marinemammal.yaml b/parm/soca/obs/config/insitu_profile_marinemammal.yaml index 308ef34e5..a1eb9c44a 100644 --- a/parm/soca/obs/config/insitu_profile_marinemammal.yaml +++ b/parm/soca/obs/config/insitu_profile_marinemammal.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/waterTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_mbuoy.yaml b/parm/soca/obs/config/insitu_profile_mbuoy.yaml index 0006a8793..02dfaea52 100644 --- a/parm/soca/obs/config/insitu_profile_mbuoy.yaml +++ b/parm/soca/obs/config/insitu_profile_mbuoy.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/waterTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_mbuoyb.yaml b/parm/soca/obs/config/insitu_profile_mbuoyb.yaml index 94ef5a501..873409ccb 100644 --- a/parm/soca/obs/config/insitu_profile_mbuoyb.yaml +++ b/parm/soca/obs/config/insitu_profile_mbuoyb.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/waterTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_tesac_salinity.yaml b/parm/soca/obs/config/insitu_profile_tesac_salinity.yaml index 074c29f19..7e7edab59 100644 --- a/parm/soca/obs/config/insitu_profile_tesac_salinity.yaml +++ b/parm/soca/obs/config/insitu_profile_tesac_salinity.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/salinity coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_profile_xbtctd.yaml b/parm/soca/obs/config/insitu_profile_xbtctd.yaml index d3176f786..101e3739f 100644 --- a/parm/soca/obs/config/insitu_profile_xbtctd.yaml +++ b/parm/soca/obs/config/insitu_profile_xbtctd.yaml @@ -31,3 +31,10 @@ obs filters: - ObsError/waterTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_surface_altkob.yaml b/parm/soca/obs/config/insitu_surface_altkob.yaml index dd9aa72ad..8ab5a57f8 100644 --- a/parm/soca/obs/config/insitu_surface_altkob.yaml +++ b/parm/soca/obs/config/insitu_surface_altkob.yaml @@ -27,3 +27,10 @@ obs filters: - ObsError/seaSurfaceTemperature coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/parm/soca/obs/config/insitu_surface_trkob_salinity.yaml b/parm/soca/obs/config/insitu_surface_trkob_salinity.yaml index be980a294..bd18b4077 100644 --- a/parm/soca/obs/config/insitu_surface_trkob_salinity.yaml +++ b/parm/soca/obs/config/insitu_surface_trkob_salinity.yaml @@ -27,3 +27,10 @@ obs filters: - ObsError/seaSurfaceSalinity coefs: - 1000.0 +obs localizations: +- localization method: Rossby + base value: 100.0e3 + rossby mult: 1.0 + min grid mult: 2.0 + min value: 200.0e3 + max value: 900.0e3 diff --git a/utils/chem/chem_diagb.h b/utils/chem/chem_diagb.h index 703d4841f..10fc6b5fe 100644 --- a/utils/chem/chem_diagb.h +++ b/utils/chem/chem_diagb.h @@ -230,13 +230,27 @@ namespace gdasapp { } } - // Rescale - if (fullConfig.has("rescale")) { - double rescale; - fullConfig.get("rescale", rescale); - util::multiplyFieldSet(bkgErrFs, rescale); + // Rescale + if (fullConfig.has("global rescale")) { + const eckit::LocalConfiguration GlobalRescaleConfig(fullConfig, "global rescale"); + const eckit::LocalConfiguration GlobalRescaleGeomConfig(GlobalRescaleConfig, "geometry"); + const fv3jedi::Geometry GlobalRescaleGeom(GlobalRescaleGeomConfig, this-> getComm()); + fv3jedi::Increment global_rescale(GlobalRescaleGeom, chemVars, cycleDate); + global_rescale.zero(); + const eckit::LocalConfiguration GlobalRescaleStdConfig(GlobalRescaleConfig, + "rescale stddev"); + global_rescale.read(GlobalRescaleStdConfig); + // interpolate to background resolution + fv3jedi::Increment global_rescale_interp(geom, global_rescale); + atlas::FieldSet xrsFs; + global_rescale_interp.toFieldSet(xrsFs); + oops::Log::info() << "global rescaling coefficients:" << std::endl; + oops::Log::info() << xrsFs << std::endl; + util::multiplyFieldSets(bkgErrFs, xrsFs); } + + bkgErr.fromFieldSet(bkgErrFs); // Hybrid B option @@ -274,6 +288,7 @@ namespace gdasapp { double rescale_staticb; ClimBConfig.get("staticb rescaling factor", rescale_staticb); + // Combine diagb and climatological background errors fv3jedi::Increment stddev_hybrid(geom, chemVars, cycleDate); stddev_hybrid.zero();