From 16ed9c5b5cdbdb750de605498eadcef83228d56a Mon Sep 17 00:00:00 2001 From: brettcandy Date: Wed, 6 Aug 2025 10:45:28 +0100 Subject: [PATCH 1/5] add missing namelist files for EPSMWS and associated ctest --- etc/global/cx/EPSMWS.nl | 3 + etc/global/varobs/EPSMWS.nl | 3 + test/CMakeLists.txt | 4 + test/generate_unittest_netcdfs.py | 9 ++ .../varobs_globalnamelist_epsmws.nc4 | Bin 0 -> 17007 bytes .../varobswriter_globalnamelist_epsmws.yaml | 106 ++++++++++++++++++ 6 files changed, 125 insertions(+) create mode 100644 etc/global/cx/EPSMWS.nl create mode 100644 etc/global/varobs/EPSMWS.nl create mode 100644 test/testinput/varobs_globalnamelist_epsmws.nc4 create mode 100644 test/testinput/varobswriter_globalnamelist_epsmws.yaml diff --git a/etc/global/cx/EPSMWS.nl b/etc/global/cx/EPSMWS.nl new file mode 100644 index 00000000..7e3c5a63 --- /dev/null +++ b/etc/global/cx/EPSMWS.nl @@ -0,0 +1,3 @@ +&CXControlNL +CxFields=4,10,12,24,31,33,254,266,267,268,407,409,3209,3210,3236,3245,16222 +/ diff --git a/etc/global/varobs/EPSMWS.nl b/etc/global/varobs/EPSMWS.nl new file mode 100644 index 00000000..dae09ded --- /dev/null +++ b/etc/global/varobs/EPSMWS.nl @@ -0,0 +1,3 @@ +&VarobsControlNL +Varfields=10,11,17,19,21,54,55,28,31,80 +/ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9e8febc8..e944c04e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -371,6 +371,10 @@ ADD_WRITER_TEST(NAME varobswriter_globalnamelist_sternamwr YAML varobswriter_globalnamelist_sternamwr.yaml NAMELIST ../../etc/global/varobs/SternaMWR.nl DATA varobs_globalnamelist_sternamwr.nc4) +ADD_WRITER_TEST(NAME varobswriter_globalnamelist_epsmws + YAML varobswriter_globalnamelist_epsmws.yaml + NAMELIST ../../etc/global/varobs/EPSMWS.nl + DATA varobs_globalnamelist_epsmws.nc4) # Tests the UKV namelist files in the etc directory diff --git a/test/generate_unittest_netcdfs.py b/test/generate_unittest_netcdfs.py index 4f0cc9d6..7a8b8cc9 100644 --- a/test/generate_unittest_netcdfs.py +++ b/test/generate_unittest_netcdfs.py @@ -832,6 +832,15 @@ def copy_var_to_var(Group, invarname, outvarname, filename): 'thickness_850_300hPa_satid_17Predictor/brightnessTemperature'], ['MetaData/surfaceQualifier', 'MetaData/satelliteIdentifier'], 'testinput/varobs_globalnamelist_sternamwr.nc4') + + # EPSMWS + output_full_varobs_to_netcdf(['MetaData/latitude', 'MetaData/longitude', 'OneDVar/skinTemperature', 'MetaData/sensorZenithAngle', + 'MetaData/solarZenithAngle'], + ['ObsValue/brightnessTemperature', 'ObsError/brightnessTemperature', 'Emiss/emissivity', + 'BiasCorrObsValue/brightnessTemperature', 'thickness_850_300hPa_satid_13Predictor/brightnessTemperature', + 'thickness_850_300hPa_satid_17Predictor/brightnessTemperature'], + ['MetaData/surfaceQualifier', 'MetaData/satelliteIdentifier'], + 'testinput/varobs_globalnamelist_epsmws.nc4') # GNSS-RO diff --git a/test/testinput/varobs_globalnamelist_epsmws.nc4 b/test/testinput/varobs_globalnamelist_epsmws.nc4 new file mode 100644 index 0000000000000000000000000000000000000000..75cfd68b7d079c74f65f3a603a6573d986805d82 GIT binary patch literal 17007 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 B$}Io@ literal 0 HcmV?d00001 diff --git a/test/testinput/varobswriter_globalnamelist_epsmws.yaml b/test/testinput/varobswriter_globalnamelist_epsmws.yaml new file mode 100644 index 00000000..b6ef46e2 --- /dev/null +++ b/test/testinput/varobswriter_globalnamelist_epsmws.yaml @@ -0,0 +1,106 @@ +time window: + begin: 2018-01-01T00:00:00Z + end: 2018-01-01T02:00:00Z + +observations: +# This ob space shows what happens if the following are left as defaults +# reject_obs_with_all_variables_failing_qc: false +# reject_obs_with_any_variables_failing_qc: false +# This means that despite the blacklist the entries still end up in the varobs file + - obs space: + name: EPSMWS + obsdatain: + engine: + type: H5File + obsfile: Data/varobs_globalnamelist_epsmws.nc4 + simulated variables: [brightnessTemperature] + channels: 1, 3 + obs filters: + # Set the flag of observations with missing values to "pass": we want to check if these + # values are encoded correctly in the VarObsFile. + - filter: Reset Flags to Pass + flags_to_reset: [10, 15] # missing, Hfailed + # Reject observation 3: the blacklist doesn't stop the ob getting into the varobs because of the above "bad" settings + - filter: BlackList + where: + - variable: + name: MetaData/latitude + value: is_not_valid + - filter: VarObs Writer + namelist_directory: ../etc/global/varobs + general_mode: debug + - filter: VarObs Checker + expected_main_table_columns: + # Only channels 1 and 3 are simulated and hence written to the VarObs file. + # In the arrays below, rows denote locations and columns are the varobs channels are consecutive. + field: ["10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80", + "10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80", + "10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80", + "10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80"] + level: ["1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31", + "1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31", + "1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31", + "1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] + ob value: ["31.10000","31.30000","27.10000", "21.10000","21.30000","37.10000", "3.00000", "2.00000","1.00000","2.00000","13.00000", "47.10000", "0.00000","92.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000", + "32.10000","32.30000","-1073741824.00000","22.10000","22.30000","-1073741824.00000","-32768.00000","0.00000","0.00000","0.00000","-32768.00000","-1073741824.00000","0.00000","94.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000", + "33.10000","33.30000","27.30000", "23.10000","23.30000","37.30000", "7.00000", "2.00000","1.00000","2.00000","17.00000", "47.30000", "0.00000","96.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000", + "34.10000","34.30000","27.40000", "24.10000","24.30000","37.40000", "9.00000", "2.00000","1.00000","2.00000","19.00000", "47.40000", "0.00000","98.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000"] + lat: ["7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000", + "-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000", + "7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000", + "7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000"] + lon: ["17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000", + "-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000","-1073741824.00000", + "17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000", + "17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000"] + HofX: ObsValue # just a placeholder -- not used, but needed to force calls to postFilter. + benchmarkFlag: 1000 # just to keep the ObsFilters test happy + flaggedBenchmark: 0 +# This ob space shows what the atms behaviour should be +# reject_obs_with_all_variables_failing_qc: true +# reject_obs_with_any_variables_failing_qc: false + - obs space: + name: SternaMWR + obsdatain: + engine: + type: H5File + obsfile: Data/varobs_globalnamelist_sternamwr.nc4 + simulated variables: [brightnessTemperature] + channels: 1, 3 + obs filters: + # Set the flag of observations with missing values to "pass": we want to check if these + # values are encoded correctly in the VarObsFile. + - filter: Reset Flags to Pass + flags_to_reset: [10, 15] # missing, Hfailed + # Reject observation 2: we want to check if it is omitted from the VarObs file, as expected. + - filter: BlackList + where: + - variable: + name: MetaData/latitude + value: is_not_valid + - filter: VarObs Writer + namelist_directory: ../etc/global/varobs + general_mode: debug + reject_obs_with_all_variables_failing_qc: true + - filter: VarObs Checker + expected_main_table_columns: + # Only channels 1 and 3 are simulated and hence written to the VarObs file. + # In the arrays below, rows denote locations and columns are the varobs channels are consecutive. + field: ["10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80", + "10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80", + "10","10","11","17","17","19","21","54","55","55","28","31","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80","80"] + level: ["1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31", + "1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31", + "1","2","1","1","2","1","1","1","1","2","1","1","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] + ob value: ["31.10000","31.30000","27.10000", "21.10000","21.30000","37.10000", "3.00000", "2.00000","1.00000","2.00000","13.00000", "47.10000", "0.00000","92.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000", + "33.10000","33.30000","27.30000", "23.10000","23.30000","37.30000", "7.00000", "2.00000","1.00000","2.00000","17.00000", "47.30000", "0.00000","96.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000", + "34.10000","34.30000","27.40000", "24.10000","24.30000","37.40000", "9.00000", "2.00000","1.00000","2.00000","19.00000", "47.40000", "0.00000","98.20000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000","0.00000"] + lat: ["7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000","7.10000", + "7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000","7.30000", + "7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000","7.40000"] + lon: ["17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000","17.10000", + "17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000","17.30000", + "17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000","17.40000"] + HofX: ObsValue # just a placeholder -- not used, but needed to force calls to postFilter. + benchmarkFlag: 1000 # just to keep the ObsFilters test happy + flaggedBenchmark: 0 From 377942bd89c8b19cd11812282a7817323ab01d8c Mon Sep 17 00:00:00 2001 From: brettcandy Date: Wed, 6 Aug 2025 11:17:38 +0100 Subject: [PATCH 2/5] minor update to default fields --- deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc b/deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc index 4fd3c257..3383eb9f 100644 --- a/deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc +++ b/deps/ops/stubs/OpsMod_Varobs/Ops_GetDefaultVarfields.inc @@ -285,15 +285,15 @@ SELECT CASE (ObsGroup) VarField_tcozone,VarField_solzenith,VarField_QCinfo, & VarField_clw/) CASE (ObsGroupEPSMWS) !setup for jedi - Varfields(1:10) = (/Varfield_britemp,Varfield_satid,Varfield_satzenith, & + Varfields(1:9) = (/Varfield_britemp,Varfield_satid,Varfield_satzenith, & Varfield_solzenith,Varfield_tskin, & Varfield_surface,Varfield_numchans,Varfield_channum, & - Varfield_mwemiss, varfield_biaspredictors /) + Varfield_mwemiss /) CASE (ObsGroupSternaMWR) !set up for jedi - Varfields(1:10) = (/Varfield_britemp,Varfield_satid,Varfield_satzenith, & + Varfields(1:9) = (/Varfield_britemp,Varfield_satid,Varfield_satzenith, & Varfield_solzenith,Varfield_tskin, & Varfield_surface,Varfield_numchans,Varfield_channum, & - Varfield_mwemiss, varfield_biaspredictors /) + Varfield_mwemiss /) CASE (ObsGroupRainAccum) Varfields(1:1) = (/Varfield_RainAccum/) END SELECT From 333dce2dfcd5e5aa635a77f666713bd283459972 Mon Sep 17 00:00:00 2001 From: brettcandy Date: Fri, 8 Aug 2025 14:59:16 +0100 Subject: [PATCH 3/5] add cx test for epsmws requested by reviewer --- test/testinput/cx_globalnamelist_epsmws.nc4 | Bin 0 -> 16506 bytes .../cxwriter_globalnamelist_epsmws.yaml | 42 ++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 test/testinput/cx_globalnamelist_epsmws.nc4 create mode 100644 test/testinput/cxwriter_globalnamelist_epsmws.yaml diff --git a/test/testinput/cx_globalnamelist_epsmws.nc4 b/test/testinput/cx_globalnamelist_epsmws.nc4 new file mode 100644 index 0000000000000000000000000000000000000000..ac7dd545cf3fea4874fbd11ad10824c0cefc7ffd GIT binary patch literal 16506 zcmeHO3v83u6+TWJ2*H#`NJDAYnl|Mb(j?}UK_E_IFHu7XB&g68{WbA#Vw%{&b^>hB zr7B~C0b^M^EoPMv($?5v5)pjLpe?aA*WvM(Zi7Y}IHA?({J4O5_dP-%KaSvG`CMOYJGCsG>B?L&O zG_uiHBCjW68WDekNuy9*RpTN`vLNY@od2t~Y@IaeOG4h-vFSxw{Sk9476c<%P*gx9 z&XdQA8jqfEpSIX3GnF#G1&D6mPwr?h;btFpR$QKeB`;;e9y?NN2}DXKuFbD>N67is^RI)B)XKaV|NMoLQE zb}x_#g#E#QePvU`9tcLReAVm;`8_M^%^W+Y8Dv9+l2D;L04^$IRGN`muWv@FzrpX7 z04q%FvU0d4(svG@fAne$lhv09rBd%O97ffOMQ8_Ajxij5yI|<(8;0sOQ|BKUqA;9m zv1ExmPXdD#)`A}@#p@bV`!#r(CK#JMRh8)6kUB<0NVd>86^XkqqkEm+=8`4R(`0XB zLX-r9A+JAxz8CIJ3v@fdTah>yvbas#V~V>Y!EW@mE7YziudboH;2~I_iI3>Tq6c#X z&LvoSP!hJTx&Y~%=cD-w#>^Xc=RUypf~XvlsGmr^fXylVlKTRiycrbYTm-OH^c6BL z-7VLU-Ghinrybd!xu~SuElZqiI2Oj})vl$ZOM`3<8 zh7=42g)?#ravamWX0urzY{cji$*%MIW)|k<=_1s&@ zbv3z>U4TKfT4hATSa;G8e$@o?XTNC1NzU;+}Y@^u69w@gX-EA3<)0! zFUu67zl+}U=WlPlG|F-Kk6$ZUR3VFNx=R_~>u7XQ1&H;5Fj*}K=XMb*__&ByWe~vRE&dzb}=)pcR&dzaobcw(2 z=s16lFUNFz$Nn6L7hr5>f4RQt;?H(L50TiPJ5(p#^NFZ>VAmH=uT@Y<+TX6c+wgnDHdeKiCH-7H(4JmRss*6saswndL+(ps0 zEyy>+_B3oWoDPS>8EwmRo<3FT6#mgRC*&H~t6^UZ*$cTAvd8K39YDSxwtbKfOaIfS zUVwZY_G7Rgh5QQS-$L$y{0Zd$LjDh8Sc+ABsMz61DL#G5TI};#ArFI`3ON<>gOIZz zXF;B#{U<}74tqB2*^u)f=R(efyby8)X;dblYuz%v|b3k5V}|ECUg_=H%mR*wi)%^ z3_Ys#DD)`wcCEKVZ!f-0Xq%{J0)Yeq2?P=dd_e^Ie?vmN;g`Dz`jxSGvtLkNv&_Au ztct|z{G`~{8Wi5}AFVeGc*i34qL?=lbk6U)QS`bA?s_Le*M{t<)zSx4Aq#b!+!E*- zpf&eU)y>$Hef(B#RQ2zstZ3h^4K21_qJLXZCn&{x(A>QI*4*|c;Vefojig+$Exg3# zb}eyLmbeVLEj$ZNCN@TJ%)=8lBUko^V+R{3ReZ0wV3*s*yfMM~TD>DBYX;w1y|cu+ zZ32u)tp6%T31#o#Eim zGc24>*zNjw-r0S{HD#rgB8V%trM#0nrz!VzxkoGH-7nc5nZMcQu-Ya1u!-9#%NlW{|Rq){z~mqQY6d zb*cG9oPX8*`wOZJQax2hz*!~Lk^opG)r9&%j5Jet4%00a z3$19PDM^}3yhzuCd1`Uz0mC0K zJduWAxUtR@g+1%dP;3gba(Btq_3d>Cen`EVzTMj&&3I|_rehW>_r&P};NtVtnw<_+9gCHF_Goc6PssGd@JOG@KHS|W)|viQbzsKIU^Cj^ z^aPAB3P_l{1fMmF3-Z8_*{xZwRO5uEmBq?q##qx6j;!^BKnOob1lPRWhFxE#nX2EY|`}5r?FETji=L~K%etck^p8;6s^*iglQfHl4->k Date: Fri, 8 Aug 2025 15:21:51 +0100 Subject: [PATCH 4/5] add cx test for sternamwr too --- test/CMakeLists.txt | 8 ++++ test/generate_unittest_netcdfs.py | 17 ++++++- .../testinput/cx_globalnamelist_sternamwr.nc4 | Bin 0 -> 16506 bytes .../cxwriter_globalnamelist_sternamwr.yaml | 42 ++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 test/testinput/cx_globalnamelist_sternamwr.nc4 create mode 100644 test/testinput/cxwriter_globalnamelist_sternamwr.yaml diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e944c04e..402723eb 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -654,6 +654,14 @@ ADD_WRITER_TEST(NAME cxwriter_globalnamelist_atovs YAML cxwriter_globalnamelist_atovs.yaml NAMELIST ../../etc/global/cx/ATOVS.nl DATA cx_globalnamelist_atovs.nc4 dummy.nc4) +ADD_WRITER_TEST(NAME cxwriter_globalnamelist_epsmws + YAML cxwriter_globalnamelist_epsmws.yaml + NAMELIST ../../etc/global/cx/EPSMWS.nl + DATA cx_globalnamelist_epsmws.nc4 dummy.nc4) +ADD_WRITER_TEST(NAME cxwriter_globalnamelist_sternamwr + YAML cxwriter_globalnamelist_sternamwr.yaml + NAMELIST ../../etc/global/cx/SternaMWR.nl + DATA cx_globalnamelist_sternamwr.nc4 dummy.nc4) ADD_WRITER_TEST(NAME cxwriter_globalnamelist_ssmis YAML cxwriter_globalnamelist_ssmis.yaml NAMELIST ../../etc/global/cx/SSMIS.nl diff --git a/test/generate_unittest_netcdfs.py b/test/generate_unittest_netcdfs.py index 7a8b8cc9..5ac732f7 100644 --- a/test/generate_unittest_netcdfs.py +++ b/test/generate_unittest_netcdfs.py @@ -1115,7 +1115,22 @@ def copy_var_to_var(Group, invarname, outvarname, filename): 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water', 'air_pressure_levels', 'cloud_volume_fraction_in_atmosphere_layer', 'liquid_cloud_volume_fraction_in_atmosphere_layer', 'ice_cloud_volume_fraction_in_atmosphere_layer'], 'testinput/cx_globalnamelist_atovs.nc4') - + + # EPSMWS + output_full_cx_to_netcdf(['skin_temperature_at_surface', 'ice_area_fraction', 'height_above_mean_sea_level_at_surface', 'air_pressure_at_surface', 'eastward_wind_at_10m', + 'northward_wind_at_10m', 'air_temperature_at_2m', 'relative_humidity_at_2m', 'air_pressure_at_sea_level'], + ['air_potential_temperature', 'water_vapor_mixing_ratio_wrt_moist_air', 'cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water', + 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water', 'air_pressure_levels', + 'cloud_volume_fraction_in_atmosphere_layer', 'liquid_cloud_volume_fraction_in_atmosphere_layer', 'ice_cloud_volume_fraction_in_atmosphere_layer'], + 'testinput/cx_globalnamelist_epsmws.nc4') + # SternaMWR + output_full_cx_to_netcdf(['skin_temperature_at_surface', 'ice_area_fraction', 'height_above_mean_sea_level_at_surface', 'air_pressure_at_surface', 'eastward_wind_at_10m', + 'northward_wind_at_10m', 'air_temperature_at_2m', 'relative_humidity_at_2m', 'air_pressure_at_sea_level'], + ['air_potential_temperature', 'water_vapor_mixing_ratio_wrt_moist_air', 'cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water', + 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water', 'air_pressure_levels', + 'cloud_volume_fraction_in_atmosphere_layer', 'liquid_cloud_volume_fraction_in_atmosphere_layer', 'ice_cloud_volume_fraction_in_atmosphere_layer'], + 'testinput/cx_globalnamelist_sternamwr.nc4') + # SSMIS output_full_cx_to_netcdf(['skin_temperature_at_surface', 'ice_area_fraction', 'height_above_mean_sea_level_at_surface', 'air_pressure_at_surface', 'eastward_wind_at_10m', 'northward_wind_at_10m', 'air_temperature_at_2m', 'relative_humidity_at_2m', 'air_pressure_at_sea_level'], diff --git a/test/testinput/cx_globalnamelist_sternamwr.nc4 b/test/testinput/cx_globalnamelist_sternamwr.nc4 new file mode 100644 index 0000000000000000000000000000000000000000..ac7dd545cf3fea4874fbd11ad10824c0cefc7ffd GIT binary patch literal 16506 zcmeHO3v83u6+TWJ2*H#`NJDAYnl|Mb(j?}UK_E_IFHu7XB&g68{WbA#Vw%{&b^>hB zr7B~C0b^M^EoPMv($?5v5)pjLpe?aA*WvM(Zi7Y}IHA?({J4O5_dP-%KaSvG`CMOYJGCsG>B?L&O zG_uiHBCjW68WDekNuy9*RpTN`vLNY@od2t~Y@IaeOG4h-vFSxw{Sk9476c<%P*gx9 z&XdQA8jqfEpSIX3GnF#G1&D6mPwr?h;btFpR$QKeB`;;e9y?NN2}DXKuFbD>N67is^RI)B)XKaV|NMoLQE zb}x_#g#E#QePvU`9tcLReAVm;`8_M^%^W+Y8Dv9+l2D;L04^$IRGN`muWv@FzrpX7 z04q%FvU0d4(svG@fAne$lhv09rBd%O97ffOMQ8_Ajxij5yI|<(8;0sOQ|BKUqA;9m zv1ExmPXdD#)`A}@#p@bV`!#r(CK#JMRh8)6kUB<0NVd>86^XkqqkEm+=8`4R(`0XB zLX-r9A+JAxz8CIJ3v@fdTah>yvbas#V~V>Y!EW@mE7YziudboH;2~I_iI3>Tq6c#X z&LvoSP!hJTx&Y~%=cD-w#>^Xc=RUypf~XvlsGmr^fXylVlKTRiycrbYTm-OH^c6BL z-7VLU-Ghinrybd!xu~SuElZqiI2Oj})vl$ZOM`3<8 zh7=42g)?#ravamWX0urzY{cji$*%MIW)|k<=_1s&@ zbv3z>U4TKfT4hATSa;G8e$@o?XTNC1NzU;+}Y@^u69w@gX-EA3<)0! zFUu67zl+}U=WlPlG|F-Kk6$ZUR3VFNx=R_~>u7XQ1&H;5Fj*}K=XMb*__&ByWe~vRE&dzb}=)pcR&dzaobcw(2 z=s16lFUNFz$Nn6L7hr5>f4RQt;?H(L50TiPJ5(p#^NFZ>VAmH=uT@Y<+TX6c+wgnDHdeKiCH-7H(4JmRss*6saswndL+(ps0 zEyy>+_B3oWoDPS>8EwmRo<3FT6#mgRC*&H~t6^UZ*$cTAvd8K39YDSxwtbKfOaIfS zUVwZY_G7Rgh5QQS-$L$y{0Zd$LjDh8Sc+ABsMz61DL#G5TI};#ArFI`3ON<>gOIZz zXF;B#{U<}74tqB2*^u)f=R(efyby8)X;dblYuz%v|b3k5V}|ECUg_=H%mR*wi)%^ z3_Ys#DD)`wcCEKVZ!f-0Xq%{J0)Yeq2?P=dd_e^Ie?vmN;g`Dz`jxSGvtLkNv&_Au ztct|z{G`~{8Wi5}AFVeGc*i34qL?=lbk6U)QS`bA?s_Le*M{t<)zSx4Aq#b!+!E*- zpf&eU)y>$Hef(B#RQ2zstZ3h^4K21_qJLXZCn&{x(A>QI*4*|c;Vefojig+$Exg3# zb}eyLmbeVLEj$ZNCN@TJ%)=8lBUko^V+R{3ReZ0wV3*s*yfMM~TD>DBYX;w1y|cu+ zZ32u)tp6%T31#o#Eim zGc24>*zNjw-r0S{HD#rgB8V%trM#0nrz!VzxkoGH-7nc5nZMcQu-Ya1u!-9#%NlW{|Rq){z~mqQY6d zb*cG9oPX8*`wOZJQax2hz*!~Lk^opG)r9&%j5Jet4%00a z3$19PDM^}3yhzuCd1`Uz0mC0K zJduWAxUtR@g+1%dP;3gba(Btq_3d>Cen`EVzTMj&&3I|_rehW>_r&P};NtVtnw<_+9gCHF_Goc6PssGd@JOG@KHS|W)|viQbzsKIU^Cj^ z^aPAB3P_l{1fMmF3-Z8_*{xZwRO5uEmBq?q##qx6j;!^BKnOob1lPRWhFxE#nX2EY|`}5r?FETji=L~K%etck^p8;6s^*iglQfHl4->k Date: Mon, 11 Aug 2025 16:45:10 +0100 Subject: [PATCH 5/5] Trigger CI