From 5a468be9996dd44cb45f05bb4445da1b3a340a5b Mon Sep 17 00:00:00 2001 From: Cory Martin Date: Thu, 12 Dec 2024 14:28:59 -0500 Subject: [PATCH 1/5] 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 2/5] 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: From cd76015db92a9afd8daa588183e5981312ec3e68 Mon Sep 17 00:00:00 2001 From: Kevin Dougherty <69815622+kevindougherty-noaa@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:16:59 -0500 Subject: [PATCH 3/5] Add obspace templates for stat analysis job (#53) Add obspace templates for stat analysis jobs run in global-workflow. --------- Co-authored-by: Dan Holdaway <27729500+danholdaway@users.noreply.github.com> --- .../obstats/aero/viirs_n20_template.yaml.j2 | 50 +++++++++++++++++++ .../obstats/aero/viirs_npp_template.yaml.j2 | 50 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 algorithm/obstats/aero/viirs_n20_template.yaml.j2 create mode 100644 algorithm/obstats/aero/viirs_npp_template.yaml.j2 diff --git a/algorithm/obstats/aero/viirs_n20_template.yaml.j2 b/algorithm/obstats/aero/viirs_n20_template.yaml.j2 new file mode 100644 index 0000000..9606dd9 --- /dev/null +++ b/algorithm/obstats/aero/viirs_n20_template.yaml.j2 @@ -0,0 +1,50 @@ +- obs space: + name: aod + obsdatain: + engine: + type: H5File + obsfile: {{ aero_obsdatain_path }}/diag_{{ obspace }}_{{ stat_current_cycle_YMDH }}.nc4 + simulated variables: {{ aero_obsdatatin_simulated_variables }} + observed variables: {{ aero_obsdatain_observed_variables }} + variables: {{ aero_variables }} + groups to process: {{ aero_file_groups }} + qc groups: {{ aero_file_qc_groups }} + statistics to compute: ['mean', 'count', 'RMS'] + output file: "{{ obspace }}_{{ stat_current_cycle_YMDH }}_output_aod.nc" + domains to process: + - domain: + name: "nowhere" + first mask variable: latitude + first mask range: [-180,-100] + - domain: + name: "SH" + first mask variable: latitude + first mask range: [-90,0] + - domain: + name: "NH" + first mask variable: latitude + first mask range: [0,90] + - domain: + name: "CONUS" + first mask variable: latitude + first mask range: [25,49] + second mask variable: longitude + second mask range: [-125,-66] + - domain: + name: "Europe" + first mask variable: latitude + first mask range: [35,70] + second mask variable: longitude + second mask range: [-11,38] + - domain: + name: "Africa" + first mask variable: latitude + first mask range: [-35,37] + second mask variable: longitude + second mask range: [-17,52] + - domain: + name: "Asia" + first mask variable: latitude + first mask range: [0,70] + second mask variable: longitude + second mask range: [38, 180] diff --git a/algorithm/obstats/aero/viirs_npp_template.yaml.j2 b/algorithm/obstats/aero/viirs_npp_template.yaml.j2 new file mode 100644 index 0000000..e0909bb --- /dev/null +++ b/algorithm/obstats/aero/viirs_npp_template.yaml.j2 @@ -0,0 +1,50 @@ +- obs space: + name: aod + obsdatain: + engine: + type: H5File + obsfile: {{ aero_obsdatain_path }}/diag_{{ obspace }}_{{ stat_current_cycle_YMDH }}.nc4 + simulated variables: {{ aero_obsdatatin_simulated_variables }} + observed variables: {{ aero_obsdatain_observed_variables }} + variables: {{ aero_variables }} + groups to process: {{ aero_file_groups }} + qc groups: {{ aero_file_qc_groups }} + statistics to compute: ['mean', 'count', 'RMS'] + output file: "{{ obspace }}_{{ stat_current_cycle_YMDH }}_output_aod.nc" + domains to process: + - domain: + name: "nowhere" + first mask variable: latitude + first mask range: [-180,-100] + - domain: + name: "SH" + first mask variable: latitude + first mask range: [-90,0] + - domain: + name: "NH" + first mask variable: latitude + first mask range: [0,90] + - domain: + name: "CONUS" + first mask variable: latitude + first mask range: [25,49] + second mask variable: longitude + second mask range: [-125,-66] + - domain: + name: "Europe" + first mask variable: latitude + first mask range: [35,70] + second mask variable: longitude + second mask range: [-11,38] + - domain: + name: "Africa" + first mask variable: latitude + first mask range: [-35,37] + second mask variable: longitude + second mask range: [-17,52] + - domain: + name: "Asia" + first mask variable: latitude + first mask range: [0,70] + second mask variable: longitude + second mask range: [38, 180] \ No newline at end of file From 1c8c6b877134e2c2ec0e7a189fe9e3bc03954ab0 Mon Sep 17 00:00:00 2001 From: Cory Martin Date: Fri, 13 Dec 2024 13:56:41 -0500 Subject: [PATCH 4/5] write out aerosol analysis for GEFS + ensure proper increment resolution for cycling (#55) This PR will write out a separate aerosol analysis on the analysis resolution to be picked up by the GEFS aerosol member, it also corrects the resolution of the increment write for cycling which should be the background resolution, not the analysis resolution. --------- Co-authored-by: Cory Martin --- model/aero/aero_final_increment_cubed_sphere.yaml.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 index e34a7fc..d489b2b 100644 --- a/model/aero/aero_final_increment_cubed_sphere.yaml.j2 +++ b/model/aero/aero_final_increment_cubed_sphere.yaml.j2 @@ -6,9 +6,9 @@ geometry: layout: - {{aero_layout_x}} - {{aero_layout_y}} - npx: {{aero_npx_anl}} - npy: {{aero_npy_anl}} - npz: {{aero_npz_anl}} + npx: {{aero_npx_ges}} + npy: {{aero_npy_ges}} + npz: {{aero_npz_ges}} field metadata override: "{{aero_fv3jedi_files_path}}/fv3jedi_fieldmetadata_restart.yaml" output: state component: From 8ee71d26111a46d01f0dc9796d49e19fdcf2cf4f Mon Sep 17 00:00:00 2001 From: Guillaume Vernieres Date: Mon, 16 Dec 2024 13:32:40 -0500 Subject: [PATCH 5/5] Updated configuration for "cp4" (#58) - Added filtering to the variance partitioning - Increased decorrelation length scales - Removed u,v from state/incr - Fixed outdated hybrid B yaml - Updated obs configuration from @JohnSteffen-NOAA --------- Co-authored-by: JohnSteffen-NOAA <77806417+JohnSteffen-NOAA@users.noreply.github.com> --- algorithm/marine/soca_diagb.yaml.j2 | 2 +- .../soca_parameters_diffusion_hz.yaml.j2 | 2 +- algorithm/marine/soca_setcorscales.yaml.j2 | 4 +- algorithm/marine/socaincr2mom6.yaml.j2 | 11 +++- model/marine/marine_background.yaml.j2 | 16 ++++- ...d_error_hybrid_diffusion_diffusion.yaml.j2 | 59 ++++++++++++++----- ..._background_error_static_diffusion.yaml.j2 | 26 ++++++-- observations/marine/adt_rads_all.yaml.j2 | 2 +- observations/marine/icec_abi_g16_l2.yaml.j2 | 12 ++++ observations/marine/icec_amsr2_north.yaml.j2 | 6 ++ observations/marine/icec_amsr2_south.yaml.j2 | 6 ++ observations/marine/icec_amsu_mb_l2.yaml.j2 | 12 ++++ observations/marine/icec_atms_n20_l2.yaml.j2 | 12 ++++ observations/marine/icec_atms_n21_l2.yaml.j2 | 12 ++++ observations/marine/icec_atms_npp_l2.yaml.j2 | 12 ++++ observations/marine/icec_gmi_gpm_l2.yaml.j2 | 6 ++ observations/marine/icec_ssmis_f17_l2.yaml.j2 | 12 ++++ .../marine/icec_viirs_n20_l2_north.yaml.j2 | 12 ++++ .../marine/icec_viirs_n20_l2_south.yaml.j2 | 12 ++++ observations/marine/sss_smap_l2.yaml.j2 | 3 +- observations/marine/sss_smos_l2.yaml.j2 | 3 +- 21 files changed, 215 insertions(+), 27 deletions(-) diff --git a/algorithm/marine/soca_diagb.yaml.j2 b/algorithm/marine/soca_diagb.yaml.j2 index 30e9c68..788f674 100644 --- a/algorithm/marine/soca_diagb.yaml.j2 +++ b/algorithm/marine/soca_diagb.yaml.j2 @@ -39,7 +39,7 @@ number of halo points: 4 number of neighbors: 16 simple smoothing: - horizontal iterations: 10 + horizontal iterations: 100 vertical iterations: 1 # TODO(G): Too slow for the below scale diff --git a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 index a0fc0e1..8f3cdf7 100644 --- a/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 +++ b/algorithm/marine/soca_parameters_diffusion_hz.yaml.j2 @@ -18,7 +18,7 @@ background error: calibration: normalization: method: randomization - iterations: 10000 + iterations: 1000 groups: - horizontal: diff --git a/algorithm/marine/soca_setcorscales.yaml.j2 b/algorithm/marine/soca_setcorscales.yaml.j2 index c1a1ec8..0c2b9c0 100644 --- a/algorithm/marine/soca_setcorscales.yaml.j2 +++ b/algorithm/marine/soca_setcorscales.yaml.j2 @@ -9,8 +9,8 @@ corr variables: [sea_surface_height_above_geoid] scales: vert layers: 5 # in units of layer sea_surface_height_above_geoid: - rossby mult: 1.00 - min grid mult: 2.0 + rossby mult: 2.00 + min grid mult: 6.0 rh output: datadir: ./ diff --git a/algorithm/marine/socaincr2mom6.yaml.j2 b/algorithm/marine/socaincr2mom6.yaml.j2 index deaec76..0790fc9 100644 --- a/algorithm/marine/socaincr2mom6.yaml.j2 +++ b/algorithm/marine/socaincr2mom6.yaml.j2 @@ -6,7 +6,16 @@ date: '{{ marine_window_begin }}' layers variable: [sea_water_cell_thickness] -increment variables: [sea_water_potential_temperature, sea_water_salinity, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] +increment variables: +- sea_water_potential_temperature +- sea_water_salinity +#- eastward_sea_water_velocity +#- northward_sea_water_velocity +- sea_surface_height_above_geoid # Not used in MOM6 iau + +set increment variables to zero: +- eastward_sea_water_velocity +- northward_sea_water_velocity vertical geometry: date: '{{ marine_window_begin }}' diff --git a/model/marine/marine_background.yaml.j2 b/model/marine/marine_background.yaml.j2 index 205f583..4be1f74 100644 --- a/model/marine/marine_background.yaml.j2 +++ b/model/marine/marine_background.yaml.j2 @@ -3,4 +3,18 @@ basename: {{ marine_background_path}} ocn_filename: MOM.res.nc ice_filename: cice.res.nc date: "{{ marine_background_time }}" -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] +state variables: +- sea_ice_area_fraction +- sea_ice_thickness +- sea_ice_snow_thickness +- snow_ice_surface_temperature +- air_temperature +- bulk_ice_salinity +- 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_hybrid_diffusion_diffusion.yaml.j2 b/model/marine/marine_background_error_hybrid_diffusion_diffusion.yaml.j2 index b2709aa..5a5a1ac 100644 --- a/model/marine/marine_background_error_hybrid_diffusion_diffusion.yaml.j2 +++ b/model/marine/marine_background_error_hybrid_diffusion_diffusion.yaml.j2 @@ -6,15 +6,22 @@ components: saber block name: diffusion read: groups: - - variables: [tocn, socn, ssh] + - 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: [cicen] - 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 @@ -25,10 +32,25 @@ components: ocn_filename: 'ocn.bkgerr_stddev.nc' ice_filename: 'ice.bkgerr_stddev.nc' 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 weight: @@ -43,7 +65,15 @@ components: basename: ../ensdata/ ocn_filename: 'ocn.pert.steric.%mem%.nc' ice_filename: 'ens/ice.%mem%.nc' - state variables: [tocn, socn, ssh, uocn, vocn, cicen, hicen, hsnon] + 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 pattern: '%mem%' nmembers: '{{marine_number_ensemble_members}}' localization: @@ -52,15 +82,16 @@ components: saber block name: diffusion read: groups: - - variables: [tocn, socn, ssh] - multivariate strategy: duplicated + - variables: + - sea_water_potential_temperature + - sea_water_salinity + - sea_surface_height_above_geoid + - sea_ice_area_fraction horizontal: filepath: ./staticb/hz_ocean vertical: - strategy: duplicated - - variables: [cicen] - horizontal: - filepath: ./staticb/hz_ice + levels: {{marine_vt_levels}} + filepath: ./staticb/vt_ocean weight: read_from_file: 3 basename: ./ diff --git a/model/marine/marine_background_error_static_diffusion.yaml.j2 b/model/marine/marine_background_error_static_diffusion.yaml.j2 index 4b31572..2a41011 100644 --- a/model/marine/marine_background_error_static_diffusion.yaml.j2 +++ b/model/marine/marine_background_error_static_diffusion.yaml.j2 @@ -30,6 +30,24 @@ saber outer blocks: ice_filename: 'ice.bkgerr_stddev.nc' read_from_file: 3 +#- saber block name: MLBalance +# geometry: +# mom6_input_nml: mom_input.nml +# fields metadata: ./fields_metadata.yaml +# ML Balances: +# arctic: +# ffnn: +# inputSize: 7 +# outputSize: 1 +# hiddenSize: 2 +# load model: /work/noaa/da/gvernier/ai/runs/arctic.pt +# antarctic: +# ffnn: +# inputSize: 7 +# outputSize: 1 +# hiddenSize: 2 +# load model: /work/noaa/da/gvernier/ai/runs/antarctic.pt + linear variable change: input variables: - sea_ice_area_fraction @@ -37,8 +55,8 @@ linear variable change: - sea_ice_snow_thickness - sea_water_salinity - sea_water_potential_temperature - - eastward_sea_water_velocity - - northward_sea_water_velocity + #- eastward_sea_water_velocity + #- northward_sea_water_velocity - sea_surface_height_above_geoid output variables: - sea_ice_area_fraction @@ -46,8 +64,8 @@ linear variable change: - sea_ice_snow_thickness - sea_water_salinity - sea_water_potential_temperature - - eastward_sea_water_velocity - - northward_sea_water_velocity + #- 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/marine/adt_rads_all.yaml.j2 b/observations/marine/adt_rads_all.yaml.j2 index e3be83c..1fc2f05 100644 --- a/observations/marine/adt_rads_all.yaml.j2 +++ b/observations/marine/adt_rads_all.yaml.j2 @@ -41,7 +41,7 @@ variables: [GeoVaLs/mesoscale_representation_error, ObsError/absoluteDynamicTopography] coefs: [0.2, - 2.0] + 10.0] - filter: Domain Check where: - variable: { name: GeoVaLs/sea_ice_area_fraction} diff --git a/observations/marine/icec_abi_g16_l2.yaml.j2 b/observations/marine/icec_abi_g16_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_abi_g16_l2.yaml.j2 +++ b/observations/marine/icec_abi_g16_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_amsr2_north.yaml.j2 b/observations/marine/icec_amsr2_north.yaml.j2 index c633898..6d88cc3 100644 --- a/observations/marine/icec_amsr2_north.yaml.j2 +++ b/observations/marine/icec_amsr2_north.yaml.j2 @@ -43,3 +43,9 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +# - filter: Gaussian Thinning +# horizontal_mesh: 25 #km +# use_reduced_horizontal_grid: true +# select_median: true +# action: +# name: reduce obs space diff --git a/observations/marine/icec_amsr2_south.yaml.j2 b/observations/marine/icec_amsr2_south.yaml.j2 index c633898..6d88cc3 100644 --- a/observations/marine/icec_amsr2_south.yaml.j2 +++ b/observations/marine/icec_amsr2_south.yaml.j2 @@ -43,3 +43,9 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 +# - filter: Gaussian Thinning +# horizontal_mesh: 25 #km +# use_reduced_horizontal_grid: true +# select_median: true +# action: +# name: reduce obs space diff --git a/observations/marine/icec_amsu_mb_l2.yaml.j2 b/observations/marine/icec_amsu_mb_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_amsu_mb_l2.yaml.j2 +++ b/observations/marine/icec_amsu_mb_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_atms_n20_l2.yaml.j2 b/observations/marine/icec_atms_n20_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_atms_n20_l2.yaml.j2 +++ b/observations/marine/icec_atms_n20_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_atms_n21_l2.yaml.j2 b/observations/marine/icec_atms_n21_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_atms_n21_l2.yaml.j2 +++ b/observations/marine/icec_atms_n21_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_atms_npp_l2.yaml.j2 b/observations/marine/icec_atms_npp_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_atms_npp_l2.yaml.j2 +++ b/observations/marine/icec_atms_npp_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_gmi_gpm_l2.yaml.j2 b/observations/marine/icec_gmi_gpm_l2.yaml.j2 index c633898..4018e17 100644 --- a/observations/marine/icec_gmi_gpm_l2.yaml.j2 +++ b/observations/marine/icec_gmi_gpm_l2.yaml.j2 @@ -43,3 +43,9 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_ssmis_f17_l2.yaml.j2 b/observations/marine/icec_ssmis_f17_l2.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_ssmis_f17_l2.yaml.j2 +++ b/observations/marine/icec_ssmis_f17_l2.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_viirs_n20_l2_north.yaml.j2 b/observations/marine/icec_viirs_n20_l2_north.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_viirs_n20_l2_north.yaml.j2 +++ b/observations/marine/icec_viirs_n20_l2_north.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/icec_viirs_n20_l2_south.yaml.j2 b/observations/marine/icec_viirs_n20_l2_south.yaml.j2 index c633898..33eeb23 100644 --- a/observations/marine/icec_viirs_n20_l2_south.yaml.j2 +++ b/observations/marine/icec_viirs_n20_l2_south.yaml.j2 @@ -43,3 +43,15 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: Gaussian Thinning + horizontal_mesh: 25 #km + use_reduced_horizontal_grid: true + select_median: true + action: + name: reduce obs space + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + maxvalue: -4.0 diff --git a/observations/marine/sss_smap_l2.yaml.j2 b/observations/marine/sss_smap_l2.yaml.j2 index c8b50b2..20b645b 100644 --- a/observations/marine/sss_smap_l2.yaml.j2 +++ b/observations/marine/sss_smap_l2.yaml.j2 @@ -33,7 +33,8 @@ name: passivate where: - variable: {name: GeoVaLs/sea_surface_temperature} - minvalue: 15.0 +# minvalue: 15.0 + maxvalue: -4.0 ## Gaussian_Thinning is having problems with LETKF, try again later # - filter: Gaussian_Thinning # horizontal_mesh: 25.0 #km diff --git a/observations/marine/sss_smos_l2.yaml.j2 b/observations/marine/sss_smos_l2.yaml.j2 index c8b50b2..20b645b 100644 --- a/observations/marine/sss_smos_l2.yaml.j2 +++ b/observations/marine/sss_smos_l2.yaml.j2 @@ -33,7 +33,8 @@ name: passivate where: - variable: {name: GeoVaLs/sea_surface_temperature} - minvalue: 15.0 +# minvalue: 15.0 + maxvalue: -4.0 ## Gaussian_Thinning is having problems with LETKF, try again later # - filter: Gaussian_Thinning # horizontal_mesh: 25.0 #km