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/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 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/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: 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/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/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 diff --git a/observations/snow/adpsfc_snow.yaml.j2 b/observations/snow/adpsfc_snow.yaml.j2 new file mode 100644 index 0000000..f0fe2fd --- /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..ea7a956 --- /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..f1ef5d4 --- /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..29ba159 --- /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