From 41169ec2b724e3780b0716a1cca91778fb56d611 Mon Sep 17 00:00:00 2001 From: JohnSteffen-NOAA <77806417+JohnSteffen-NOAA@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:49:51 -0500 Subject: [PATCH] Update to jcb-gdas marine obs yamls (#41) This PR updates the marine observations yamls introduced in [https://github.com/NOAA-EMC/jcb-gdas/commit/41ee2a276e2688d19eef7d3dcb9567e3042f6843](url) by modifying the observation errors and additional filters to be consistent with the marine candidate experiment. It addresses this GDASApp issue [https://github.com/NOAA-EMC/GDASApp/issues/1316](url). Additionally, yamls for new sea ice retrievals and SMAP/SMOS retrievals are included. Close https://github.com/NOAA-EMC/GDASApp/issues/1316 Co-authored-by: Guillaume Vernieres --- observations/marine/adt_rads_all.yaml.j2 | 14 +- observations/marine/icec_abi_g16_l2.yaml.j2 | 45 +++ observations/marine/icec_amsu_mb_l2.yaml.j2 | 45 +++ observations/marine/icec_atms_n20_l2.yaml.j2 | 45 +++ observations/marine/icec_atms_n21_l2.yaml.j2 | 45 +++ observations/marine/icec_atms_npp_l2.yaml.j2 | 45 +++ observations/marine/icec_gmi_gpm_l2.yaml.j2 | 45 +++ observations/marine/icec_ssmis_f17_l2.yaml.j2 | 45 +++ .../marine/icec_viirs_n20_l2_north.yaml.j2 | 45 +++ .../marine/icec_viirs_n20_l2_south.yaml.j2 | 45 +++ .../marine/insitu_profile_argo.yaml.j2 | 279 +++++++++++++++++- .../marine/insitu_profile_bathy.yaml.j2 | 13 +- .../marine/insitu_profile_dbuoy.yaml.j2 | 14 +- .../marine/insitu_profile_dbuoyb.yaml.j2 | 13 +- .../marine/insitu_profile_glider.yaml.j2 | 13 +- .../insitu_profile_marinemammal.yaml.j2 | 13 +- .../marine/insitu_profile_mbuoy.yaml.j2 | 13 +- .../marine/insitu_profile_mbuoyb.yaml.j2 | 13 +- .../marine/insitu_profile_tesac.yaml.j2 | 13 +- .../insitu_profile_tesac_salinity.yaml.j2 | 13 +- .../marine/insitu_profile_xbtctd.yaml.j2 | 13 +- .../marine/insitu_surface_altkob.yaml.j2 | 13 +- .../marine/insitu_surface_trkob.yaml.j2 | 13 +- .../insitu_surface_trkob_salinity.yaml.j2 | 13 +- observations/marine/sss_smap_l2.yaml.j2 | 43 +++ observations/marine/sss_smos_l2.yaml.j2 | 43 +++ observations/marine/sst_abi_g16_l3c.yaml.j2 | 16 +- observations/marine/sst_abi_g17_l3c.yaml.j2 | 16 +- observations/marine/sst_ahi_h08_l3c.yaml.j2 | 16 +- observations/marine/sst_avhrr_ma_l3u.yaml.j2 | 10 +- observations/marine/sst_avhrr_mb_l3u.yaml.j2 | 10 +- observations/marine/sst_avhrr_mc_l3u.yaml.j2 | 10 +- observations/marine/sst_viirs_n20_l3u.yaml.j2 | 10 +- observations/marine/sst_viirs_npp_l3u.yaml.j2 | 10 +- 34 files changed, 996 insertions(+), 56 deletions(-) create mode 100644 observations/marine/icec_abi_g16_l2.yaml.j2 create mode 100644 observations/marine/icec_amsu_mb_l2.yaml.j2 create mode 100644 observations/marine/icec_atms_n20_l2.yaml.j2 create mode 100644 observations/marine/icec_atms_n21_l2.yaml.j2 create mode 100644 observations/marine/icec_atms_npp_l2.yaml.j2 create mode 100644 observations/marine/icec_gmi_gpm_l2.yaml.j2 create mode 100644 observations/marine/icec_ssmis_f17_l2.yaml.j2 create mode 100644 observations/marine/icec_viirs_n20_l2_north.yaml.j2 create mode 100644 observations/marine/icec_viirs_n20_l2_south.yaml.j2 create mode 100644 observations/marine/sss_smap_l2.yaml.j2 create mode 100644 observations/marine/sss_smos_l2.yaml.j2 diff --git a/observations/marine/adt_rads_all.yaml.j2 b/observations/marine/adt_rads_all.yaml.j2 index da532ec..e3be83c 100644 --- a/observations/marine/adt_rads_all.yaml.j2 +++ b/observations/marine/adt_rads_all.yaml.j2 @@ -40,8 +40,8 @@ options: variables: [GeoVaLs/mesoscale_representation_error, ObsError/absoluteDynamicTopography] - coefs: [0.1, - 1.0] + coefs: [0.2, + 2.0] - filter: Domain Check where: - variable: { name: GeoVaLs/sea_ice_area_fraction} @@ -50,3 +50,13 @@ where: - variable: {name: GeoVaLs/distance_from_coast} minvalue: 100e3 + - filter: BlackList + where: + - variable: + name: MetaData/latitude + minvalue: 4 + maxvalue: 30 + - variable: + name: MetaData/longitude + minvalue: 32 + maxvalue: 56 diff --git a/observations/marine/icec_abi_g16_l2.yaml.j2 b/observations/marine/icec_abi_g16_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_abi_g16_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_amsu_mb_l2.yaml.j2 b/observations/marine/icec_amsu_mb_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_amsu_mb_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_atms_n20_l2.yaml.j2 b/observations/marine/icec_atms_n20_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_atms_n20_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_atms_n21_l2.yaml.j2 b/observations/marine/icec_atms_n21_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_atms_n21_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_atms_npp_l2.yaml.j2 b/observations/marine/icec_atms_npp_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_atms_npp_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_gmi_gpm_l2.yaml.j2 b/observations/marine/icec_gmi_gpm_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_gmi_gpm_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_ssmis_f17_l2.yaml.j2 b/observations/marine/icec_ssmis_f17_l2.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_ssmis_f17_l2.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_viirs_n20_l2_north.yaml.j2 b/observations/marine/icec_viirs_n20_l2_north.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_viirs_n20_l2_north.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/icec_viirs_n20_l2_south.yaml.j2 b/observations/marine/icec_viirs_n20_l2_south.yaml.j2 new file mode 100644 index 0000000..c633898 --- /dev/null +++ b/observations/marine/icec_viirs_n20_l2_south.yaml.j2 @@ -0,0 +1,45 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaIceFraction] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.0 + maxvalue: 1.0 + #- filter: Background Check + # threshold: 5.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 2.0 + - filter: Domain Check + where: + - variable: { name: GeoVaLs/sea_surface_temperature} + maxvalue: 0.0 + action: + name: inflate error + inflation factor: 2.0 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/insitu_profile_argo.yaml.j2 b/observations/marine/insitu_profile_argo.yaml.j2 index 0d121a0..12b09fa 100644 --- a/observations/marine/insitu_profile_argo.yaml.j2 +++ b/observations/marine/insitu_profile_argo.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_argo + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -59,3 +59,280 @@ minvalue: -2.5 maxvalue: 40.0 + #----------------------------------------------------------------------------- + ### Regional range tests + #----------------------------------------------------------------------------- + + #### Red Sea + #----------------------------------------------------------------------------- + #### + #### the document linked here describes Red sea as the are between 10N, 40E; + #### 20N, 50E; 30N, 30E; 10N, 40E. But that would also include Gulf of Aden. + #### A more reasonable choice seemed to be a box that extends from 10 N to + #### 30 N and 30 E to 45 East . + + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: 21.7 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 10 + maxvalue: 30 + - variable: + name: MetaData/longitude + minvalue: 30 + maxvalue: 45 + + #### Mediterranean Sea + #----------------------------------------------------------------------------- + ##### Area 1/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: 10.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 30 + maxvalue: 40 + - variable: + name: MetaData/longitude + minvalue: -6 + maxvalue: 40 + ##### Area 2/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: 10.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 40 + maxvalue: 41.5 + - variable: + name: MetaData/longitude + minvalue: 20 + maxvalue: 30 + ##### Area 3/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: 10.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 40 + maxvalue: 46 + - variable: + name: MetaData/longitude + minvalue: 0 + maxvalue: 20 + + #### Northwestern shelves + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: -2.0 + maxvalue: 24.0 + where: + - variable: + name: MetaData/latitude + minvalue: 50 + maxvalue: 60 + - variable: + name: MetaData/longitude + minvalue: -20 + maxvalue: 10 + #### Southwestern shelves + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: -2.0 + maxvalue: 30 + where: + - variable: + name: MetaData/latitude + minvalue: 25 + maxvalue: 50 + - variable: + name: MetaData/longitude + minvalue: -30 + maxvalue: 0 + + #### Arctic Ocean + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: waterTemperature}] + minvalue: -1.92 + maxvalue: 25.0 + where: + - variable: + name: MetaData/latitude + minvalue: 60 + + - filter: Background Check + filter variables: [{name: waterTemperature}] + threshold: 5.0 + absolute threshold: 5.0 + + ## Filters for S: + #------------------------------------------------------------------------------- + #----------------------------------------------------------------------------- + ### Global range test + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 41.0 + + #----------------------------------------------------------------------------- + ### Regional range test + #----------------------------------------------------------------------------- + #### Red Sea + #----------------------------------------------------------------------------- + #### + #### the document linked here describes Red sea as the are between 10N, 40E; + #### 20N, 50E; 30N, 30E; 10N, 40E. But that would also include Gulf of Aden. + #### A more reasonable choice seemed to be a box that extends from 10 N to + #### 30 N and 30 E to 45 East . + + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 41.0 + where: + - variable: + name: MetaData/latitude + minvalue: 10 + maxvalue: 30 + - variable: + name: MetaData/longitude + minvalue: 30 + maxvalue: 45 + + #### Mediterranean Sea + #----------------------------------------------------------------------------- + ##### Area 1/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 30 + maxvalue: 40 + - variable: + name: MetaData/longitude + minvalue: -6 + maxvalue: 40 + ##### Area 2/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 40 + maxvalue: 41.5 + - variable: + name: MetaData/longitude + minvalue: 20 + maxvalue: 30 + ##### Area 3/3 for Mediterranean Sea + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 40 + maxvalue: 46 + - variable: + name: MetaData/longitude + minvalue: 0 + maxvalue: 20 + + + #### Northwestern shelves + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 0.0 + maxvalue: 37.0 + where: + - variable: + name: MetaData/latitude + minvalue: 50 + maxvalue: 60 + - variable: + name: MetaData/longitude + minvalue: -20 + maxvalue: 10 + + #### Southwestern shelves + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 0.0 + maxvalue: 38 + where: + - variable: + name: MetaData/latitude + minvalue: 25 + maxvalue: 50 + - variable: + name: MetaData/longitude + minvalue: -30 + maxvalue: 0 + + #### Arctic Ocean + #----------------------------------------------------------------------------- + - filter: Bounds Check + filter variables: [{name: salinity}] + minvalue: 2.0 + maxvalue: 40.0 + where: + - variable: + name: MetaData/latitude + minvalue: 60 + + - filter: Background Check + filter variables: [{name: salinity}] + threshold: 5.0 + absolute threshold: 5.0 + + #----------------------------------------------------------------------------- + - filter: RejectList + where: + - variable: QCflagsData/waterTemperature + minvalue: 1 + defer to post: true + + #-------------------------------------------------------------------------- + ### Set in situ obs multiplier coef for T,S + #------------------------------------------------------------------------ + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/salinity + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_bathy.yaml.j2 b/observations/marine/insitu_profile_bathy.yaml.j2 index 8223f36..e379c3b 100644 --- a/observations/marine/insitu_profile_bathy.yaml.j2 +++ b/observations/marine/insitu_profile_bathy.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_bathy + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -15,3 +15,14 @@ name: InsituTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_dbuoy.yaml.j2 b/observations/marine/insitu_profile_dbuoy.yaml.j2 index cec36c1..e8a9ca3 100644 --- a/observations/marine/insitu_profile_dbuoy.yaml.j2 +++ b/observations/marine/insitu_profile_dbuoy.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_dbuoy + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,15 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 + diff --git a/observations/marine/insitu_profile_dbuoyb.yaml.j2 b/observations/marine/insitu_profile_dbuoyb.yaml.j2 index 5cec54d..8cdc4e1 100644 --- a/observations/marine/insitu_profile_dbuoyb.yaml.j2 +++ b/observations/marine/insitu_profile_dbuoyb.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_dbuoyb + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_glider.yaml.j2 b/observations/marine/insitu_profile_glider.yaml.j2 index 1c9bab3..8cdc4e1 100644 --- a/observations/marine/insitu_profile_glider.yaml.j2 +++ b/observations/marine/insitu_profile_glider.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_glider + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_marinemammal.yaml.j2 b/observations/marine/insitu_profile_marinemammal.yaml.j2 index ad44565..8cdc4e1 100644 --- a/observations/marine/insitu_profile_marinemammal.yaml.j2 +++ b/observations/marine/insitu_profile_marinemammal.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_marinemammal + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_mbuoy.yaml.j2 b/observations/marine/insitu_profile_mbuoy.yaml.j2 index bf783ca..8cdc4e1 100644 --- a/observations/marine/insitu_profile_mbuoy.yaml.j2 +++ b/observations/marine/insitu_profile_mbuoy.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_mbuoy + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_mbuoyb.yaml.j2 b/observations/marine/insitu_profile_mbuoyb.yaml.j2 index 78c2617..8cdc4e1 100644 --- a/observations/marine/insitu_profile_mbuoyb.yaml.j2 +++ b/observations/marine/insitu_profile_mbuoyb.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_mbuoyb + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_tesac.yaml.j2 b/observations/marine/insitu_profile_tesac.yaml.j2 index 0c9af57..d0986b9 100644 --- a/observations/marine/insitu_profile_tesac.yaml.j2 +++ b/observations/marine/insitu_profile_tesac.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_tesac + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -18,3 +18,14 @@ - name: InsituTemperature variables: - name: waterTemperature + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_tesac_salinity.yaml.j2 b/observations/marine/insitu_profile_tesac_salinity.yaml.j2 index 36c5003..4e8b3bc 100644 --- a/observations/marine/insitu_profile_tesac_salinity.yaml.j2 +++ b/observations/marine/insitu_profile_tesac_salinity.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_tesac_salinity + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ interpolation method: linear obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/salinity + coefs: + - 1000.0 diff --git a/observations/marine/insitu_profile_xbtctd.yaml.j2 b/observations/marine/insitu_profile_xbtctd.yaml.j2 index aee91cf..8cdc4e1 100644 --- a/observations/marine/insitu_profile_xbtctd.yaml.j2 +++ b/observations/marine/insitu_profile_xbtctd.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_profile_xbtctd + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -20,3 +20,14 @@ - name: waterTemperature obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/waterTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_surface_altkob.yaml.j2 b/observations/marine/insitu_surface_altkob.yaml.j2 index 063c3ec..cf7da64 100644 --- a/observations/marine/insitu_surface_altkob.yaml.j2 +++ b/observations/marine/insitu_surface_altkob.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_surface_altkob + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -16,3 +16,14 @@ observation alias file: obsop_name_map.yaml obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/seaSurfaceTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_surface_trkob.yaml.j2 b/observations/marine/insitu_surface_trkob.yaml.j2 index 6251292..833fdac 100644 --- a/observations/marine/insitu_surface_trkob.yaml.j2 +++ b/observations/marine/insitu_surface_trkob.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_surface_trkob + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -16,3 +16,14 @@ observation alias file: ./obsop_name_map.yaml obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/seaSurfaceTemperature + coefs: + - 1000.0 diff --git a/observations/marine/insitu_surface_trkob_salinity.yaml.j2 b/observations/marine/insitu_surface_trkob_salinity.yaml.j2 index 5ba67e9..3bf2085 100644 --- a/observations/marine/insitu_surface_trkob_salinity.yaml.j2 +++ b/observations/marine/insitu_surface_trkob_salinity.yaml.j2 @@ -1,5 +1,5 @@ - obs space: - name: insitu_surface_trkob_salinity + name: {{observation_from_jcb}} obsdatain: engine: type: H5File @@ -16,3 +16,14 @@ observation alias file: ./obsop_name_map.yaml obs error: covariance model: diagonal + obs filters: + - filter: Perform Action + action: + name: assign error + error function: + name: ObsFunction/LinearCombination + options: + variables: + - ObsError/seaSurfaceSalinity + coefs: + - 1000.0 diff --git a/observations/marine/sss_smap_l2.yaml.j2 b/observations/marine/sss_smap_l2.yaml.j2 new file mode 100644 index 0000000..c8b50b2 --- /dev/null +++ b/observations/marine/sss_smap_l2.yaml.j2 @@ -0,0 +1,43 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaSurfaceSalinity] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.1 + maxvalue: 40.0 + - filter: Background Check + threshold: 5.0 + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + minvalue: 15.0 + ## Gaussian_Thinning is having problems with LETKF, try again later + # - filter: Gaussian_Thinning + # horizontal_mesh: 25.0 #km + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/sss_smos_l2.yaml.j2 b/observations/marine/sss_smos_l2.yaml.j2 new file mode 100644 index 0000000..c8b50b2 --- /dev/null +++ b/observations/marine/sss_smos_l2.yaml.j2 @@ -0,0 +1,43 @@ +- obs space: + name: {{observation_from_jcb}} + obsdatain: + engine: + type: H5File + obsfile: "{{marine_obsdatain_path}}/{{marine_obsdatain_prefix}}{{observation_from_jcb}}{{marine_obsdatain_suffix}}" + obsdataout: + engine: + type: H5File + obsfile: "{{marine_obsdataout_path}}/{{marine_obsdataout_prefix}}{{observation_from_jcb}}{{marine_obsdataout_suffix}}" + simulated variables: [seaSurfaceSalinity] + io pool: + max pool size: 1 + get values: + time interpolation: linear + obs operator: + name: Identity + observation alias file: obsop_name_map.yaml + obs error: + covariance model: diagonal + obs filters: + - filter: Domain Check + where: + - variable: {name: GeoVaLs/sea_area_fraction} + minvalue: 0.9 + - filter: Bounds Check + minvalue: 0.1 + maxvalue: 40.0 + - filter: Background Check + threshold: 5.0 + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: GeoVaLs/sea_surface_temperature} + minvalue: 15.0 + ## Gaussian_Thinning is having problems with LETKF, try again later + # - filter: Gaussian_Thinning + # horizontal_mesh: 25.0 #km + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 diff --git a/observations/marine/sst_abi_g16_l3c.yaml.j2 b/observations/marine/sst_abi_g16_l3c.yaml.j2 index 184fc29..2d91234 100644 --- a/observations/marine/sst_abi_g16_l3c.yaml.j2 +++ b/observations/marine/sst_abi_g16_l3c.yaml.j2 @@ -19,6 +19,12 @@ obs error: covariance model: diagonal obs filters: + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: ObsValue/seaSurfaceTemperature} + maxvalue: -4.0 - filter: Domain Check where: - variable: {name: GeoVaLs/sea_area_fraction} @@ -40,10 +46,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +59,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_abi_g17_l3c.yaml.j2 b/observations/marine/sst_abi_g17_l3c.yaml.j2 index 184fc29..2d91234 100644 --- a/observations/marine/sst_abi_g17_l3c.yaml.j2 +++ b/observations/marine/sst_abi_g17_l3c.yaml.j2 @@ -19,6 +19,12 @@ obs error: covariance model: diagonal obs filters: + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: ObsValue/seaSurfaceTemperature} + maxvalue: -4.0 - filter: Domain Check where: - variable: {name: GeoVaLs/sea_area_fraction} @@ -40,10 +46,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +59,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_ahi_h08_l3c.yaml.j2 b/observations/marine/sst_ahi_h08_l3c.yaml.j2 index 184fc29..2d91234 100644 --- a/observations/marine/sst_ahi_h08_l3c.yaml.j2 +++ b/observations/marine/sst_ahi_h08_l3c.yaml.j2 @@ -19,6 +19,12 @@ obs error: covariance model: diagonal obs filters: + - filter: Domain Check + action: + name: passivate + where: + - variable: {name: ObsValue/seaSurfaceTemperature} + maxvalue: -4.0 - filter: Domain Check where: - variable: {name: GeoVaLs/sea_area_fraction} @@ -40,10 +46,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +59,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_avhrr_ma_l3u.yaml.j2 b/observations/marine/sst_avhrr_ma_l3u.yaml.j2 index 184fc29..63f847a 100644 --- a/observations/marine/sst_avhrr_ma_l3u.yaml.j2 +++ b/observations/marine/sst_avhrr_ma_l3u.yaml.j2 @@ -40,10 +40,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +53,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_avhrr_mb_l3u.yaml.j2 b/observations/marine/sst_avhrr_mb_l3u.yaml.j2 index 184fc29..63f847a 100644 --- a/observations/marine/sst_avhrr_mb_l3u.yaml.j2 +++ b/observations/marine/sst_avhrr_mb_l3u.yaml.j2 @@ -40,10 +40,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +53,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_avhrr_mc_l3u.yaml.j2 b/observations/marine/sst_avhrr_mc_l3u.yaml.j2 index 184fc29..63f847a 100644 --- a/observations/marine/sst_avhrr_mc_l3u.yaml.j2 +++ b/observations/marine/sst_avhrr_mc_l3u.yaml.j2 @@ -40,10 +40,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +53,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_viirs_n20_l3u.yaml.j2 b/observations/marine/sst_viirs_n20_l3u.yaml.j2 index 184fc29..63f847a 100644 --- a/observations/marine/sst_viirs_n20_l3u.yaml.j2 +++ b/observations/marine/sst_viirs_n20_l3u.yaml.j2 @@ -40,10 +40,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +53,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0 diff --git a/observations/marine/sst_viirs_npp_l3u.yaml.j2 b/observations/marine/sst_viirs_npp_l3u.yaml.j2 index 184fc29..63f847a 100644 --- a/observations/marine/sst_viirs_npp_l3u.yaml.j2 +++ b/observations/marine/sst_viirs_npp_l3u.yaml.j2 @@ -40,10 +40,10 @@ where: - variable: {name: GeoVaLs/sea_surface_temperature} minvalue: -1.0 - #- filter: Domain Check - # where: - # - variable: {name: GeoVaLs/distance_from_coast} - # minvalue: 100e3 + - filter: Domain Check + where: + - variable: {name: GeoVaLs/distance_from_coast} + minvalue: 100e3 - filter: Perform Action action: name: assign error @@ -53,4 +53,4 @@ variables: - ObsError/seaSurfaceTemperature coefs: - - 0.05 + - 1.0