diff --git a/requirements.txt b/requirements.txt index ef64ba0a..6624318e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ pandas>=1.4.0 isodate>=0.5.4 f90nml>=1.4.3 questionary>=1.10.0 +h5py>=3.7.0 diff --git a/src/swell/__init__.py b/src/swell/__init__.py index e1371654..11f86a89 100644 --- a/src/swell/__init__.py +++ b/src/swell/__init__.py @@ -9,4 +9,4 @@ repo_directory = os.path.dirname(__file__) # Set the version for swell -__version__ = '1.6.0' +__version__ = '1.6.4' diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml index bc6a6698..9924581f 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml @@ -1,9 +1,3 @@ - -obs operator: - name: VertInterp - observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' - apply near surface wind scaling: true - obs space: name: Aircraft obsdatain: @@ -20,8 +14,143 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.aircraft.{{window_begin}}.nc4' simulated variables: [airTemperature, windEastward, windNorthward] +obs operator: + name: Composite + components: + + - name: VertInterp + variables: + - name: windEastward + - name: windNorthward + + # Hofx scaling + hofx scaling field: SurfaceWindScalingPressure + hofx scaling field group: DerivedVariables + + - name: VertInterp + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + variables: [airTemperature] + obs filters: +# Apply variable changes needed for performing wind scaling +# --------------------------------------------------------- +- filter: Variable Transforms + Transform: SurfaceWindScalingPressure + +# ------------------ +# airTemperature BC +# ------------------ + +# Reassign any AIREP/PIREP (type=130) airTemperature MetaData/stationIdentification to 'KX130 ' +- filter: Variable Assignment + where: + - variable: + name: ObsType/airTemperature + is_in: 130 + assignments: + - name: MetaData/stationIdentification + value: 'KX130 ' +# The BiasCorrectionTerm/constantPredictor can be pulled directly +# from the BiasCoefficientValue/constantPredictor, since the +# term is just the coefficient value * 1. +- filter: Variable Assignment + assignments: + - name: BiasCorrectionTerm/constantPredictor + type: float + function: + name: ObsFunction/DrawValueFromFile + options: + file: '{{cycle_dir}}/aircraft_abias_air_constant.{{background_time}}.csv' + group: BiasCoefficientValue + interpolation: + - name: MetaData/stationIdentification + method: exact + defer to post: true +# The BiasCorrectionTerm/ascentPredictor requires use of +# ObsFunction/AircraftBiasCorrectionTerm to combine the coefficient +# with the predictor value, so for now we assign the coefficient to +# its own variable. +- filter: Variable Assignment + assignments: + - name: BiasCoefficientValue/ascentPredictor + type: float + function: + name: ObsFunction/DrawValueFromFile + options: + file: '{{cycle_dir}}/aircraft_abias_air_ascent.{{background_time}}.csv' + group: BiasCoefficientValue + interpolation: + - name: MetaData/stationIdentification + method: exact + defer to post: true +# The BiasCorrectionTerm/ascentSquaredPredictor requires use of +# ObsFunction/AircraftBiasCorrectionTerm to combine the coefficient +# with the predictor value raised to order=2, so for now we assign +# the coefficient to its own variable. +- filter: Variable Assignment + assignments: + - name: BiasCoefficientValue/ascentSquaredPredictor + type: float + function: + name: ObsFunction/DrawValueFromFile + options: + file: '{{cycle_dir}}/aircraft_abias_air_ascentSquared.{{background_time}}.csv' + group: BiasCoefficientValue + interpolation: + - name: MetaData/stationIdentification + method: exact + defer to post: true +# Reassign any ascent predictor to zero where MetaData/windUpward >50. +- filter: Variable Assignment + where: + - variable: + name: MetaData/windUpward + minvalue: 50. + assignments: + - name: MetaData/windUpward + value: 0. +# Compute the BiasCorrectionTerm/ascentPredictor as +# coefficient * predictor (order=1) +- filter: Variable Assignment + assignments: + - name: BiasCorrectionTerm/ascentPredictor + type: float + function: + name: ObsFunction/AircraftBiasCorrectionTerm + options: + coeff_grpvarname: BiasCoefficientValue/ascentPredictor + predi_grpvarname: MetaData/windUpward + predi_order: 1. + defer to post: true +# Compute the BiasCorrectionTerm/ascentSquaredPredictor as +# coefficient * predictor (order=2) +- filter: Variable Assignment + assignments: + - name: BiasCorrectionTerm/ascentSquaredPredictor + type: float + function: + name: ObsFunction/AircraftBiasCorrectionTerm + options: + coeff_grpvarname: BiasCoefficientValue/ascentSquaredPredictor + predi_grpvarname: MetaData/windUpward + predi_order: 2. + defer to post: true +# Use ObsFunction/LinearCombination to combine ObsValue/airTemperature with the +# BiasCorrectionPredictor/ variables to produce a bias-corrected +# HofX +- filter: Variable Assignment + assignments: + - name: HofXBc/airTemperature + type: float + function: + name: ObsFunction/LinearCombination + options: + variables: [HofX/airTemperature, BiasCorrectionTerm/constantPredictor, BiasCorrectionTerm/ascentPredictor, BiasCorrectionTerm/ascentSquaredPredictor] + coefs: [1.0, 1.0, 1.0, 1.0] + defer to post: true + +# ------------------ # airTemperature # -------------- @@ -209,6 +338,29 @@ obs filters: geovar_sfc_geomz: surface_geometric_height defer to post: true +# inflate error for tails with uninitialized bias coefficients (i.e. all coefficients equal to zero) +- filter: Perform Action + action: + name: inflate error + inflation factor: 1.2 + filter variables: + - name: airTemperature + where: + - variable: + name: BiasCorrectionTerm/constantPredictor + is_close_to_any_of: [0.0] + absolute_tolerance: 1.0e-6 + - variable: + name: BiasCoefficientValue/ascentPredictor + is_close_to_any_of: [0.0] + absolute_tolerance: 1.0e-6 + - variable: + name: BiasCoefficientValue/ascentSquaredPredictor + is_close_to_any_of: [0.0] + absolute_tolerance: 1.0e-6 + defer to post: true + + # assign TempObsErrorData/airTemperature <--- ObsErrorData before changing its Min and Max - filter: Variable Assignment assignments: @@ -267,6 +419,7 @@ obs filters: # Background check # ratio threshold 7.0 - filter: Background Check + test_hofx: HofXBc filter variables: - name: airTemperature threshold: 7.0 @@ -279,6 +432,7 @@ obs filters: # ratio threshold * 0.7 if PreQC=3 - filter: Background Check + test_hofx: HofXBc filter variables: - name: airTemperature threshold: 4.9 @@ -315,10 +469,6 @@ obs filters: variable: airTemperature defer to post: true -# Note: have not implemented error inflation for new tail. One tail 'RPXTOZBA' had uninitialized -# errors and its error was inflated by a factor of 1.2 - - # Eastward and northward wind # --------------------------- diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml index ead75d51..28021a83 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml @@ -1,355 +1,368 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] -# SurfaceWindGeoVars: uv - obs options: - Sensor_ID: &Sensor_ID airs_aqua - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/airs_aqua.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.airs_aqua.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &airs_aqua_channels - 1, 6, 7, 10, 11, 15, 16, 17, 20, 21, 22, 24, - 27, 28, 30, 36, 39, 40, 42, 51, 52, 54, 55, 56, 59, 62, 63, 68, 69, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 86, 92, 93, 98, 99, 101, - 104, 105, 108, 110, 111, 113, 116, 117, 123, 124, 128, 129, 138, 139, - 144, 145, 150, 151, 156, 157, 159, 162, 165, 168, 169, 170, 172, 173, - 174, 175, 177, 179, 180, 182, 185, 186, 190, 192, 198, 201, 204, 207, - 210, 215, 216, 221, 226, 227, 232, 252, 253, 256, 257, 261, 262, 267, - 272, 295, 299, 300, 305, 310, 321, 325, 333, 338, 355, 362, 375, 453, - 475, 484, 497, 528, 587, 672, 787, 791, 843, 870, 914, 950, 1003, 1012, - 1019, 1024, 1030, 1038, 1048, 1069, 1079, 1082, 1083, 1088, 1090, 1092, - 1095, 1104, 1111, 1115, 1116, 1119, 1120, 1123, 1130, 1138, 1142, 1178, - 1199, 1206, 1221, 1237, 1252, 1260, 1263, 1266, 1285, 1301, 1304, 1329, - 1371, 1382, 1415, 1424, 1449, 1455, 1466, 1477, 1500, 1519, 1538, 1545, - 1565, 1574, 1583, 1593, 1614, 1627, 1636, 1644, 1652, 1669, 1674, 1681, - 1694, 1708, 1717, 1723, 1740, 1748, 1751, 1756, 1763, 1766, 1771, 1777, - 1780, 1783, 1794, 1800, 1803, 1806, 1812, 1826, 1843, 1852, 1865, 1866, - 1868, 1869, 1872, 1873, 1876, 1881, 1882, 1883, 1911, 1917, 1918, 1924, - 1928, 1937, 1941, 2099, 2100, 2101, 2103, 2104, 2106, 2107, 2108, 2109, - 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, - 2122, 2123, 2128, 2134, 2141, 2145, 2149, 2153, 2164, 2189, 2197, 2209, - 2226, 2234, 2280, 2318, 2321, 2325, 2328, 2333, 2339, 2348, 2353, 2355, - 2357, 2363, 2370, 2371, 2377 - obs bias: - input file: '{{cycle_dir}}/airs_aqua.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &airs_aqua_tlapse '{{cycle_dir}}/airs_aqua.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *airs_aqua_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *airs_aqua_channels - action: - name: assign error - error parameter vector: [ 1.2000, 1.2000, 1.3136, 1.4000, 1.4000, 1.2639, 1.4000, 1.4000, 1.1802, 1.2517, - 1.1719, 1.2000, 1.1728, 1.1442, 1.2000, 1.2000, 1.1500, 1.0801, 1.1500, 1.1500, - 1.0396, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 0.9946, 1.0500, - 0.9217, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, - 2.0000, 2.0000, 2.0000, 0.9591, 0.9465, 0.9593, 0.9337, 1.0000, 0.9861, 1.0017, - 1.1000, 1.0083, 1.0024, 1.1000, 0.9967, 1.0094, 0.9412, 1.1000, 0.9980, 0.9807, - 0.8570, 0.8727, 0.8114, 0.8790, 0.8710, 0.8853, 0.7937, 0.8243, 0.8000, 0.8016, - 0.8000, 0.7781, 0.7475, 0.8500, 0.7405, 0.7150, 0.7416, 0.7465, 0.9000, 0.7198, - 0.7157, 0.9000, 0.7270, 0.7246, 0.7040, 0.7039, 0.6600, 0.6694, 0.6669, 0.7031, - 0.6977, 0.6488, 0.6653, 0.9000, 0.6265, 0.6220, 0.6308, 0.6297, 0.6210, 0.6225, - 0.6229, 0.6234, 0.6238, 0.6332, 0.6425, 0.7028, 0.6152, 0.9000, 0.7257, 0.7288, - 1.1500, 0.9000, 0.6673, 0.7473, 0.6767, 0.7056, 0.9000, 0.9500, 0.7271, 0.9500, - 0.7250, 0.7601, 0.6973, 0.7573, 0.6011, 0.6060, 0.9000, 0.6635, 0.5860, 0.5766, - 0.7500, 2.0386, 0.7500, 1.0000, 0.9000, 0.9000, 0.9000, 0.9000, 0.9000, 0.9000, - 1.0000, 1.3386, 1.0000, 1.0000, 0.8500, 0.9500, 1.7386, 0.9500, 0.9000, 0.8000, - 1.7386, 0.7500, 0.7500, 0.7500, 0.8000, 0.7500, 0.8000, 0.9000, 0.7500, 0.8000, - 0.8000, 1.1000, 0.7500, 1.1000, 0.7500, 0.5991, 0.5348, 0.6541, 0.7421, 0.6192, - 0.8186, 1.0616, 0.8848, 1.0240, 2.5000, 1.0249, 1.0795, 1.2199, 2.5000, 2.5000, - 1.3103, 1.3603, 2.5000, 2.5000, 2.5000, 1.3230, 2.5000, 2.5000, 2.5000, 1.4406, - 2.5000, 2.5000, 1.3965, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, - 2.5000, 1.6997, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 1.6264, 2.5000, 2.5000, - 2.5000, 1.3436, 2.5000, 2.5000, 0.5727, 0.6838, 0.5994, 0.5178, 0.5145, 0.5470, - 0.5572, 0.5002, 0.4974, 0.5500, 0.4953, 0.4883, 0.4948, 0.5446, 0.5777, 1.5000, - 1.5000, 3.0000, 3.0000, 2.5000, 2.5000, 2.0000, 1.0000, 1.5000, 1.5000, 1.8000, - 0.6000, 0.7000, 0.6500, 0.6750, 0.7000, 0.7500, 0.7750, 0.8000, 0.8000, 0.8500, - 0.8500, 0.8500, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7250, - 0.7500, 0.7750, 0.8000, 0.8250, 0.8000, 0.8000, 0.8000, 0.7500, 0.8000, 0.8000, - 0.8000, 0.8000, 0.8000, 0.8500, 0.8000, 0.8000, 2.5000, 0.7500, 0.7500, 0.7500, - 0.7500 ] +obs space: + name: AIRS AQUA + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/airs_aqua.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.airs_aqua.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &airs_aqua_channels + 1, 6, 7, 10, 11, 15, 16, 17, 20, 21, 22, 24, + 27, 28, 30, 36, 39, 40, 42, 51, 52, 54, 55, 56, 59, 62, 63, 68, 69, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 86, 92, 93, 98, 99, 101, + 104, 105, 108, 110, 111, 113, 116, 117, 123, 124, 128, 129, 138, 139, + 144, 145, 150, 151, 156, 157, 159, 162, 165, 168, 169, 170, 172, 173, + 174, 175, 177, 179, 180, 182, 185, 186, 190, 192, 198, 201, 204, 207, + 210, 215, 216, 221, 226, 227, 232, 252, 253, 256, 257, 261, 262, 267, + 272, 295, 299, 300, 305, 310, 321, 325, 333, 338, 355, 362, 375, 453, + 475, 484, 497, 528, 587, 672, 787, 791, 843, 870, 914, 950, 1003, 1012, + 1019, 1024, 1030, 1038, 1048, 1069, 1079, 1082, 1083, 1088, 1090, 1092, + 1095, 1104, 1111, 1115, 1116, 1119, 1120, 1123, 1130, 1138, 1142, 1178, + 1199, 1206, 1221, 1237, 1252, 1260, 1263, 1266, 1285, 1301, 1304, 1329, + 1371, 1382, 1415, 1424, 1449, 1455, 1466, 1477, 1500, 1519, 1538, 1545, + 1565, 1574, 1583, 1593, 1614, 1627, 1636, 1644, 1652, 1669, 1674, 1681, + 1694, 1708, 1717, 1723, 1740, 1748, 1751, 1756, 1763, 1766, 1771, 1777, + 1780, 1783, 1794, 1800, 1803, 1806, 1812, 1826, 1843, 1852, 1865, 1866, + 1868, 1869, 1872, 1873, 1876, 1881, 1882, 1883, 1911, 1917, 1918, 1924, + 1928, 1937, 1941, 2099, 2100, 2101, 2103, 2104, 2106, 2107, 2108, 2109, + 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 2121, + 2122, 2123, 2128, 2134, 2141, 2145, 2149, 2153, 2164, 2189, 2197, 2209, + 2226, 2234, 2280, 2318, 2321, 2325, 2328, 2333, 2339, 2348, 2353, 2355, + 2357, 2363, 2370, 2371, 2377 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID airs_aqua + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/airs_aqua.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &airs_aqua_tlapse '{{cycle_dir}}/airs_aqua.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *airs_aqua_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/airs_aqua.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/airs_aqua.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + action: + name: assign error + error parameter vector: [ 1.2000, 1.2000, 1.3136, 1.4000, 1.4000, 1.2639, 1.4000, 1.4000, 1.1802, 1.2517, + 1.1719, 1.2000, 1.1728, 1.1442, 1.2000, 1.2000, 1.1500, 1.0801, 1.1500, 1.1500, + 1.0396, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 1.1500, 0.9946, 1.0500, + 0.9217, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, 2.0000, + 2.0000, 2.0000, 2.0000, 0.9591, 0.9465, 0.9593, 0.9337, 1.0000, 0.9861, 1.0017, + 1.1000, 1.0083, 1.0024, 1.1000, 0.9967, 1.0094, 0.9412, 1.1000, 0.9980, 0.9807, + 0.8570, 0.8727, 0.8114, 0.8790, 0.8710, 0.8853, 0.7937, 0.8243, 0.8000, 0.8016, + 0.8000, 0.7781, 0.7475, 0.8500, 0.7405, 0.7150, 0.7416, 0.7465, 0.9000, 0.7198, + 0.7157, 0.9000, 0.7270, 0.7246, 0.7040, 0.7039, 0.6600, 0.6694, 0.6669, 0.7031, + 0.6977, 0.6488, 0.6653, 0.9000, 0.6265, 0.6220, 0.6308, 0.6297, 0.6210, 0.6225, + 0.6229, 0.6234, 0.6238, 0.6332, 0.6425, 0.7028, 0.6152, 0.9000, 0.7257, 0.7288, + 1.1500, 0.9000, 0.6673, 0.7473, 0.6767, 0.7056, 0.9000, 0.9500, 0.7271, 0.9500, + 0.7250, 0.7601, 0.6973, 0.7573, 0.6011, 0.6060, 0.9000, 0.6635, 0.5860, 0.5766, + 0.7500, 2.0386, 0.7500, 1.0000, 0.9000, 0.9000, 0.9000, 0.9000, 0.9000, 0.9000, + 1.0000, 1.3386, 1.0000, 1.0000, 0.8500, 0.9500, 1.7386, 0.9500, 0.9000, 0.8000, + 1.7386, 0.7500, 0.7500, 0.7500, 0.8000, 0.7500, 0.8000, 0.9000, 0.7500, 0.8000, + 0.8000, 1.1000, 0.7500, 1.1000, 0.7500, 0.5991, 0.5348, 0.6541, 0.7421, 0.6192, + 0.8186, 1.0616, 0.8848, 1.0240, 2.5000, 1.0249, 1.0795, 1.2199, 2.5000, 2.5000, + 1.3103, 1.3603, 2.5000, 2.5000, 2.5000, 1.3230, 2.5000, 2.5000, 2.5000, 1.4406, + 2.5000, 2.5000, 1.3965, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, + 2.5000, 1.6997, 2.5000, 2.5000, 2.5000, 2.5000, 2.5000, 1.6264, 2.5000, 2.5000, + 2.5000, 1.3436, 2.5000, 2.5000, 0.5727, 0.6838, 0.5994, 0.5178, 0.5145, 0.5470, + 0.5572, 0.5002, 0.4974, 0.5500, 0.4953, 0.4883, 0.4948, 0.5446, 0.5777, 1.5000, + 1.5000, 3.0000, 3.0000, 2.5000, 2.5000, 2.0000, 1.0000, 1.5000, 1.5000, 1.8000, + 0.6000, 0.7000, 0.6500, 0.6750, 0.7000, 0.7500, 0.7750, 0.8000, 0.8000, 0.8500, + 0.8500, 0.8500, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7000, 0.7250, + 0.7500, 0.7750, 0.8000, 0.8250, 0.8000, 0.8000, 0.8000, 0.7500, 0.8000, 0.8000, + 0.8000, 0.8000, 0.8000, 0.8500, 0.8000, 0.8000, 2.5000, 0.7500, 0.7500, 0.7500, + 0.7500 ] # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *airs_aqua_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *airs_aqua_channels +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *airs_aqua_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature + channels: *airs_aqua_channels # Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 2122, 2123, 2128, 2134, 2141, 2145, 2149, 2153, 2164, 2189, 2197, 2209, - 2226, 2234, 2280, 2318, 2321, 2325, 2328, 2333, 2339, 2348, 2353, 2355, - 2357, 2363, 2370, 2371, 2377 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 2122, 2123, 2128, 2134, 2141, 2145, 2149, 2153, 2164, 2189, 2197, 2209, + 2226, 2234, 2280, 2318, 2321, 2325, 2328, 2333, 2339, 2348, 2353, 2355, + 2357, 2363, 2370, 2371, 2377 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *airs_aqua_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels # Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *airs_aqua_channels - minvalue: 50.00001 - maxvalue: 549.99999 - action: - name: reject +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + minvalue: 50.00001 + maxvalue: 549.99999 + action: + name: reject # Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *airs_aqua_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels - sensor: *Sensor_ID + sensor: *Sensor_ID # Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *airs_aqua_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels # Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *airs_aqua_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualIR +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualIR + channels: *airs_aqua_channels + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels - use_flag: &useflag_airs_aqua [ -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, - 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, - -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, - -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, - 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1 ] - use_flag_clddet: &clddet_airs_aqua [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1,31, 1,31, 1, 1, 1, 1, 1, 1, - 1,31, 1, 1, 1, 1,31, 1, 1, 1, - 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1 ] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] - maxvalue: 1.0e-12 - action: - name: reject + use_flag: &useflag_airs_aqua [ -1, -1, 1, -1, -1, 1, -1, -1, 1, 1, + 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, + 1, -1, -1, -1, -1, -1, -1, -1, 1, -1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, + -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, + -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, + 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, + -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, + 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, + -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, -1, 1, 1, 1, -1, -1, + 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, + -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, 1, -1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, -1, 1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1 ] + use_flag_clddet: &clddet_airs_aqua [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1,31, 1,31, 1, 1, 1, 1, 1, 1, + 1,31, 1, 1, 1, 1,31, 1, 1, 1, + 31, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1 ] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] + maxvalue: 1.0e-12 + action: + name: reject # NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *airs_aqua_channels + options: channels: *airs_aqua_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: *useflag_airs_aqua + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *airs_aqua_channels options: channels: *airs_aqua_channels - use_flag: *useflag_airs_aqua + sensor: *Sensor_ID obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *airs_aqua_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] # Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *airs_aqua_channels + options: channels: *airs_aqua_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *airs_aqua_channels - options: + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad + options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *airs_aqua_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels - obserr_bound_max: [3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.50, 3.50, 3.00, 3.00, 3.00, 3.00, 1.00, 1.00, 3.00, 1.00, - 3.00, 1.00, 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, 3.00, 1.00, - 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, - 3.50, 3.00, 3.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 1.70, 3.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.50, 1.25, 3.50, 3.50, 3.00, 3.00, 1.50, 3.00, 3.00, 3.00, - 1.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.50, 3.00, 3.50, 3.00, 3.00, 3.00, 3.00, 3.50, 3.00, - 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.50, 4.50, 4.50, 4.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, - 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 3.50, - 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, - 3.00 ] - action: - name: reject + obserr_bound_max: [3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.50, 3.50, 3.00, 3.00, 3.00, 3.00, 1.00, 1.00, 3.00, 1.00, + 3.00, 1.00, 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, 3.00, 1.00, + 1.00, 3.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, + 3.50, 3.00, 3.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 1.70, 3.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.50, 1.25, 3.50, 3.50, 3.00, 3.00, 1.50, 3.00, 3.00, 3.00, + 1.50, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.50, 3.00, 3.50, 3.00, 3.00, 3.00, 3.00, 3.50, 3.00, + 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.50, 4.50, 4.50, 4.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, + 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 3.50, + 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, 3.50, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, 3.00, + 3.00 ] + action: + name: reject # Surface Type Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + test variables: + - name: ObsFunction/SurfTypeCheckRad + channels: *airs_aqua_channels + options: channels: *airs_aqua_channels - test variables: - - name: ObsFunction/SurfTypeCheckRad - channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels - use_flag: *useflag_airs_aqua - use_flag_clddet: *clddet_airs_aqua - maxvalue: 1.0e-12 - defer to post: true - action: - name: reject + use_flag: *useflag_airs_aqua + use_flag_clddet: *clddet_airs_aqua + maxvalue: 1.0e-12 + defer to post: true + action: + name: reject # Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *airs_aqua_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *airs_aqua_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *airs_aqua_channels + options: channels: *airs_aqua_channels - options: - channels: *airs_aqua_channels -# use passive_bc: true - use_flag: *useflag_airs_aqua - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_airs_aqua + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsr2_gcom-w1.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsr2_gcom-w1.yaml index 2c52e760..e9a42f18 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsr2_gcom-w1.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsr2_gcom-w1.yaml @@ -1,5 +1,5 @@ obs space: - name: amsr2_gcom-w1 + name: AMSR2 GCOM-W1 obsdatain: engine: type: H5File @@ -9,19 +9,22 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsr2_gcom-w1.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsr2_gcom-w1_channels 1-14 + channels: &amsr2_gcom-w1_available_channels 1-14 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] Clouds: [Water, Ice, Rain, Snow] Cloud_Fraction: 1.0 - linear obs operator: - Absorbers: [H2O,O3,CO2] - Clouds: [Water] obs options: Sensor_ID: amsr2_gcom-w1 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + + linear obs operator: + Absorbers: [H2O,O3] + Clouds: [Water] + obs bias: input file: '{{cycle_dir}}/amsr2_gcom-w1.{{background_time}}.satbias.nc4' variational bc: @@ -44,17 +47,29 @@ obs bias: order: 2 - name: scan_angle var_name: sensorScanPosition + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsr2_gcom-w1.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsr2_gcom-w1.{{window_begin}}.satbias.nc4' + obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels minvalue: 50.0 maxvalue: 340.0 - filter: Domain Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels where: - variable: name: GeoVaLs/water_area_fraction @@ -72,14 +87,14 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels test variables: - name: ObsFunction/TotalColumnVaporGuess minvalue: 10.0 - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels test variables: - name: ObsFunction/SunGlintAngle minvalue: 20.0 @@ -87,7 +102,7 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels test variables: - name: ObsFunction/CLWRetMW options: @@ -105,7 +120,7 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels test variables: - name: ObsFunction/CLWRetMW options: @@ -119,7 +134,7 @@ obs filters: - filter: Difference Check filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels value: name: ObsFunction/CLWRetMW options: @@ -143,14 +158,14 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels action: name: assign error error function: name: ObsFunction/ObsErrorModelRamp - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels options: - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels xvar: name: ObsFunction/CLWRetSymmetricMW options: @@ -176,7 +191,7 @@ obs filters: apply at iterations: 0, 1 filter variables: - name: brightnessTemperature - channels: 1-14 + channels: *amsr2_gcom-w1_available_channels threshold: 2.0 action: name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml index aef79736..2c361b8f 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_aqua + name: AMSU-A AQUA obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_aqua.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_aqua_channels 1-15 + channels: &amsua_aqua_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_aqua EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_aqua.{{background_time}}.satbias.nc4' variational bc: @@ -41,6 +43,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsua_aqua.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsua_aqua.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -59,20 +73,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_aqua_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_aqua_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -81,7 +95,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels action: name: assign error error parameter vector: @@ -92,39 +106,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_aqua_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 + channels: *amsua_aqua_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 + channels: *amsua_aqua_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -134,27 +148,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_aqua_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_aqua_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 + channels: *amsua_aqua_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 + channels: *amsua_aqua_available_channels sensor: *Sensor_ID error parameter vector: [2.500, 2.000, 2.000, 0.500, 0.400, @@ -169,12 +183,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 + channels: *amsua_aqua_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, -1, -1, @@ -187,13 +201,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_aqua_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_aqua_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_aqua_available_channels use_flag: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml index b5b50dee..c6668939 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-b.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_metop-b + name: AMSU-A METOP-B obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_metop-b.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_metop-b_channels 1-15 + channels: &amsua_metop-b_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_metop-b EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_metop-b.{{background_time}}.satbias.nc4' variables without bc: [brightnessTemperature] @@ -43,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsua_metop-b.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsua_metop-b.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -61,20 +75,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_metop-b_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-b_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -83,7 +97,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels action: name: assign error error parameter vector: @@ -94,39 +108,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-b_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 + channels: *amsua_metop-b_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 + channels: *amsua_metop-b_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -136,27 +150,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_metop-b_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-b_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 + channels: *amsua_metop-b_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 + channels: *amsua_metop-b_available_channels sensor: *Sensor_ID error parameter vector: [2.500, 2.000, 2.000, 0.550, 0.300, @@ -171,12 +185,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 + channels: *amsua_metop-b_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, -1, -1, @@ -189,13 +203,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-b_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_metop-b_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_metop-b_available_channels use_flag: [-1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml index a240487a..a0bebbd3 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_metop-c + name: AMSU-A METOP-C obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_metop-c.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_metop-c_channels 1-15 + channels: &amsua_metop-c_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_metop-c EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_metop-c.{{background_time}}.satbias.nc4' variables without bc: [brightnessTemperature] @@ -43,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/INSTRUMENT.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/INSTRUMENT.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -61,20 +75,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_metop-c_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-c_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -83,7 +97,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels action: name: assign error error parameter vector: @@ -94,39 +108,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-c_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 + channels: *amsua_metop-c_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 + channels: *amsua_metop-c_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -136,27 +150,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_metop-c_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_metop-c_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 + channels: *amsua_metop-c_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 + channels: *amsua_metop-c_available_channels sensor: *Sensor_ID error parameter vector: [2.500, 2.000, 2.000, 0.550, 0.300, @@ -171,12 +185,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 + channels: *amsua_metop-c_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, 1, 1, @@ -189,13 +203,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_metop-c_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_metop-c_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_metop-c_available_channels use_flag: [-1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml index e347c56d..5a62cb37 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n15.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_n15 + name: AMSU-A NOAA-15 obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n15.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n15_channels 1-15 + channels: &amsua_n15_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_n15 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_n15.{{background_time}}.satbias.nc4' variables without bc: [brightnessTemperature] @@ -43,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsua_n15.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsua_n15.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -61,20 +75,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_n15_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n15_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -83,7 +97,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels action: name: assign error error parameter vector: @@ -94,39 +108,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n15_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n15_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 + channels: *amsua_n15_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 + channels: *amsua_n15_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -136,27 +150,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_n15_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n15_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 + channels: *amsua_n15_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 + channels: *amsua_n15_available_channels sensor: *Sensor_ID error parameter vector: [3.000, 2.000, 2.000, 0.600, 0.300, @@ -171,12 +185,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 + channels: *amsua_n15_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, 1, 1, @@ -189,13 +203,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n15_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_n15_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_n15_available_channels use_flag: [-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml index 4f7ece85..4565662a 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n18.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_n18 + name: AMSU-A NOAA-18 obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n18.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n18_channels 1-15 + channels: &amsua_n18_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_n18 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_n18.{{background_time}}.satbias.nc4' variables without bc: [brightnessTemperature] @@ -43,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsua_n18.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsua_n18.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -61,20 +75,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_n18_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n18_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -83,7 +97,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels action: name: assign error error parameter vector: @@ -94,39 +108,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n18_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n18_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 + channels: *amsua_n18_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 + channels: *amsua_n18_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -136,27 +150,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_n18_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n18_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 + channels: *amsua_n18_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 + channels: *amsua_n18_available_channels sensor: *Sensor_ID error parameter vector: [2.500, 2.000, 2.000, 0.550, 0.300, @@ -171,12 +185,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 + channels: *amsua_n18_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, 1, -1, @@ -189,13 +203,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n18_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_n18_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_n18_available_channels use_flag: [-1, -1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml index 0b0a0e30..500ecbdf 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_n19.yaml @@ -1,5 +1,5 @@ obs space: - name: amsua_n19 + name: AMSU-A NOAA-19 obsdatain: engine: type: H5File @@ -9,16 +9,18 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.amsua_n19.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &amsua_n19_channels 1-15 + channels: &amsua_n19_available_channels 1-15 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID amsua_n19 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/amsua_n19.{{background_time}}.satbias.nc4' variables without bc: [brightnessTemperature] @@ -43,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/amsua_n19.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/amsua_n19.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -61,20 +75,20 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels minvalue: 100.0 maxvalue: 500.0 # Hydrometeor Check (cloud/precipitation affected chanels) - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels test variables: - name: ObsFunction/HydrometeorCheckAMSUAclr - channels: 1-15 + channels: *amsua_n19_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n19_available_channels test_biaspredictor: cloud_liquid_waterPredictor maxvalue: 0.0 action: @@ -83,7 +97,7 @@ obs filters: - filter: Perform Action filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels action: name: assign error error parameter vector: @@ -94,39 +108,39 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n19_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n19_available_channels # Transmittance Top Check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 + channels: *amsua_n19_available_channels # Surface Jacobian check - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 + channels: *amsua_n19_available_channels sensor: *Sensor_ID use_biasterm: true test_biasterm: ObsBiasTerm @@ -136,27 +150,27 @@ obs filters: - filter: Background Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels function absolute threshold: - name: ObsFunction/ObsErrorBoundMW - channels: 1-15 + channels: *amsua_n19_available_channels options: sensor: *Sensor_ID - channels: 1-15 + channels: *amsua_n19_available_channels obserr_bound_latitude: name: ObsFunction/ObsErrorFactorLatRad options: latitude_parameters: [25.0, 0.25, 0.04, 3.0] obserr_bound_transmittop: name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 + channels: *amsua_n19_available_channels obserr_bound_topo: name: ObsFunction/ObsErrorFactorTopoRad - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 + channels: *amsua_n19_available_channels sensor: *Sensor_ID error parameter vector: [2.500, 2.000, 2.000, 0.550, 0.300, @@ -171,12 +185,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels test variables: - name: ObsFunction/InterChannelConsistencyCheck - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 + channels: *amsua_n19_available_channels use passive_bc: true sensor: *Sensor_ID use_flag: [-1, -1, -1, 1, 1, @@ -189,13 +203,12 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-15 + channels: *amsua_n19_available_channels test variables: - name: ObsFunction/ChannelUseflagCheckRad - channels: 1-15 + channels: *amsua_n19_available_channels options: - channels: 1-15 -# use passive_bc: true + channels: *amsua_n19_available_channels use_flag: [-1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, 1, -1] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml index 76a6996a..5f890303 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_n20.yaml @@ -1,5 +1,5 @@ obs space: - name: atms_n20 + name: ATMS NOAA-20 obsdatain: engine: type: H5File @@ -10,17 +10,21 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.atms_n20.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] channels: &atms_n20_channels 1-22 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID atms_n20 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/atms_n20.{{background_time}}.satbias.nc4' + variables without bc: [brightnessTemperature] + channels: 15 variational bc: predictors: - name: constant @@ -41,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/atms_n20.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/atms_n20.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -201,7 +217,6 @@ obs filters: channels: *atms_n20_channels options: channels: *atms_n20_channels - use passive_bc: true use_flag: [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml index 68d69e3b..f7f302c7 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/atms_npp.yaml @@ -1,5 +1,5 @@ obs space: - name: atms_npp + name: ATMS NPP obsdatain: engine: type: H5File @@ -10,17 +10,21 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.atms_npp.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] channels: &atms_npp_channels 1-22 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] obs options: Sensor_ID: &Sensor_ID atms_npp EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + obs bias: input file: '{{cycle_dir}}/atms_npp.{{background_time}}.satbias.nc4' + variables without bc: [brightnessTemperature] + channels: 15 variational bc: predictors: - name: constant @@ -41,6 +45,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/atms_npp.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/atms_npp.{{window_begin}}.satbias.nc4' + obs filters: # Window and surface-sensitive channels check - filter: Bounds Check @@ -201,7 +217,6 @@ obs filters: channels: *atms_npp_channels options: channels: *atms_npp_channels - use passive_bc: true use_flag: [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml index ac3d3732..4bbd6c5e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_metop-b.yaml @@ -1,201 +1,215 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] - obs options: - Sensor_ID: &Sensor_ID avhrr3_metop-b - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/avhrr3_metop-b.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_metop-b.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &avhrr3_metop-b_channels 3,4,5 - obs bias: - input file: '{{cycle_dir}}/avhrr3_metop-b.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &avhrr3_metop-b_tlapse '{{cycle_dir}}/avhrr3_metop-b.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *avhrr3_metop-b_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - action: - name: assign error - error parameter vector: [ 0.6, 0.68, 0.72 ] -# # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *avhrr3_metop-b_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *avhrr3_metop-b_channels -# Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 3 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *avhrr3_metop-b_channels - options: +obs space: + name: AVHRR-3 METOP-B + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/avhrr3_metop-b.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_metop-b.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &avhrr3_metop-b_channels 3,4,5 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID avhrr3_metop-b + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/avhrr3_metop-b.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &avhrr3_metop-b_tlapse '{{cycle_dir}}/avhrr3_metop-b.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *avhrr3_metop-b_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/avhrr3_metop-b.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/avhrr3_metop-b.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + action: + name: assign error + error parameter vector: [ 0.6, 0.68, 0.72 ] +# assign ObsError <---- ObsErrorData (Assigned in Yaml) +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *avhrr3_metop-b_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *avhrr3_metop-b_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - minvalue: 0.00001 - maxvalue: 1000.0 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Wavenumber Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 3 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *avhrr3_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *avhrr3_metop-b_channels - options: - channels: *avhrr3_metop-b_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + minvalue: 0.00001 + maxvalue: 1000.0 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *avhrr3_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_metop-b_channels - options: - channels: *avhrr3_metop-b_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualAVHRR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_metop-b_channels options: channels: *avhrr3_metop-b_channels - use_flag: &useflag_avhrr3_metop-b [ -1, 1, 1 ] - use_flag_clddet: [ 1, 1, 1 ] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualAVHRR + channels: *avhrr3_metop-b_channels + options: channels: *avhrr3_metop-b_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: &useflag_avhrr3_metop-b [ -1, 1, 1 ] + use_flag_clddet: [ 1, 1, 1 ] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *avhrr3_metop-b_channels + options: + channels: *avhrr3_metop-b_channels + use_flag: *useflag_avhrr3_metop-b + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *avhrr3_metop-b_channels options: channels: *avhrr3_metop-b_channels - use_flag: *useflag_avhrr3_metop-b - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *avhrr3_metop-b_channels + options: channels: *avhrr3_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *avhrr3_metop-b_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad options: - channels: *avhrr3_metop-b_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *avhrr3_metop-b_channels - options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_metop-b_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_metop-b_channels - options: - channels: *avhrr3_metop-b_channels - obserr_bound_max: [ 3.0, 3.0, 3.0 ] - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_metop-b_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + obserr_bound_max: [ 3.0, 3.0, 3.0 ] + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_metop-b_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *avhrr3_metop-b_channels + options: channels: *avhrr3_metop-b_channels - options: - channels: *avhrr3_metop-b_channels - use_flag: *useflag_avhrr3_metop-b - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_avhrr3_metop-b + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml index c8f0cc3a..cda158c6 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n18.yaml @@ -1,201 +1,215 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] - obs options: - Sensor_ID: &Sensor_ID avhrr3_n18 - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/avhrr3_n18.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n18.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &avhrr3_n18_channels 3,4,5 - obs bias: - input file: '{{cycle_dir}}/avhrr3_n18.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &avhrr3_n18_tlapse '{{cycle_dir}}/avhrr3_n18.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *avhrr3_n18_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - action: - name: assign error - error parameter vector: [ 0.6, 0.68, 0.72 ] -# # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *avhrr3_n18_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *avhrr3_n18_channels -# Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 3 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *avhrr3_n18_channels - options: +obs space: + name: AVHRR-3 NOAA-18 + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/avhrr3_n18.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n18.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &avhrr3_n18_channels 3,4,5 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID avhrr3_n18 + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/avhrr3_n18.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &avhrr3_n18_tlapse '{{cycle_dir}}/avhrr3_n18.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *avhrr3_n18_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/avhrr3_n18.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/avhrr3_n18.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + action: + name: assign error + error parameter vector: [ 0.6, 0.68, 0.72 ] +# assign ObsError <---- ObsErrorData (Assigned in Yaml) +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *avhrr3_n18_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *avhrr3_n18_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - minvalue: 0.00001 - maxvalue: 1000.0 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Wavenumber Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 3 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *avhrr3_n18_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *avhrr3_n18_channels - options: - channels: *avhrr3_n18_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + minvalue: 0.00001 + maxvalue: 1000.0 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *avhrr3_n18_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_n18_channels - options: - channels: *avhrr3_n18_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualAVHRR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_n18_channels options: channels: *avhrr3_n18_channels - use_flag: &useflag_avhrr3_n18 [ -1, 1, 1 ] - use_flag_clddet: [ 1, 1, 1 ] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualAVHRR + channels: *avhrr3_n18_channels + options: channels: *avhrr3_n18_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: &useflag_avhrr3_n18 [ -1, 1, 1 ] + use_flag_clddet: [ 1, 1, 1 ] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *avhrr3_n18_channels + options: + channels: *avhrr3_n18_channels + use_flag: *useflag_avhrr3_n18 + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *avhrr3_n18_channels options: channels: *avhrr3_n18_channels - use_flag: *useflag_avhrr3_n18 - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *avhrr3_n18_channels + options: channels: *avhrr3_n18_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *avhrr3_n18_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad options: - channels: *avhrr3_n18_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *avhrr3_n18_channels - options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_n18_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_n18_channels - options: - channels: *avhrr3_n18_channels - obserr_bound_max: [ 3.0, 3.0, 3.0 ] - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n18_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + obserr_bound_max: [ 3.0, 3.0, 3.0 ] + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n18_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *avhrr3_n18_channels + options: channels: *avhrr3_n18_channels - options: - channels: *avhrr3_n18_channels - use_flag: *useflag_avhrr3_n18 - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_avhrr3_n18 + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml index 00d6abac..01e875ad 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/avhrr3_n19.yaml @@ -1,201 +1,215 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] - obs options: - Sensor_ID: &Sensor_ID avhrr3_n19 - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/avhrr3_n19.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n19.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &avhrr3_n19_channels 3,4,5 - obs bias: - input file: '{{cycle_dir}}/avhrr3_n19.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &avhrr3_n19_tlapse '{{cycle_dir}}/avhrr3_n19.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *avhrr3_n19_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - action: - name: assign error - error parameter vector: [ 0.6, 0.68, 0.72 ] -# # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *avhrr3_n19_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *avhrr3_n19_channels -# Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 3 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *avhrr3_n19_channels - options: +obs space: + name: AVHRR-3 NOAA-19 + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/avhrr3_n19.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.avhrr3_n19.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &avhrr3_n19_channels 3,4,5 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID avhrr3_n19 + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/avhrr3_n19.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &avhrr3_n19_tlapse '{{cycle_dir}}/avhrr3_n19.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *avhrr3_n19_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/avhrr3_n19.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/avhrr3_n19.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + action: + name: assign error + error parameter vector: [ 0.6, 0.68, 0.72 ] +# assign ObsError <---- ObsErrorData (Assigned in Yaml) +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *avhrr3_n19_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *avhrr3_n19_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - minvalue: 0.00001 - maxvalue: 1000.0 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Wavenumber Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 3 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *avhrr3_n19_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *avhrr3_n19_channels - options: - channels: *avhrr3_n19_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + minvalue: 0.00001 + maxvalue: 1000.0 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *avhrr3_n19_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_n19_channels - options: - channels: *avhrr3_n19_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualAVHRR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_n19_channels options: channels: *avhrr3_n19_channels - use_flag: &useflag_avhrr3_n19 [ -1, 1, 1 ] - use_flag_clddet: [ 1, 1, 1 ] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualAVHRR + channels: *avhrr3_n19_channels + options: channels: *avhrr3_n19_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: &useflag_avhrr3_n19 [ -1, 1, 1 ] + use_flag_clddet: [ 1, 1, 1 ] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *avhrr3_n19_channels + options: + channels: *avhrr3_n19_channels + use_flag: *useflag_avhrr3_n19 + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *avhrr3_n19_channels options: channels: *avhrr3_n19_channels - use_flag: *useflag_avhrr3_n19 - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *avhrr3_n19_channels + options: channels: *avhrr3_n19_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *avhrr3_n19_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad options: - channels: *avhrr3_n19_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *avhrr3_n19_channels - options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *avhrr3_n19_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *avhrr3_n19_channels - options: - channels: *avhrr3_n19_channels - obserr_bound_max: [ 3.0, 3.0, 3.0 ] - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *avhrr3_n19_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + obserr_bound_max: [ 3.0, 3.0, 3.0 ] + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *avhrr3_n19_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *avhrr3_n19_channels + options: channels: *avhrr3_n19_channels - options: - channels: *avhrr3_n19_channels - use_flag: *useflag_avhrr3_n19 - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_avhrr3_n19 + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml index d7e7ff88..60fe04ff 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml @@ -1,437 +1,449 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] -# SurfaceWindGeoVars: uv - obs options: - Sensor_ID: &Sensor_ID cris-fsr_n20 - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/cris-fsr_n20.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_n20.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &cris-fsr_n20_channels - 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, - 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, - 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, - 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, - 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, - 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, - 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, - 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, - 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, - 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, - 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, - 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, - 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, - 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, - 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, - 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, - 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, - 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, - 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, - 2158, 2161, 2168, 2171, 2175, 2182 - obs bias: - input file: '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &cris-fsr_n20_tlapse '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *cris-fsr_n20_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - action: - name: assign error - error parameter vector: [ 0.8230, 0.7600, 0.7360, 0.7430, 0.8560, 1.0790, 0.8880, 0.7780, 0.6710, 0.6500, - 0.6430, 0.6290, 0.6290, 0.6180, 0.6380, 0.6190, 0.6100, 0.6270, 0.6010, 0.6170, - 0.6080, 0.4980, 0.5112, 0.4922, 0.4959, 0.4954, 0.4836, 0.5140, 0.5005, 0.4917, - 0.4881, 0.4656, 0.4793, 0.4638, 0.4557, 0.4666, 0.4468, 0.4534, 0.4471, 0.4448, - 0.4469, 0.5360, 0.4426, 0.4388, 0.5340, 0.4368, 0.4380, 0.5310, 0.4379, 0.5350, - 0.4404, 0.4405, 0.4409, 0.4472, 0.4555, 0.4433, 0.4437, 0.4454, 0.4448, 0.4465, - 0.4499, 0.4488, 0.5400, 0.4534, 0.4472, 0.4550, 0.4562, 0.4520, 0.4639, 0.5380, - 0.4573, 0.4604, 0.4533, 0.4692, 0.5660, 0.4457, 0.4457, 0.5154, 0.5084, 0.5280, - 0.5520, 0.5600, 0.5670, 0.5460, 0.4950, 0.4809, 0.4732, 0.4861, 0.4632, 0.5290, - 0.4748, 0.5007, 0.5711, 0.5950, 0.5469, 0.6260, 0.5410, 0.5430, 0.5330, 0.5410, - 0.4695, 0.5300, 0.5390, 0.5290, 0.5420, 0.4681, 0.5360, 0.5420, 0.5350, 0.5630, - 0.4805, 0.6470, 0.6090, 0.5530, 0.5830, 0.5760, 0.6294, 0.5885, 0.5560, 0.5780, - 0.5660, 0.6010, 0.5627, 0.5675, 0.5920, 0.5166, 0.5890, 0.5291, 0.5892, 0.5976, - 0.5834, 0.6512, 0.6748, 0.6615, 0.6003, 0.5669, 0.5587, 0.5507, 0.5871, 0.6160, - 0.6370, 0.6330, 0.6390, 0.6550, 0.6410, 0.6640, 0.6480, 0.6560, 0.6630, 0.6520, - 0.6810, 0.6620, 0.6730, 0.6720, 0.6800, 0.7350, 0.7320, 0.7150, 0.6740, 0.6870, - 0.7020, 0.7050, 0.7150, 0.7250, 0.7070, 0.7400, 0.7400, 0.8740, 0.7370, 0.8190, - 0.7600, 0.8690, 0.9000, 0.6980, 0.8230, 0.6760, 0.6820, 0.7660, 0.6800, 0.6850, - 0.6940, 0.6950, 0.6890, 0.7270, 0.6950, 0.6880, 0.6770, 0.7360, 0.6510, 0.6610, - 0.6199, 0.6223, 0.6036, 0.6003, 0.5991, 0.5980, 0.5910, 0.5764, 0.5770, 0.5593, - 0.5970, 0.5760, 0.5740, 0.5780, 0.5790, 0.5750, 0.5760, 0.5680, 0.5750, 0.5690, - 0.5590, 0.5680, 0.5401, 0.5500, 0.5575, 0.5780, 0.5635, 0.5786, 0.5807, 0.5810, - 0.5730, 0.5690, 0.5670, 0.5520, 0.5500, 0.5580, 0.5520, 0.5620, 0.5740, 0.5750, - 0.6290, 0.6820, 0.7560, 1.0500, 1.1220, 1.1402, 1.1540, 1.1310, 1.1230, 1.1590, - 1.1060, 1.1160, 1.0690, 1.0770, 1.1550, 1.1620, 1.1402, 0.6440, 1.2080, 1.1402, - 1.2950, 1.2580, 1.1402, 0.6060, 0.6030, 0.5630, 0.5920, 0.6070, 0.6110, 0.6120, - 0.6180, 0.6260, 0.6290, 0.5830, 0.8646, 0.6260, 0.6390, 0.5590, 0.8270, 0.6120, - 0.5760, 0.5800, 0.5750, 0.6880, 0.6970, 0.7430, 0.6810, 0.8320, 0.7190, 0.7850, - 0.8780, 0.9402, 1.0054, 1.0730, 1.1290, 1.0350, 1.0270, 0.9703, 1.1950, 0.9153, - 1.2660, 1.1530, 1.3480, 1.1800, 1.2690, 1.3110, 0.9914, 1.3590, 1.1660, 1.1390, - 1.2817, 1.3980, 1.5420, 1.2290, 1.3770, 1.2800, 1.2450, 1.1188, 1.1930, 1.2930, - 1.2750, 1.3310, 1.3400, 1.0990, 1.0480, 1.1240, 1.2250, 1.1830, 1.1960, 1.4000, - 1.3330, 1.4170, 1.3260, 1.3050, 1.0638, 1.2680, 1.2170, 1.2890, 1.3950, 1.2320, - 1.4350, 1.2980, 1.3280, 1.2620, 1.1990, 1.3910, 1.2330, 1.3290, 1.6640, 1.5090, - 1.3490, 1.4810, 1.5950, 1.4850, 1.5320, 1.5040, 1.5840, 1.6090, 1.5160, 1.4890, - 1.5020, 1.5440, 1.6110, 1.5390, 1.2960, 1.2880, 1.2410, 1.3200, 1.3130, 1.3010, - 1.8430, 1.7470, 1.7110, 1.7710, 1.9370, 1.5750, 1.5730, 1.5000, 1.4590, 1.4020, - 1.3630, 2.2010, 2.1270, 2.1770, 2.1570, 2.1920, 2.1460, 2.1510, 2.0710, 1.9860, - 1.8450, 1.6870, 1.5050, 1.3730, 1.2290, 1.1130, 1.0040, 0.9360, 0.8950, 0.8710, - 0.8410, 0.8210, 0.8050, 0.8000, 0.7920, 0.7970, 0.7910, 0.7830, 0.7770, 0.7850, - 0.7870, 0.7890, 0.7930, 0.7940, 0.7450, 0.7500, 0.7480, 0.7490, 0.7440, 0.7330, - 0.7330, 0.7410, 0.7460, 0.7460, 0.7380, 0.7430, 0.7450, 0.7490, 0.7500, 0.7500, - 0.8840, 0.9060, 0.9170, 0.9240, 0.9220, 0.9280, 0.9210, 0.9380, 0.9310, 0.9430, - 0.9460 ] - # # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *cris-fsr_n20_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *cris-fsr_n20_channels - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, - 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, - 2153, 2158, 2161, 2168, 2171, 2175, 2182 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *cris-fsr_n20_channels - options: +obs space: + name: CRIS-FSR NOAA-20 + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/cris-fsr_n20.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_n20.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &cris-fsr_n20_channels + 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, + 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, + 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, + 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, + 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, + 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, + 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, + 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, + 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, + 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, + 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, + 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, + 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, + 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, + 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, + 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, + 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, + 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, + 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, + 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, + 2158, 2161, 2168, 2171, 2175, 2182 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID cris-fsr_n20 + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &cris-fsr_n20_tlapse '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *cris-fsr_n20_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/cris-fsr_n20.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + action: + name: assign error + error parameter vector: [ 0.8230, 0.7600, 0.7360, 0.7430, 0.8560, 1.0790, 0.8880, 0.7780, 0.6710, 0.6500, + 0.6430, 0.6290, 0.6290, 0.6180, 0.6380, 0.6190, 0.6100, 0.6270, 0.6010, 0.6170, + 0.6080, 0.4980, 0.5112, 0.4922, 0.4959, 0.4954, 0.4836, 0.5140, 0.5005, 0.4917, + 0.4881, 0.4656, 0.4793, 0.4638, 0.4557, 0.4666, 0.4468, 0.4534, 0.4471, 0.4448, + 0.4469, 0.5360, 0.4426, 0.4388, 0.5340, 0.4368, 0.4380, 0.5310, 0.4379, 0.5350, + 0.4404, 0.4405, 0.4409, 0.4472, 0.4555, 0.4433, 0.4437, 0.4454, 0.4448, 0.4465, + 0.4499, 0.4488, 0.5400, 0.4534, 0.4472, 0.4550, 0.4562, 0.4520, 0.4639, 0.5380, + 0.4573, 0.4604, 0.4533, 0.4692, 0.5660, 0.4457, 0.4457, 0.5154, 0.5084, 0.5280, + 0.5520, 0.5600, 0.5670, 0.5460, 0.4950, 0.4809, 0.4732, 0.4861, 0.4632, 0.5290, + 0.4748, 0.5007, 0.5711, 0.5950, 0.5469, 0.6260, 0.5410, 0.5430, 0.5330, 0.5410, + 0.4695, 0.5300, 0.5390, 0.5290, 0.5420, 0.4681, 0.5360, 0.5420, 0.5350, 0.5630, + 0.4805, 0.6470, 0.6090, 0.5530, 0.5830, 0.5760, 0.6294, 0.5885, 0.5560, 0.5780, + 0.5660, 0.6010, 0.5627, 0.5675, 0.5920, 0.5166, 0.5890, 0.5291, 0.5892, 0.5976, + 0.5834, 0.6512, 0.6748, 0.6615, 0.6003, 0.5669, 0.5587, 0.5507, 0.5871, 0.6160, + 0.6370, 0.6330, 0.6390, 0.6550, 0.6410, 0.6640, 0.6480, 0.6560, 0.6630, 0.6520, + 0.6810, 0.6620, 0.6730, 0.6720, 0.6800, 0.7350, 0.7320, 0.7150, 0.6740, 0.6870, + 0.7020, 0.7050, 0.7150, 0.7250, 0.7070, 0.7400, 0.7400, 0.8740, 0.7370, 0.8190, + 0.7600, 0.8690, 0.9000, 0.6980, 0.8230, 0.6760, 0.6820, 0.7660, 0.6800, 0.6850, + 0.6940, 0.6950, 0.6890, 0.7270, 0.6950, 0.6880, 0.6770, 0.7360, 0.6510, 0.6610, + 0.6199, 0.6223, 0.6036, 0.6003, 0.5991, 0.5980, 0.5910, 0.5764, 0.5770, 0.5593, + 0.5970, 0.5760, 0.5740, 0.5780, 0.5790, 0.5750, 0.5760, 0.5680, 0.5750, 0.5690, + 0.5590, 0.5680, 0.5401, 0.5500, 0.5575, 0.5780, 0.5635, 0.5786, 0.5807, 0.5810, + 0.5730, 0.5690, 0.5670, 0.5520, 0.5500, 0.5580, 0.5520, 0.5620, 0.5740, 0.5750, + 0.6290, 0.6820, 0.7560, 1.0500, 1.1220, 1.1402, 1.1540, 1.1310, 1.1230, 1.1590, + 1.1060, 1.1160, 1.0690, 1.0770, 1.1550, 1.1620, 1.1402, 0.6440, 1.2080, 1.1402, + 1.2950, 1.2580, 1.1402, 0.6060, 0.6030, 0.5630, 0.5920, 0.6070, 0.6110, 0.6120, + 0.6180, 0.6260, 0.6290, 0.5830, 0.8646, 0.6260, 0.6390, 0.5590, 0.8270, 0.6120, + 0.5760, 0.5800, 0.5750, 0.6880, 0.6970, 0.7430, 0.6810, 0.8320, 0.7190, 0.7850, + 0.8780, 0.9402, 1.0054, 1.0730, 1.1290, 1.0350, 1.0270, 0.9703, 1.1950, 0.9153, + 1.2660, 1.1530, 1.3480, 1.1800, 1.2690, 1.3110, 0.9914, 1.3590, 1.1660, 1.1390, + 1.2817, 1.3980, 1.5420, 1.2290, 1.3770, 1.2800, 1.2450, 1.1188, 1.1930, 1.2930, + 1.2750, 1.3310, 1.3400, 1.0990, 1.0480, 1.1240, 1.2250, 1.1830, 1.1960, 1.4000, + 1.3330, 1.4170, 1.3260, 1.3050, 1.0638, 1.2680, 1.2170, 1.2890, 1.3950, 1.2320, + 1.4350, 1.2980, 1.3280, 1.2620, 1.1990, 1.3910, 1.2330, 1.3290, 1.6640, 1.5090, + 1.3490, 1.4810, 1.5950, 1.4850, 1.5320, 1.5040, 1.5840, 1.6090, 1.5160, 1.4890, + 1.5020, 1.5440, 1.6110, 1.5390, 1.2960, 1.2880, 1.2410, 1.3200, 1.3130, 1.3010, + 1.8430, 1.7470, 1.7110, 1.7710, 1.9370, 1.5750, 1.5730, 1.5000, 1.4590, 1.4020, + 1.3630, 2.2010, 2.1270, 2.1770, 2.1570, 2.1920, 2.1460, 2.1510, 2.0710, 1.9860, + 1.8450, 1.6870, 1.5050, 1.3730, 1.2290, 1.1130, 1.0040, 0.9360, 0.8950, 0.8710, + 0.8410, 0.8210, 0.8050, 0.8000, 0.7920, 0.7970, 0.7910, 0.7830, 0.7770, 0.7850, + 0.7870, 0.7890, 0.7930, 0.7940, 0.7450, 0.7500, 0.7480, 0.7490, 0.7440, 0.7330, + 0.7330, 0.7410, 0.7460, 0.7460, 0.7380, 0.7430, 0.7450, 0.7490, 0.7500, 0.7500, + 0.8840, 0.9060, 0.9170, 0.9240, 0.9220, 0.9280, 0.9210, 0.9380, 0.9310, 0.9430, + 0.9460 ] +# assign ObsError <---- ObsErrorData (Assigned in Yaml) +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *cris-fsr_n20_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *cris-fsr_n20_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - minvalue: 50.00001 - maxvalue: 549.99999 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, + 2153, 2158, 2161, 2168, 2171, 2175, 2182 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *cris-fsr_n20_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *cris-fsr_n20_channels - options: - channels: *cris-fsr_n20_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + minvalue: 50.00001 + maxvalue: 549.99999 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *cris-fsr_n20_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *cris-fsr_n20_channels - options: - channels: *cris-fsr_n20_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualIR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *cris-fsr_n20_channels options: channels: *cris-fsr_n20_channels - use_flag: &useflag_cris-fsr_n20 [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, - -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1] - use_flag_clddet: &clddet_cris-fsr_n20 [ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, - 30, 30, 31, 31, 30, 31, 30, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 31, 31, 31, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 31, 30, 30, 31, - 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 31, 30, 30, 30, 30, 30, 30, 31, - 30, 30, 30, 30, 30, 30, 31, 30, 30, 30, - 31, 30, 30, 30, 30, 30, 30, 31, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30 ] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Temperature Jacobian Check over Land - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - where: - - variable: - name: GeoVaLs/water_area_fraction - maxvalue: 0.99 - test variables: - - name: ObsDiag/brightness_temperature_jacobian_surface_temperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualIR + channels: *cris-fsr_n20_channels + options: channels: *cris-fsr_n20_channels - maxvalue: 0.2 -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature + use_flag: &useflag_cris-fsr_n20 [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, + 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, + 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, + 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, + -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, + -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1] + use_flag_clddet: &clddet_cris-fsr_n20 [ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, + 30, 30, 31, 31, 30, 31, 30, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 31, 31, 31, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 31, 30, 30, 31, + 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 31, 30, 30, 30, 30, 30, 30, 31, + 30, 30, 30, 30, 30, 30, 31, 30, 30, 30, + 31, 30, 30, 30, 30, 30, 30, 31, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30 ] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Temperature Jacobian Check over Land +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + where: + - variable: + name: GeoVaLs/water_area_fraction + maxvalue: 0.99 + test variables: + - name: ObsDiag/brightness_temperature_jacobian_surface_temperature + channels: *cris-fsr_n20_channels + maxvalue: 0.2 +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *cris-fsr_n20_channels + options: channels: *cris-fsr_n20_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: *useflag_cris-fsr_n20 + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *cris-fsr_n20_channels options: channels: *cris-fsr_n20_channels - use_flag: *useflag_cris-fsr_n20 - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *cris-fsr_n20_channels + options: channels: *cris-fsr_n20_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *cris-fsr_n20_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad options: - channels: *cris-fsr_n20_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *cris-fsr_n20_channels - options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *cris-fsr_n20_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *cris-fsr_n20_channels - options: - channels: *cris-fsr_n20_channels - obserr_bound_max: [ 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, - 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 2.0, - 0.4, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0, - 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0 ] - action: - name: reject -# Surface Type Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_n20_channels - test variables: - - name: ObsFunction/SurfTypeCheckRad - channels: *cris-fsr_n20_channels - options: - channels: *cris-fsr_n20_channels - use_flag: *useflag_cris-fsr_n20 - use_flag_clddet: *clddet_cris-fsr_n20 - maxvalue: 1.0e-12 - defer to post: true - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature + obserr_bound_max: [ 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 2.0, + 0.4, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0, + 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0 ] + action: + name: reject +# Surface Type Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + test variables: + - name: ObsFunction/SurfTypeCheckRad + channels: *cris-fsr_n20_channels + options: channels: *cris-fsr_n20_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + use_flag: *useflag_cris-fsr_n20 + use_flag_clddet: *clddet_cris-fsr_n20 + maxvalue: 1.0e-12 + defer to post: true + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_n20_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *cris-fsr_n20_channels + options: channels: *cris-fsr_n20_channels - options: - channels: *cris-fsr_n20_channels -# use passive_bc: true - use_flag: *useflag_cris-fsr_n20 - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_cris-fsr_n20 + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml index e7221987..51ef5b3d 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml @@ -1,437 +1,449 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] -# SurfaceWindGeoVars: uv - obs options: - Sensor_ID: &Sensor_ID cris-fsr_npp - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/cris-fsr_npp.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_npp.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &cris-fsr_npp_channels - 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, - 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, - 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, - 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, - 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, - 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, - 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, - 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, - 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, - 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, - 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, - 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, - 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, - 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, - 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, - 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, - 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, - 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, - 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, - 2158, 2161, 2168, 2171, 2175, 2182 - obs bias: - input file: '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &cris-fsr_npp_tlapse '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *cris-fsr_npp_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - action: - name: assign error - error parameter vector: [ 0.8230, 0.7600, 0.7360, 0.7430, 0.8560, 1.0790, 0.8880, 0.7780, 0.6710, 0.6500, - 0.6430, 0.6290, 0.6290, 0.6180, 0.6380, 0.6190, 0.6100, 0.6270, 0.6010, 0.6170, - 0.6080, 0.4980, 0.5112, 0.4922, 0.4959, 0.4954, 0.4836, 0.5140, 0.5005, 0.4917, - 0.4881, 0.4656, 0.4793, 0.4638, 0.4557, 0.4666, 0.4468, 0.4534, 0.4471, 0.4448, - 0.4469, 0.5360, 0.4426, 0.4388, 0.5340, 0.4368, 0.4380, 0.5310, 0.4379, 0.5350, - 0.4404, 0.4405, 0.4409, 0.4472, 0.4555, 0.4433, 0.4437, 0.4454, 0.4448, 0.4465, - 0.4499, 0.4488, 0.5400, 0.4534, 0.4472, 0.4550, 0.4562, 0.4520, 0.4639, 0.5380, - 0.4573, 0.4604, 0.4533, 0.4692, 0.5660, 0.4457, 0.4457, 0.5154, 0.5084, 0.5280, - 0.5520, 0.5600, 0.5670, 0.5460, 0.4950, 0.4809, 0.4732, 0.4861, 0.4632, 0.5290, - 0.4748, 0.5007, 0.5711, 0.5950, 0.5469, 0.6260, 0.5410, 0.5430, 0.5330, 0.5410, - 0.4695, 0.5300, 0.5390, 0.5290, 0.5420, 0.4681, 0.5360, 0.5420, 0.5350, 0.5630, - 0.4805, 0.6470, 0.6090, 0.5530, 0.5830, 0.5760, 0.6294, 0.5885, 0.5560, 0.5780, - 0.5660, 0.6010, 0.5627, 0.5675, 0.5920, 0.5166, 0.5890, 0.5291, 0.5892, 0.5976, - 0.5834, 0.6512, 0.6748, 0.6615, 0.6003, 0.5669, 0.5587, 0.5507, 0.5871, 0.6160, - 0.6370, 0.6330, 0.6390, 0.6550, 0.6410, 0.6640, 0.6480, 0.6560, 0.6630, 0.6520, - 0.6810, 0.6620, 0.6730, 0.6720, 0.6800, 0.7350, 0.7320, 0.7150, 0.6740, 0.6870, - 0.7020, 0.7050, 0.7150, 0.7250, 0.7070, 0.7400, 0.7400, 0.8740, 0.7370, 0.8190, - 0.7600, 0.8690, 0.9000, 0.6980, 0.8230, 0.6760, 0.6820, 0.7660, 0.6800, 0.6850, - 0.6940, 0.6950, 0.6890, 0.7270, 0.6950, 0.6880, 0.6770, 0.7360, 0.6510, 0.6610, - 0.6199, 0.6223, 0.6036, 0.6003, 0.5991, 0.5980, 0.5910, 0.5764, 0.5770, 0.5593, - 0.5970, 0.5760, 0.5740, 0.5780, 0.5790, 0.5750, 0.5760, 0.5680, 0.5750, 0.5690, - 0.5590, 0.5680, 0.5401, 0.5500, 0.5575, 0.5780, 0.5635, 0.5786, 0.5807, 0.5810, - 0.5730, 0.5690, 0.5670, 0.5520, 0.5500, 0.5580, 0.5520, 0.5620, 0.5740, 0.5750, - 0.6290, 0.6820, 0.7560, 1.0500, 1.1220, 1.1402, 1.1540, 1.1310, 1.1230, 1.1590, - 1.1060, 1.1160, 1.0690, 1.0770, 1.1550, 1.1620, 1.1402, 0.6440, 1.2080, 1.1402, - 1.2950, 1.2580, 1.1402, 0.6060, 0.6030, 0.5630, 0.5920, 0.6070, 0.6110, 0.6120, - 0.6180, 0.6260, 0.6290, 0.5830, 0.8646, 0.6260, 0.6390, 0.5590, 0.8270, 0.6120, - 0.5760, 0.5800, 0.5750, 0.6880, 0.6970, 0.7430, 0.6810, 0.8320, 0.7190, 0.7850, - 0.8780, 0.9402, 1.0054, 1.0730, 1.1290, 1.0350, 1.0270, 0.9703, 1.1950, 0.9153, - 1.2660, 1.1530, 1.3480, 1.1800, 1.2690, 1.3110, 0.9914, 1.3590, 1.1660, 1.1390, - 1.2817, 1.3980, 1.5420, 1.2290, 1.3770, 1.2800, 1.2450, 1.1188, 1.1930, 1.2930, - 1.2750, 1.3310, 1.3400, 1.0990, 1.0480, 1.1240, 1.2250, 1.1830, 1.1960, 1.4000, - 1.3330, 1.4170, 1.3260, 1.3050, 1.0638, 1.2680, 1.2170, 1.2890, 1.3950, 1.2320, - 1.4350, 1.2980, 1.3280, 1.2620, 1.1990, 1.3910, 1.2330, 1.3290, 1.6640, 1.5090, - 1.3490, 1.4810, 1.5950, 1.4850, 1.5320, 1.5040, 1.5840, 1.6090, 1.5160, 1.4890, - 1.5020, 1.5440, 1.6110, 1.5390, 1.2960, 1.2880, 1.2410, 1.3200, 1.3130, 1.3010, - 1.8430, 1.7470, 1.7110, 1.7710, 1.9370, 1.5750, 1.5730, 1.5000, 1.4590, 1.4020, - 1.3630, 2.2010, 2.1270, 2.1770, 2.1570, 2.1920, 2.1460, 2.1510, 2.0710, 1.9860, - 1.8450, 1.6870, 1.5050, 1.3730, 1.2290, 1.1130, 1.0040, 0.9360, 0.8950, 0.8710, - 0.8410, 0.8210, 0.8050, 0.8000, 0.7920, 0.7970, 0.7910, 0.7830, 0.7770, 0.7850, - 0.7870, 0.7890, 0.7930, 0.7940, 0.7450, 0.7500, 0.7480, 0.7490, 0.7440, 0.7330, - 0.7330, 0.7410, 0.7460, 0.7460, 0.7380, 0.7430, 0.7450, 0.7490, 0.7500, 0.7500, - 0.8840, 0.9060, 0.9170, 0.9240, 0.9220, 0.9280, 0.9210, 0.9380, 0.9310, 0.9430, - 0.9460 ] - # # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *cris-fsr_npp_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *cris-fsr_npp_channels - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, - 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, - 2153, 2158, 2161, 2168, 2171, 2175, 2182 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *cris-fsr_npp_channels - options: +obs space: + name: CRIS-FSR NPP + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/cris-fsr_npp.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.cris-fsr_npp.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &cris-fsr_npp_channels + 19, 24, 26, 27, 28, 31, 32, 33, 37, 39, 42, 44, 47, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 208, + 211, 216, 224, 234, 236, 238, 239, 242, 246, 248, 255, 264, 266, 268, + 275, 279, 283, 285, 291, 295, 301, 305, 311, 332, 342, 389, 400, 402, + 404, 406, 410, 427, 439, 440, 441, 445, 449, 455, 458, 461, 464, 467, + 470, 473, 475, 482, 486, 487, 490, 493, 496, 499, 501, 503, 505, 511, + 513, 514, 518, 519, 520, 522, 529, 534, 563, 568, 575, 592, 594, 596, + 598, 600, 602, 604, 611, 614, 616, 618, 620, 622, 626, 631, 638, 646, + 648, 652, 659, 673, 675, 678, 684, 688, 694, 700, 707, 710, 713, 714, + 718, 720, 722, 725, 728, 735, 742, 748, 753, 762, 780, 784, 798, 849, + 860, 862, 866, 874, 882, 890, 898, 906, 907, 908, 914, 937, 972, 973, + 978, 980, 981, 988, 995, 998, 1000, 1003, 1008, 1009, 1010, 1014, 1017, + 1018, 1020, 1022, 1024, 1026, 1029, 1030, 1032, 1034, 1037, 1038, 1041, + 1042, 1044, 1046, 1049, 1050, 1053, 1054, 1058, 1060, 1062, 1064, 1066, + 1069, 1076, 1077, 1080, 1086, 1091, 1095, 1101, 1109, 1112, 1121, 1128, + 1133, 1163, 1172, 1187, 1189, 1205, 1211, 1219, 1231, 1245, 1271, 1289, + 1300, 1313, 1316, 1325, 1329, 1346, 1347, 1473, 1474, 1491, 1499, 1553, + 1570, 1596, 1602, 1619, 1624, 1635, 1939, 1940, 1941, 1942, 1943, 1944, + 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, + 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, + 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, 2153, + 2158, 2161, 2168, 2171, 2175, 2182 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID cris-fsr_npp + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &cris-fsr_npp_tlapse '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *cris-fsr_npp_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/cris-fsr_npp.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + action: + name: assign error + error parameter vector: [ 0.8230, 0.7600, 0.7360, 0.7430, 0.8560, 1.0790, 0.8880, 0.7780, 0.6710, 0.6500, + 0.6430, 0.6290, 0.6290, 0.6180, 0.6380, 0.6190, 0.6100, 0.6270, 0.6010, 0.6170, + 0.6080, 0.4980, 0.5112, 0.4922, 0.4959, 0.4954, 0.4836, 0.5140, 0.5005, 0.4917, + 0.4881, 0.4656, 0.4793, 0.4638, 0.4557, 0.4666, 0.4468, 0.4534, 0.4471, 0.4448, + 0.4469, 0.5360, 0.4426, 0.4388, 0.5340, 0.4368, 0.4380, 0.5310, 0.4379, 0.5350, + 0.4404, 0.4405, 0.4409, 0.4472, 0.4555, 0.4433, 0.4437, 0.4454, 0.4448, 0.4465, + 0.4499, 0.4488, 0.5400, 0.4534, 0.4472, 0.4550, 0.4562, 0.4520, 0.4639, 0.5380, + 0.4573, 0.4604, 0.4533, 0.4692, 0.5660, 0.4457, 0.4457, 0.5154, 0.5084, 0.5280, + 0.5520, 0.5600, 0.5670, 0.5460, 0.4950, 0.4809, 0.4732, 0.4861, 0.4632, 0.5290, + 0.4748, 0.5007, 0.5711, 0.5950, 0.5469, 0.6260, 0.5410, 0.5430, 0.5330, 0.5410, + 0.4695, 0.5300, 0.5390, 0.5290, 0.5420, 0.4681, 0.5360, 0.5420, 0.5350, 0.5630, + 0.4805, 0.6470, 0.6090, 0.5530, 0.5830, 0.5760, 0.6294, 0.5885, 0.5560, 0.5780, + 0.5660, 0.6010, 0.5627, 0.5675, 0.5920, 0.5166, 0.5890, 0.5291, 0.5892, 0.5976, + 0.5834, 0.6512, 0.6748, 0.6615, 0.6003, 0.5669, 0.5587, 0.5507, 0.5871, 0.6160, + 0.6370, 0.6330, 0.6390, 0.6550, 0.6410, 0.6640, 0.6480, 0.6560, 0.6630, 0.6520, + 0.6810, 0.6620, 0.6730, 0.6720, 0.6800, 0.7350, 0.7320, 0.7150, 0.6740, 0.6870, + 0.7020, 0.7050, 0.7150, 0.7250, 0.7070, 0.7400, 0.7400, 0.8740, 0.7370, 0.8190, + 0.7600, 0.8690, 0.9000, 0.6980, 0.8230, 0.6760, 0.6820, 0.7660, 0.6800, 0.6850, + 0.6940, 0.6950, 0.6890, 0.7270, 0.6950, 0.6880, 0.6770, 0.7360, 0.6510, 0.6610, + 0.6199, 0.6223, 0.6036, 0.6003, 0.5991, 0.5980, 0.5910, 0.5764, 0.5770, 0.5593, + 0.5970, 0.5760, 0.5740, 0.5780, 0.5790, 0.5750, 0.5760, 0.5680, 0.5750, 0.5690, + 0.5590, 0.5680, 0.5401, 0.5500, 0.5575, 0.5780, 0.5635, 0.5786, 0.5807, 0.5810, + 0.5730, 0.5690, 0.5670, 0.5520, 0.5500, 0.5580, 0.5520, 0.5620, 0.5740, 0.5750, + 0.6290, 0.6820, 0.7560, 1.0500, 1.1220, 1.1402, 1.1540, 1.1310, 1.1230, 1.1590, + 1.1060, 1.1160, 1.0690, 1.0770, 1.1550, 1.1620, 1.1402, 0.6440, 1.2080, 1.1402, + 1.2950, 1.2580, 1.1402, 0.6060, 0.6030, 0.5630, 0.5920, 0.6070, 0.6110, 0.6120, + 0.6180, 0.6260, 0.6290, 0.5830, 0.8646, 0.6260, 0.6390, 0.5590, 0.8270, 0.6120, + 0.5760, 0.5800, 0.5750, 0.6880, 0.6970, 0.7430, 0.6810, 0.8320, 0.7190, 0.7850, + 0.8780, 0.9402, 1.0054, 1.0730, 1.1290, 1.0350, 1.0270, 0.9703, 1.1950, 0.9153, + 1.2660, 1.1530, 1.3480, 1.1800, 1.2690, 1.3110, 0.9914, 1.3590, 1.1660, 1.1390, + 1.2817, 1.3980, 1.5420, 1.2290, 1.3770, 1.2800, 1.2450, 1.1188, 1.1930, 1.2930, + 1.2750, 1.3310, 1.3400, 1.0990, 1.0480, 1.1240, 1.2250, 1.1830, 1.1960, 1.4000, + 1.3330, 1.4170, 1.3260, 1.3050, 1.0638, 1.2680, 1.2170, 1.2890, 1.3950, 1.2320, + 1.4350, 1.2980, 1.3280, 1.2620, 1.1990, 1.3910, 1.2330, 1.3290, 1.6640, 1.5090, + 1.3490, 1.4810, 1.5950, 1.4850, 1.5320, 1.5040, 1.5840, 1.6090, 1.5160, 1.4890, + 1.5020, 1.5440, 1.6110, 1.5390, 1.2960, 1.2880, 1.2410, 1.3200, 1.3130, 1.3010, + 1.8430, 1.7470, 1.7110, 1.7710, 1.9370, 1.5750, 1.5730, 1.5000, 1.4590, 1.4020, + 1.3630, 2.2010, 2.1270, 2.1770, 2.1570, 2.1920, 2.1460, 2.1510, 2.0710, 1.9860, + 1.8450, 1.6870, 1.5050, 1.3730, 1.2290, 1.1130, 1.0040, 0.9360, 0.8950, 0.8710, + 0.8410, 0.8210, 0.8050, 0.8000, 0.7920, 0.7970, 0.7910, 0.7830, 0.7770, 0.7850, + 0.7870, 0.7890, 0.7930, 0.7940, 0.7450, 0.7500, 0.7480, 0.7490, 0.7440, 0.7330, + 0.7330, 0.7410, 0.7460, 0.7460, 0.7380, 0.7430, 0.7450, 0.7490, 0.7500, 0.7500, + 0.8840, 0.9060, 0.9170, 0.9240, 0.9220, 0.9280, 0.9210, 0.9380, 0.9310, 0.9430, + 0.9460 ] +# assign ObsError <---- ObsErrorData (Assigned in Yaml) +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *cris-fsr_npp_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *cris-fsr_npp_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - minvalue: 50.00001 - maxvalue: 549.99999 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 2119, 2140, 2143, 2147, + 2153, 2158, 2161, 2168, 2171, 2175, 2182 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *cris-fsr_npp_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad + options: channels: *cris-fsr_npp_channels - options: - channels: *cris-fsr_npp_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + minvalue: 50.00001 + maxvalue: 549.99999 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *cris-fsr_npp_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *cris-fsr_npp_channels - options: - channels: *cris-fsr_npp_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualIR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *cris-fsr_npp_channels options: channels: *cris-fsr_npp_channels - use_flag: &useflag_cris-fsr_npp [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, - 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, - -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, - -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, - -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1] - use_flag_clddet: &clddet_cris-fsr_npp [ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, - 30, 30, 31, 31, 30, 31, 30, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 31, 31, 31, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 31, 30, 30, 31, - 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 31, 30, 30, 30, 30, 30, 30, 31, - 30, 30, 30, 30, 30, 30, 31, 30, 30, 30, - 31, 30, 30, 30, 30, 30, 30, 31, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30 ] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Temperature Jacobian Check over Land - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - where: - - variable: - name: GeoVaLs/water_area_fraction - maxvalue: 0.99 - test variables: - - name: ObsDiag/brightness_temperature_jacobian_surface_temperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualIR + channels: *cris-fsr_npp_channels + options: channels: *cris-fsr_npp_channels - maxvalue: 0.2 + use_flag: &useflag_cris-fsr_npp [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, 1, 1, -1, 1, 1, -1, 1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, + 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, + 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, + 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, + -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, 1, + -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, 1, -1, -1, -1, -1, -1, -1, 1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, + 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1] + use_flag_clddet: &clddet_cris-fsr_npp [ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, + 30, 30, 31, 31, 30, 31, 30, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 31, 31, 31, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 31, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 31, 30, 30, 31, + 30, 30, 31, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 31, 30, 30, 30, 30, 30, 30, 31, + 30, 30, 30, 30, 30, 30, 31, 30, 30, 30, + 31, 30, 30, 30, 30, 30, 30, 31, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, + 30 ] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Temperature Jacobian Check over Land +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + where: + - variable: + name: GeoVaLs/water_area_fraction + maxvalue: 0.99 + test variables: + - name: ObsDiag/brightness_temperature_jacobian_surface_temperature + channels: *cris-fsr_npp_channels + maxvalue: 0.2 # NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *cris-fsr_npp_channels + options: channels: *cris-fsr_npp_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + use_flag: *useflag_cris-fsr_npp + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *cris-fsr_npp_channels options: channels: *cris-fsr_npp_channels - use_flag: *useflag_cris-fsr_npp - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *cris-fsr_npp_channels + options: channels: *cris-fsr_npp_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *cris-fsr_npp_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad options: - channels: *cris-fsr_npp_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR - channels: *cris-fsr_npp_channels - options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *cris-fsr_npp_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *cris-fsr_npp_channels - options: - channels: *cris-fsr_npp_channels - obserr_bound_max: [ 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, - 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 2.0, - 0.4, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0, - 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, - 2.0 ] - action: - name: reject -# Surface Type Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *cris-fsr_npp_channels - test variables: - - name: ObsFunction/SurfTypeCheckRad - channels: *cris-fsr_npp_channels - options: - channels: *cris-fsr_npp_channels - use_flag: *useflag_cris-fsr_npp - use_flag_clddet: *clddet_cris-fsr_npp - maxvalue: 1.0e-12 - defer to post: true - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature + obserr_bound_max: [ 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, + 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 0.4, 2.0, 0.4, 2.0, + 0.4, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.4, 0.4, 0.4, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0, + 2.0, 2.0, 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + 2.0 ] + action: + name: reject +# Surface Type Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + test variables: + - name: ObsFunction/SurfTypeCheckRad + channels: *cris-fsr_npp_channels + options: channels: *cris-fsr_npp_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + use_flag: *useflag_cris-fsr_npp + use_flag_clddet: *clddet_cris-fsr_npp + maxvalue: 1.0e-12 + defer to post: true + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *cris-fsr_npp_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *cris-fsr_npp_channels + options: channels: *cris-fsr_npp_channels - options: - channels: *cris-fsr_npp_channels -# use passive_bc: true - use_flag: *useflag_cris-fsr_npp - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_cris-fsr_npp + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gmi_gpm.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gmi_gpm.yaml index 51b4e9e6..bf9233b4 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gmi_gpm.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gmi_gpm.yaml @@ -1,5 +1,5 @@ obs space: - name: gmi_gpm + name: GMI GPM obsdatain: engine: type: H5File @@ -9,20 +9,21 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.gmi_gpm.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] - channels: &gmi_gpm_channels 1-13 + channels: &gmi_gpm_available_channels 1-13 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] Clouds: [Water, Ice, Rain, Snow] -# Clouds: [Water, Ice] Cloud_Fraction: 1.0 - linear obs operator: - Absorbers: [H2O,O3,CO2] - Clouds: [Water] obs options: Sensor_ID: gmi_gpm EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + Clouds: [Water] + obs bias: input file: '{{cycle_dir}}/gmi_gpm.{{background_time}}.satbias.nc4' variational bc: @@ -56,6 +57,18 @@ obs bias: order: 2 - name: scan_angle var_name: sensorScanPosition + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/gmi_gpm.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/gmi_gpm.{{window_begin}}.satbias.nc4' + obs filters: - filter: Bounds Check filter variables: @@ -72,7 +85,7 @@ obs filters: - filter: Domain Check filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels where: - variable: name: MetaData/sensorScanPosition @@ -94,7 +107,7 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels where: - variable: name: MetaData/latitude @@ -119,7 +132,7 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels test variables: - name: ObsFunction/CLWRetMW options: @@ -131,7 +144,7 @@ obs filters: - filter: Bounds Check filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels test variables: - name: ObsFunction/CLWRetMW options: @@ -154,7 +167,7 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels where: - variable: name: ObsFunction/CLWRetMW @@ -181,7 +194,7 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels where: - variable: name: ObsFunction/CLWRetMW @@ -208,7 +221,7 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels where: - variable: name: ObsFunction/CLWRetMW @@ -236,14 +249,14 @@ obs filters: - filter: BlackList filter variables: - name: brightnessTemperature - channels: 1-13 + channels: *gmi_gpm_available_channels action: name: assign error error function: name: ObsFunction/ObsErrorModelRamp - channels: 1-13 + channels: *gmi_gpm_available_channels options: - channels: 1-13 + channels: *gmi_gpm_available_channels xvar: name: ObsFunction/CLWRetSymmetricMW options: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gps.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gps.yaml index d477b79a..8aaa1cdf 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gps.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/gps.yaml @@ -13,37 +13,226 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.gnssrobndnbam.{{window_begin}}.nc4' simulated variables: [bendingAngle] + obs operator: name: GnssroBndNBAM obs options: use_compress: 1 + vertlayer: mass sr_steps: 2 - vertlayer: full super_ref_qc: NBAM + GSI_version: GEOStmp obs filters: +#--- +#0 Blacklist data from some satellites +- filter: BlackList + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 41,265,266,267,268,421,440,724,725,726,727,728,729 +#--- +- filter: Perform Action + filter variables: + - name: bendingAngle + where: + - variable: PreUseFlag/bendingAngle + # PreUseFlag should =< ijter (1,2,or 3) in GSI + minvalue: 1 + action: + name: reject +#1 gpstop - filter: Domain Check filter variables: - - name: [bendingAngle] + - name: bendingAngle where: - variable: name: MetaData/impactHeightRO minvalue: 0 - maxvalue: 50000 + maxvalue: 55000.1 + action: + name: reject +# commgpstop for commercial sat (in x0048) +- filter: Bounds Check + filter variables: + - name: bendingAngle + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 265,266,267,268,269 + test variables: + - name: MetaData/impactHeightRO + maxvalue: 45000.1 + action: + name: reject +#2Remove MetOP/GRAS data below 8 km - filter: Bounds Check filter variables: - - name: [bendingAngle] + - name: bendingAngle where: - variable: name: MetaData/satelliteIdentifier is_in: 3-5 test variables: - name: MetaData/impactHeightRO - minvalue: 8000 + minvalue: 8000.1 + action: + name: reject +#3GMAO Spire - Remove data below 5km for GPS (iclass = 401); 9 km for other (GLONASS/GALILEO/etc.) +- filter: Bounds Check + filter variables: + - name: bendingAngle + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 269 + - variable: + name: MetaData/satelliteConstellationRO + is_in: 401 + test variables: + - name: MetaData/impactHeightRO + minvalue: 5000.1 + action: + name: reject +- filter: Bounds Check + filter variables: + - name: bendingAngle + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 269 + - variable: + name: MetaData/satelliteConstellationRO + is_in: 402-999 + test variables: + - name: MetaData/impactHeightRO + minvalue: 9000.1 + action: + name: reject +#4GMAO GeoOptics - Remove data below 5 km for GPS (iclass = 401); 8 km for other +- filter: Bounds Check + filter variables: + - name: bendingAngle + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 265,266 + - variable: + name: MetaData/satelliteConstellationRO + is_in: 401 + test variables: + - name: MetaData/impactHeightRO + minvalue: 5000.1 + action: + name: reject +- filter: Bounds Check + filter variables: + - name: bendingAngle + where: + - variable: + name: MetaData/satelliteIdentifier + is_in: 265,266 + - variable: + name: MetaData/satelliteConstellationRO + is_in: 402-999 + test variables: + - name: MetaData/impactHeightRO + minvalue: 8000.1 + action: + name: reject +# QC below gpstop +# RO error model - filter: ROobserror filter variables: - name: bendingAngle - errmodel: NBAM +# errmodel: NBAM + errmodel: NBAM_GEOStmp +# Inflate error for spire data (spiregpserrinf=2) +- filter: Perform Action + filter variables: + - name: bendingAngle + action: + name: inflate error + inflation factor: 2.0 + where: + - variable: MetaData/satelliteIdentifier + is_in: 269 + +# Gross check -- need to do obserror = min(cerrormax,max(cerrormin,obserr) +# assign JediAdjustObsError/bendingAngle <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: JediAdjustObsError/bendingAngle + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/bendingAngle + defer to post: true +# # reset ObsErrorData to 1.0 if it is < 1.0. +- filter: Perform Action + filter variables: + - name: bendingAngle + action: + name: assign error + error parameter: 1.0 + where: + - variable: + name: JediAdjustObsError/bendingAngle + maxvalue: 1.0 + - variable: + name: JediAdjustObsError/bendingAngle + is_defined: + - variable: + name: MetaData/satelliteIdentifier + is_in: 41,44,440,421,724,725,726,727,728,729, + 750,751,752,753,754,755,821,825 + defer to post: true +# reset ObsErrorData to 10.0 if it is > 10.0. +- filter: Perform Action + filter variables: + - name: bendingAngle + action: + name: assign error + error parameter: 10.0 + where: + - variable: + name: JediAdjustObsError/bendingAngle + minvalue: 10.0 + - variable: + name: JediAdjustObsError/bendingAngle + is_defined: + defer to post: true +- filter: Background Check + filter variables: + - name: bendingAngle + threshold: 5 + action: + name: reject + defer to post: true +# Re-assign error ObsErrorData/bendingAngle <--- JediAdjustObsError/bendingAngle +# after gross error check. +- filter: Perform Action + filter variables: + - name: bendingAngle + action: + name: assign error + error function: JediAdjustObsError/bendingAngle + where: + - variable: + name: JediAdjustObsError/bendingAngle + is_defined: + defer to post: true + +#5 QC cutoff - filter: Background Check RONBAM filter variables: - - name: [bendingAngle] - threshold: 3 + - name: bendingAngle + defer to post: true +#6 Inflate observation error (final step) +- filter: Background Check RONBAM + filter variables: + - name: bendingAngle + action: + name: RONBAMErrInflate + defer to post: true diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml index 85c594ca..c7a9b31d 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml @@ -1,516 +1,528 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] -# SurfaceWindGeoVars: uv - obs options: - Sensor_ID: &Sensor_ID iasi_metop-b - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/iasi_metop-b.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-b.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &iasi_metop-b_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, - 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, - 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, - 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, - 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, - 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, - 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, - 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, - 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, - 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, - 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, - 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, - 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, - 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, - 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, - 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, - 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, - 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, - 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, - 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, - 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, - 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, - 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, - 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, - 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, - 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, - 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, - 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, - 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, - 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, - 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, - 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, - 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, - 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, - 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, - 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, - 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, - 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, - 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, - 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, - 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, - 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, - 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, - 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, - 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, - 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, - 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, - 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 - obs bias: - input file: '{{cycle_dir}}/iasi_metop-b.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &iasi_metop-b_tlapse '{{cycle_dir}}/iasi_metop-b.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *iasi_metop-b_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - action: - name: assign error - error parameter vector: [ 0.7270, 0.8100, 0.7500, 0.7900, 0.7055, 0.7400, 0.6800, 0.7200, 0.6526, 0.6500, - 0.6650, 0.6900, 0.6394, 0.6400, 0.6528, 0.6065, 0.6246, 0.6100, 0.6423, 0.5995, - 0.5900, 0.6069, 0.6000, 0.5965, 0.6400, 0.6200, 0.5890, 0.5865, 0.6500, 0.5861, - 0.6100, 0.5874, 0.6800, 0.6060, 0.6800, 4.3800, 3.0500, 2.3100, 1.5600, 1.3300, - 1.5800, 0.9300, 0.5832, 0.5587, 0.5867, 0.5800, 0.5655, 0.5522, 0.5864, 0.5475, - 0.5854, 0.5455, 0.5811, 0.5376, 0.5452, 0.5686, 0.5329, 0.5655, 0.5302, 0.5450, - 0.5628, 0.5900, 0.5262, 0.5590, 0.5264, 0.5442, 0.5100, 0.5513, 0.5224, 0.5523, - 0.5188, 0.5487, 0.5245, 0.5800, 0.5437, 0.5343, 0.5364, 0.6400, 0.5338, 0.7200, - 0.5370, 0.7500, 0.5100, 0.6500, 0.5274, 0.5290, 0.5187, 0.5228, 1.1200, 0.5222, - 0.5109, 0.6700, 0.5133, 0.5179, 0.5070, 0.6700, 0.5091, 0.6200, 0.5093, 0.6900, - 0.5048, 0.5024, 0.7800, 0.4970, 0.5337, 0.4865, 0.4915, 0.4835, 0.4869, 0.8700, - 0.4824, 0.4852, 0.8400, 0.8400, 0.8400, 0.5318, 0.8000, 0.4772, 0.9800, 0.4880, - 0.4978, 0.5157, 0.6100, 0.5213, 0.4884, 0.7900, 0.6200, 0.6600, 0.4691, 0.6500, - 0.4809, 0.4680, 0.6200, 0.4679, 0.6913, 0.4705, 0.4785, 0.4700, 0.4773, 0.4703, - 0.9800, 0.4697, 0.4662, 0.6500, 0.4670, 0.4883, 0.4684, 0.4684, 0.4947, 0.5393, - 0.5024, 0.4715, 0.6210, 0.6136, 0.5316, 1.7800, 0.5099, 1.1400, 0.5390, 1.7900, - 0.5080, 0.5723, 1.9400, 2.0100, 0.4900, 0.5647, 0.5022, 1.4700, 0.5815, 0.6782, - 2.1300, 0.5445, 1.5200, 0.5555, 1.9600, 2.3100, 2.3300, 2.3200, 2.3100, 0.6994, - 0.7006, 0.7060, 0.9785, 0.7023, 0.6991, 0.6946, 2.2800, 2.2600, 2.2600, 2.2600, - 0.6608, 0.6835, 0.6822, 2.2400, 2.2600, 0.6735, 2.2800, 0.6670, 0.7732, 0.6642, - 0.6480, 0.6629, 2.2900, 2.2900, 0.6799, 0.6230, 2.3200, 0.6030, 0.6224, 2.3200, - 0.6187, 2.3100, 2.3100, 2.2800, 2.2900, 2.2800, 2.2600, 1.9660, 2.2700, 2.2600, - 2.2500, 2.2700, 2.2400, 2.2100, 2.2400, 2.1700, 2.1800, 2.1700, 2.2100, 1.4000, - 2.1600, 2.2000, 2.1300, 2.1200, 2.1300, 2.1000, 2.1200, 2.1100, 2.0900, 2.0900, - 2.0800, 2.0900, 2.0400, 2.0400, 1.9660, 2.0100, 2.0500, 2.0300, 2.0600, 1.9800, - 1.9500, 1.9400, 1.9100, 1.8570, 1.7600, 1.7480, 1.8300, 2.0400, 1.7480, 1.9900, - 2.0750, 2.0700, 2.0200, 2.0400, 2.1000, 1.9660, 2.1800, 2.2100, 2.2400, 2.2300, - 2.2300, 1.9800, 2.2000, 2.1800, 2.1800, 2.2100, 2.2300, 2.2400, 2.2400, 2.2500, - 1.8000, 2.2400, 1.7300, 1.7300, 2.2700, 1.6700, 2.2100, 1.7200, 2.2300, 2.2300, - 2.2300, 2.2400, 2.2300, 2.1200, 2.1700, 1.7400, 2.0200, 1.8800, 1.6700, 1.7300, - 1.8300, 1.8200, 1.7300, 1.8300, 2.1900, 1.8400, 1.8900, 1.6000, 1.7100, 1.8600, - 1.8500, 1.8400, 1.8700, 1.9100, 1.5200, 1.9500, 1.8700, 1.8900, 1.9100, 1.9100, - 1.9300, 1.9000, 1.9100, 1.9000, 1.8900, 1.8900, 1.9100, 1.9000, 1.9100, 1.9100, - 1.9100, 1.9300, 1.9400, 1.9100, 1.9200, 1.7700, 1.9100, 1.9500, 1.1900, 1.9600, - 1.9800, 1.9400, 1.5500, 1.9100, 1.9200, 1.9200, 1.9700, 1.9300, 1.9900, 1.8600, - 1.1200, 1.9300, 1.9200, 1.9500, 1.8500, 1.8400, 1.9100, 1.1200, 1.8200, 1.8200, - 1.9500, 1.2400, 1.9400, 1.9600, 1.2100, 1.8300, 1.9600, 1.3600, 1.9600, 1.8200, - 1.9200, 1.6800, 1.9300, 1.2300, 1.9600, 1.9300, 1.8600, 1.4100, 1.1600, 1.6000, - 1.2500, 1.2000, 1.6500, 1.6600, 1.8700, 1.9400, 1.9600, 1.9100, 1.2500, 1.9300, - 1.9100, 1.7000, 0.9900, 1.8100, 1.9200, 1.9500, 1.5000, 1.4700, 1.1500, 1.5800, - 1.1800, 1.8200, 1.1300, 1.8300, 1.9100, 1.2600, 1.2700, 1.9100, 1.4500, 1.6000, - 1.2900, 1.9400, 1.9400, 1.2300, 1.9500, 1.2100, 1.9400, 1.8600, 1.9000, 1.3300, - 1.7500, 2.0200, 1.9800, 2.0300, 1.8300, 1.5000, 2.0400, 2.0200, 1.9000, 2.0000, - 2.0200, 1.9500, 1.9300, 1.9500, 1.9500, 1.9900, 2.0000, 1.9400, 1.9600, 1.8600, - 1.9200, 1.8800, 1.8600, 1.8400, 1.8700, 1.7700, 1.8900, 1.8900, 1.8800, 1.9400, - 1.8200, 1.7900, 1.8600, 2.0600, 2.3300, 1.8800, 1.8600, 1.8100, 1.8000, 1.8000, - 1.8600, 1.9000, 2.0000, 2.0600, 2.1000, 2.2000, 2.0000, 2.1600, 1.9800, 1.8000, - 1.8000, 1.8500, 1.7500, 2.0400, 2.1900, 2.1400, 2.1900, 1.8600, 2.1000, 2.1100, - 2.1800, 2.0300, 2.2800, 2.1900, 2.2600, 2.2600, 2.2100, 2.2100, 2.2600, 2.3300, - 2.2700, 2.2100, 2.1200, 2.2300, 2.2600, 2.2500, 1.8800, 2.2600, 2.2400, 2.3600, - 2.2900, 2.3500, 2.3000, 2.2700, 2.0800, 2.0500, 2.2700, 2.2800, 2.2700, 2.2800, - 1.9700, 2.2500, 2.2500, 2.2500, 2.3100, 2.2800, 2.2700, 2.1300, 2.2400, 2.2800, - 2.2800, 2.4100, 2.3400, 9.3200, 2.2800, 2.3800, 2.2700, 2.2700, 2.3900, 2.1100, - 2.0900, 2.1000, 2.0600, 2.1200, 2.0800, 2.0000, 1.9300, 2.0200, 2.5500, 1.5400, - 1.6400, 1.5100, 1.5500, 2.8200, 2.9200, 2.5500, 2.3700, 1.8500, 1.6000, 1.7200, - 1.7400, 1.7900, 1.9000, 1.9400, 2.0000, 2.0400, 2.0800, 2.1200, 2.1300, 2.1600, - 2.1800, 2.1800, 2.2000, 2.2000, 2.4100, 2.3900, 2.3800, 2.4000, 2.4200, 2.4100, - 2.4300, 2.4500, 2.4300, 2.4500, 2.4300, 2.4000, 2.4400, 2.4000, 2.4200, 2.4300, - 2.4500, 2.4500, 2.4500, 2.4600, 2.4500, 2.4500, 2.4300, 2.5100, 2.4800, 2.4800, - 2.5300, 2.4600, 2.4900, 2.5000, 2.5000, 2.5000, 2.5200, 2.5200, 2.5400, 2.5000, - 2.4800, 2.5000, 2.5500, 2.5000, 2.4800, 2.5000, 2.5000, 2.5200, 2.5200, 2.4800, - 2.5000, 2.5000, 2.5200, 2.4600, 2.5300, 9.0000 ] +obs space: + name: IASI METOP-B + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/iasi_metop-b.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-b.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &iasi_metop-b_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, + 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, + 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, + 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, + 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, + 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, + 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, + 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, + 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, + 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, + 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, + 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, + 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, + 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, + 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, + 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, + 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, + 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, + 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, + 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, + 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, + 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, + 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, + 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, + 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, + 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, + 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, + 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, + 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, + 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, + 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, + 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, + 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, + 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, + 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, + 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, + 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, + 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, + 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, + 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, + 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, + 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, + 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, + 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, + 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, + 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, + 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, + 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, + 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID iasi_metop-b + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/iasi_metop-b.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &iasi_metop-b_tlapse '{{cycle_dir}}/iasi_metop-b.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *iasi_metop-b_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/iasi_metop-b.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/iasi_metop-b.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + action: + name: assign error + error parameter vector: [ 0.7270, 0.8100, 0.7500, 0.7900, 0.7055, 0.7400, 0.6800, 0.7200, 0.6526, 0.6500, + 0.6650, 0.6900, 0.6394, 0.6400, 0.6528, 0.6065, 0.6246, 0.6100, 0.6423, 0.5995, + 0.5900, 0.6069, 0.6000, 0.5965, 0.6400, 0.6200, 0.5890, 0.5865, 0.6500, 0.5861, + 0.6100, 0.5874, 0.6800, 0.6060, 0.6800, 4.3800, 3.0500, 2.3100, 1.5600, 1.3300, + 1.5800, 0.9300, 0.5832, 0.5587, 0.5867, 0.5800, 0.5655, 0.5522, 0.5864, 0.5475, + 0.5854, 0.5455, 0.5811, 0.5376, 0.5452, 0.5686, 0.5329, 0.5655, 0.5302, 0.5450, + 0.5628, 0.5900, 0.5262, 0.5590, 0.5264, 0.5442, 0.5100, 0.5513, 0.5224, 0.5523, + 0.5188, 0.5487, 0.5245, 0.5800, 0.5437, 0.5343, 0.5364, 0.6400, 0.5338, 0.7200, + 0.5370, 0.7500, 0.5100, 0.6500, 0.5274, 0.5290, 0.5187, 0.5228, 1.1200, 0.5222, + 0.5109, 0.6700, 0.5133, 0.5179, 0.5070, 0.6700, 0.5091, 0.6200, 0.5093, 0.6900, + 0.5048, 0.5024, 0.7800, 0.4970, 0.5337, 0.4865, 0.4915, 0.4835, 0.4869, 0.8700, + 0.4824, 0.4852, 0.8400, 0.8400, 0.8400, 0.5318, 0.8000, 0.4772, 0.9800, 0.4880, + 0.4978, 0.5157, 0.6100, 0.5213, 0.4884, 0.7900, 0.6200, 0.6600, 0.4691, 0.6500, + 0.4809, 0.4680, 0.6200, 0.4679, 0.6913, 0.4705, 0.4785, 0.4700, 0.4773, 0.4703, + 0.9800, 0.4697, 0.4662, 0.6500, 0.4670, 0.4883, 0.4684, 0.4684, 0.4947, 0.5393, + 0.5024, 0.4715, 0.6210, 0.6136, 0.5316, 1.7800, 0.5099, 1.1400, 0.5390, 1.7900, + 0.5080, 0.5723, 1.9400, 2.0100, 0.4900, 0.5647, 0.5022, 1.4700, 0.5815, 0.6782, + 2.1300, 0.5445, 1.5200, 0.5555, 1.9600, 2.3100, 2.3300, 2.3200, 2.3100, 0.6994, + 0.7006, 0.7060, 0.9785, 0.7023, 0.6991, 0.6946, 2.2800, 2.2600, 2.2600, 2.2600, + 0.6608, 0.6835, 0.6822, 2.2400, 2.2600, 0.6735, 2.2800, 0.6670, 0.7732, 0.6642, + 0.6480, 0.6629, 2.2900, 2.2900, 0.6799, 0.6230, 2.3200, 0.6030, 0.6224, 2.3200, + 0.6187, 2.3100, 2.3100, 2.2800, 2.2900, 2.2800, 2.2600, 1.9660, 2.2700, 2.2600, + 2.2500, 2.2700, 2.2400, 2.2100, 2.2400, 2.1700, 2.1800, 2.1700, 2.2100, 1.4000, + 2.1600, 2.2000, 2.1300, 2.1200, 2.1300, 2.1000, 2.1200, 2.1100, 2.0900, 2.0900, + 2.0800, 2.0900, 2.0400, 2.0400, 1.9660, 2.0100, 2.0500, 2.0300, 2.0600, 1.9800, + 1.9500, 1.9400, 1.9100, 1.8570, 1.7600, 1.7480, 1.8300, 2.0400, 1.7480, 1.9900, + 2.0750, 2.0700, 2.0200, 2.0400, 2.1000, 1.9660, 2.1800, 2.2100, 2.2400, 2.2300, + 2.2300, 1.9800, 2.2000, 2.1800, 2.1800, 2.2100, 2.2300, 2.2400, 2.2400, 2.2500, + 1.8000, 2.2400, 1.7300, 1.7300, 2.2700, 1.6700, 2.2100, 1.7200, 2.2300, 2.2300, + 2.2300, 2.2400, 2.2300, 2.1200, 2.1700, 1.7400, 2.0200, 1.8800, 1.6700, 1.7300, + 1.8300, 1.8200, 1.7300, 1.8300, 2.1900, 1.8400, 1.8900, 1.6000, 1.7100, 1.8600, + 1.8500, 1.8400, 1.8700, 1.9100, 1.5200, 1.9500, 1.8700, 1.8900, 1.9100, 1.9100, + 1.9300, 1.9000, 1.9100, 1.9000, 1.8900, 1.8900, 1.9100, 1.9000, 1.9100, 1.9100, + 1.9100, 1.9300, 1.9400, 1.9100, 1.9200, 1.7700, 1.9100, 1.9500, 1.1900, 1.9600, + 1.9800, 1.9400, 1.5500, 1.9100, 1.9200, 1.9200, 1.9700, 1.9300, 1.9900, 1.8600, + 1.1200, 1.9300, 1.9200, 1.9500, 1.8500, 1.8400, 1.9100, 1.1200, 1.8200, 1.8200, + 1.9500, 1.2400, 1.9400, 1.9600, 1.2100, 1.8300, 1.9600, 1.3600, 1.9600, 1.8200, + 1.9200, 1.6800, 1.9300, 1.2300, 1.9600, 1.9300, 1.8600, 1.4100, 1.1600, 1.6000, + 1.2500, 1.2000, 1.6500, 1.6600, 1.8700, 1.9400, 1.9600, 1.9100, 1.2500, 1.9300, + 1.9100, 1.7000, 0.9900, 1.8100, 1.9200, 1.9500, 1.5000, 1.4700, 1.1500, 1.5800, + 1.1800, 1.8200, 1.1300, 1.8300, 1.9100, 1.2600, 1.2700, 1.9100, 1.4500, 1.6000, + 1.2900, 1.9400, 1.9400, 1.2300, 1.9500, 1.2100, 1.9400, 1.8600, 1.9000, 1.3300, + 1.7500, 2.0200, 1.9800, 2.0300, 1.8300, 1.5000, 2.0400, 2.0200, 1.9000, 2.0000, + 2.0200, 1.9500, 1.9300, 1.9500, 1.9500, 1.9900, 2.0000, 1.9400, 1.9600, 1.8600, + 1.9200, 1.8800, 1.8600, 1.8400, 1.8700, 1.7700, 1.8900, 1.8900, 1.8800, 1.9400, + 1.8200, 1.7900, 1.8600, 2.0600, 2.3300, 1.8800, 1.8600, 1.8100, 1.8000, 1.8000, + 1.8600, 1.9000, 2.0000, 2.0600, 2.1000, 2.2000, 2.0000, 2.1600, 1.9800, 1.8000, + 1.8000, 1.8500, 1.7500, 2.0400, 2.1900, 2.1400, 2.1900, 1.8600, 2.1000, 2.1100, + 2.1800, 2.0300, 2.2800, 2.1900, 2.2600, 2.2600, 2.2100, 2.2100, 2.2600, 2.3300, + 2.2700, 2.2100, 2.1200, 2.2300, 2.2600, 2.2500, 1.8800, 2.2600, 2.2400, 2.3600, + 2.2900, 2.3500, 2.3000, 2.2700, 2.0800, 2.0500, 2.2700, 2.2800, 2.2700, 2.2800, + 1.9700, 2.2500, 2.2500, 2.2500, 2.3100, 2.2800, 2.2700, 2.1300, 2.2400, 2.2800, + 2.2800, 2.4100, 2.3400, 9.3200, 2.2800, 2.3800, 2.2700, 2.2700, 2.3900, 2.1100, + 2.0900, 2.1000, 2.0600, 2.1200, 2.0800, 2.0000, 1.9300, 2.0200, 2.5500, 1.5400, + 1.6400, 1.5100, 1.5500, 2.8200, 2.9200, 2.5500, 2.3700, 1.8500, 1.6000, 1.7200, + 1.7400, 1.7900, 1.9000, 1.9400, 2.0000, 2.0400, 2.0800, 2.1200, 2.1300, 2.1600, + 2.1800, 2.1800, 2.2000, 2.2000, 2.4100, 2.3900, 2.3800, 2.4000, 2.4200, 2.4100, + 2.4300, 2.4500, 2.4300, 2.4500, 2.4300, 2.4000, 2.4400, 2.4000, 2.4200, 2.4300, + 2.4500, 2.4500, 2.4500, 2.4600, 2.4500, 2.4500, 2.4300, 2.5100, 2.4800, 2.4800, + 2.5300, 2.4600, 2.4900, 2.5000, 2.5000, 2.5000, 2.5200, 2.5200, 2.5400, 2.5000, + 2.4800, 2.5000, 2.5500, 2.5000, 2.4800, 2.5000, 2.5000, 2.5200, 2.5200, 2.4800, + 2.5000, 2.5000, 2.5200, 2.4600, 2.5300, 9.0000 ] # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *iasi_metop-b_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *iasi_metop-b_channels -# Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, 7069, 7072, - 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, - 7436, 7444, 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, - 7865, 7885, 7888, 7912, 7950, 7972, 7980, 7995, 8007, 8015, - 8055, 8078 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *iasi_metop-b_channels - options: - channels: *iasi_metop-b_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - minvalue: 50.00001 - maxvalue: 549.99999 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad - channels: *iasi_metop-b_channels - options: +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *iasi_metop-b_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *iasi_metop-b_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Wavenumber Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, 7069, 7072, + 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, + 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, + 7436, 7444, 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, + 7865, 7885, 7888, 7912, 7950, 7972, 7980, 7995, 8007, 8015, + 8055, 8078 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *iasi_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *iasi_metop-b_channels - options: - channels: *iasi_metop-b_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualIR +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + minvalue: 50.00001 + maxvalue: 549.99999 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *iasi_metop-b_channels options: channels: *iasi_metop-b_channels - use_flag: &useflag_iasi_metop-b [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, - 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, - 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, - 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, - 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, - 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1] - use_flag_clddet: &clddet_iasi_metop-b [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, - 1, 1, 1, 31, 1, 31, 1, 1, 31, 1, - 31, 1, 1, 1, 1, 31, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *iasi_metop-b_channels options: channels: *iasi_metop-b_channels - use_flag: *useflag_iasi_metop-b - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualIR + channels: *iasi_metop-b_channels + options: channels: *iasi_metop-b_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *iasi_metop-b_channels - options: - channels: *iasi_metop-b_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature + use_flag: &useflag_iasi_metop-b [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, + 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, + -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, + -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, + 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, + 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, + 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, + 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, + 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, + -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, + 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, + -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, + 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, + 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, + 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, + 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, + 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1] + use_flag_clddet: &clddet_iasi_metop-b [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, + 1, 1, 1, 31, 1, 31, 1, 1, 31, 1, + 31, 1, 1, 1, 1, 31, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *iasi_metop-b_channels + options: channels: *iasi_metop-b_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR + use_flag: *useflag_iasi_metop-b + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *iasi_metop-b_channels options: channels: *iasi_metop-b_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: *iasi_metop-b_channels - options: - channels: *iasi_metop-b_channels - obserr_bound_max: [ 3.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 4.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 4.00, 4.00, - 3.50, 2.50, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 0.75, 2.00, - 0.75, 2.00, 2.00, 2.00, 0.75, 0.75, 0.75, 0.75, 2.00, 0.75, - 0.75, 2.00, 0.75, 0.75, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.50, 2.00, 2.50, 2.50, 3.00, 2.50, - 2.50, 2.50, 2.50, 3.50, 2.50, 2.50, 3.00, 3.50, 3.00, 4.00, - 4.00, 0.75, 4.00, 4.00, 4.00, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.00, 4.50, 4.00, 4.00, 4.50, 2.50, 3.00, 2.50, 3.00, 2.50, - 3.00, 2.00, 2.50, 2.50, 3.00, 3.00, 2.50, 3.00, 3.00, 3.00, - 2.50, 2.50, 4.00, 4.50, 4.50, 5.00, 4.00, 4.00, 5.00, 5.00, - 5.00, 5.00, 5.50, 5.50, 4.00, 5.00, 4.00, 4.50, 5.50, 5.50, - 6.00, 4.50, 4.50, 4.00, 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 1.40, 6.00, 1.40, 6.00, 6.00, 1.40, 6.00, - 1.50, 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.50, 4.50, 6.00, - 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, - 6.00, 6.00, 4.00, 6.00, 6.00, 6.00, 6.00, 4.50, 6.00, 6.00, - 4.50, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, 6.00, 6.00, - 5.00, 6.00, 6.00, 5.00, 6.00, 5.00, 6.00, 6.00, 6.00, 5.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00 ] - action: - name: reject -# Surface Type Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-b_channels - test variables: - - name: ObsFunction/SurfTypeCheckRad + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *iasi_metop-b_channels + options: channels: *iasi_metop-b_channels - options: + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad + options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *iasi_metop-b_channels - use_flag: *useflag_iasi_metop-b - use_flag_clddet: *clddet_iasi_metop-b - maxvalue: 1.0e-12 - defer to post: true - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature + options: + channels: *iasi_metop-b_channels + obserr_bound_max: [ 3.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 4.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 4.00, 4.00, + 3.50, 2.50, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 0.75, 2.00, + 0.75, 2.00, 2.00, 2.00, 0.75, 0.75, 0.75, 0.75, 2.00, 0.75, + 0.75, 2.00, 0.75, 0.75, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.50, 2.00, 2.50, 2.50, 3.00, 2.50, + 2.50, 2.50, 2.50, 3.50, 2.50, 2.50, 3.00, 3.50, 3.00, 4.00, + 4.00, 0.75, 4.00, 4.00, 4.00, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.00, 4.50, 4.00, 4.00, 4.50, 2.50, 3.00, 2.50, 3.00, 2.50, + 3.00, 2.00, 2.50, 2.50, 3.00, 3.00, 2.50, 3.00, 3.00, 3.00, + 2.50, 2.50, 4.00, 4.50, 4.50, 5.00, 4.00, 4.00, 5.00, 5.00, + 5.00, 5.00, 5.50, 5.50, 4.00, 5.00, 4.00, 4.50, 5.50, 5.50, + 6.00, 4.50, 4.50, 4.00, 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 1.40, 6.00, 1.40, 6.00, 6.00, 1.40, 6.00, + 1.50, 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.50, 4.50, 6.00, + 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, + 6.00, 6.00, 4.00, 6.00, 6.00, 6.00, 6.00, 4.50, 6.00, 6.00, + 4.50, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, 6.00, 6.00, + 5.00, 6.00, 6.00, 5.00, 6.00, 5.00, 6.00, 6.00, 6.00, 5.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00 ] + action: + name: reject +# Surface Type Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + test variables: + - name: ObsFunction/SurfTypeCheckRad + channels: *iasi_metop-b_channels + options: channels: *iasi_metop-b_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + use_flag: *useflag_iasi_metop-b + use_flag_clddet: *clddet_iasi_metop-b + maxvalue: 1.0e-12 + defer to post: true + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-b_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *iasi_metop-b_channels + options: channels: *iasi_metop-b_channels - options: - channels: *iasi_metop-b_channels -# use passive_bc: true - use_flag: *useflag_iasi_metop-b - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_iasi_metop-b + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml index 60596917..ffe40118 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml @@ -1,516 +1,528 @@ - obs operator: - name: CRTM - Absorbers: [H2O,O3,CO2] - linear obs operator: - Absorbers: [H2O,O3,CO2] -# SurfaceWindGeoVars: uv - obs options: - Sensor_ID: &Sensor_ID iasi_metop-c - EndianType: little_endian - CoefficientPath: '{{crtm_coeff_dir}}' - obs space: - name: *Sensor_ID - obsdatain: - engine: - type: H5File - obsfile: '{{cycle_dir}}/iasi_metop-c.{{window_begin}}.nc4' - obsdataout: - engine: - type: H5File - obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-c.{{window_begin}}.nc4' - simulated variables: [brightnessTemperature] - channels: &iasi_metop-c_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, - 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, - 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, - 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, - 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, - 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, - 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, - 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, - 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, - 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, - 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, - 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, - 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, - 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, - 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, - 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, - 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, - 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, - 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, - 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, - 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, - 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, - 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, - 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, - 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, - 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, - 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, - 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, - 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, - 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, - 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, - 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, - 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, - 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, - 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, - 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, - 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, - 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, - 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, - 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, - 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, - 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, - 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, - 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, - 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, - 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, - 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, - 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 - obs bias: - input file: '{{cycle_dir}}/iasi_metop-c.{{background_time}}.satbias.nc4' - variational bc: - predictors: - - name: constant - - name: lapse_rate - order: 2 - tlapse: &iasi_metop-c_tlapse '{{cycle_dir}}/iasi_metop-c.{{background_time}}.tlapse.txt' - - name: lapse_rate - tlapse: *iasi_metop-c_tlapse - - name: emissivity - - name: scan_angle - order: 4 - - name: scan_angle - order: 3 - - name: scan_angle - order: 2 - - name: scan_angle - obs filters: - - filter: Perform Action - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - action: - name: assign error - error parameter vector: [ 0.7270, 0.8100, 0.7500, 0.7900, 0.7055, 0.7400, 0.6800, 0.7200, 0.6526, 0.6500, - 0.6650, 0.6900, 0.6394, 0.6400, 0.6528, 0.6065, 0.6246, 0.6100, 0.6423, 0.5995, - 0.5900, 0.6069, 0.6000, 0.5965, 0.6400, 0.6200, 0.5890, 0.5865, 0.6500, 0.5861, - 0.6100, 0.5874, 0.6800, 0.6060, 0.6800, 4.3800, 3.0500, 2.3100, 1.5600, 1.3300, - 1.5800, 0.9300, 0.5832, 0.5587, 0.5867, 0.5800, 0.5655, 0.5522, 0.5864, 0.5475, - 0.5854, 0.5455, 0.5811, 0.5376, 0.5452, 0.5686, 0.5329, 0.5655, 0.5302, 0.5450, - 0.5628, 0.5900, 0.5262, 0.5590, 0.5264, 0.5442, 0.5100, 0.5513, 0.5224, 0.5523, - 0.5188, 0.5487, 0.5245, 0.5800, 0.5437, 0.5343, 0.5364, 0.6400, 0.5338, 0.7200, - 0.5370, 0.7500, 0.5100, 0.6500, 0.5274, 0.5290, 0.5187, 0.5228, 1.1200, 0.5222, - 0.5109, 0.6700, 0.5133, 0.5179, 0.5070, 0.6700, 0.5091, 0.6200, 0.5093, 0.6900, - 0.5048, 0.5024, 0.7800, 0.4970, 0.5337, 0.4865, 0.4915, 0.4835, 0.4869, 0.8700, - 0.4824, 0.4852, 0.8400, 0.8400, 0.8400, 0.5318, 0.8000, 0.4772, 0.9800, 0.4880, - 0.4978, 0.5157, 0.6100, 0.5213, 0.4884, 0.7900, 0.6200, 0.6600, 0.4691, 0.6500, - 0.4809, 0.4680, 0.6200, 0.4679, 0.6913, 0.4705, 0.4785, 0.4700, 0.4773, 0.4703, - 0.9800, 0.4697, 0.4662, 0.6500, 0.4670, 0.4883, 0.4684, 0.4684, 0.4947, 0.5393, - 0.5024, 0.4715, 0.6210, 0.6136, 0.5316, 1.7800, 0.5099, 1.1400, 0.5390, 1.7900, - 0.5080, 0.5723, 1.9400, 2.0100, 0.4900, 0.5647, 0.5022, 1.4700, 0.5815, 0.6782, - 2.1300, 0.5445, 1.5200, 0.5555, 1.9600, 2.3100, 2.3300, 2.3200, 2.3100, 0.6994, - 0.7006, 0.7060, 0.9785, 0.7023, 0.6991, 0.6946, 2.2800, 2.2600, 2.2600, 2.2600, - 0.6608, 0.6835, 0.6822, 2.2400, 2.2600, 0.6735, 2.2800, 0.6670, 0.7732, 0.6642, - 0.6480, 0.6629, 2.2900, 2.2900, 0.6799, 0.6230, 2.3200, 0.6030, 0.6224, 2.3200, - 0.6187, 2.3100, 2.3100, 2.2800, 2.2900, 2.2800, 2.2600, 1.9660, 2.2700, 2.2600, - 2.2500, 2.2700, 2.2400, 2.2100, 2.2400, 2.1700, 2.1800, 2.1700, 2.2100, 1.4000, - 2.1600, 2.2000, 2.1300, 2.1200, 2.1300, 2.1000, 2.1200, 2.1100, 2.0900, 2.0900, - 2.0800, 2.0900, 2.0400, 2.0400, 1.9660, 2.0100, 2.0500, 2.0300, 2.0600, 1.9800, - 1.9500, 1.9400, 1.9100, 1.8570, 1.7600, 1.7480, 1.8300, 2.0400, 1.7480, 1.9900, - 2.0750, 2.0700, 2.0200, 2.0400, 2.1000, 1.9660, 2.1800, 2.2100, 2.2400, 2.2300, - 2.2300, 1.9800, 2.2000, 2.1800, 2.1800, 2.2100, 2.2300, 2.2400, 2.2400, 2.2500, - 1.8000, 2.2400, 1.7300, 1.7300, 2.2700, 1.6700, 2.2100, 1.7200, 2.2300, 2.2300, - 2.2300, 2.2400, 2.2300, 2.1200, 2.1700, 1.7400, 2.0200, 1.8800, 1.6700, 1.7300, - 1.8300, 1.8200, 1.7300, 1.8300, 2.1900, 1.8400, 1.8900, 1.6000, 1.7100, 1.8600, - 1.8500, 1.8400, 1.8700, 1.9100, 1.5200, 1.9500, 1.8700, 1.8900, 1.9100, 1.9100, - 1.9300, 1.9000, 1.9100, 1.9000, 1.8900, 1.8900, 1.9100, 1.9000, 1.9100, 1.9100, - 1.9100, 1.9300, 1.9400, 1.9100, 1.9200, 1.7700, 1.9100, 1.9500, 1.1900, 1.9600, - 1.9800, 1.9400, 1.5500, 1.9100, 1.9200, 1.9200, 1.9700, 1.9300, 1.9900, 1.8600, - 1.1200, 1.9300, 1.9200, 1.9500, 1.8500, 1.8400, 1.9100, 1.1200, 1.8200, 1.8200, - 1.9500, 1.2400, 1.9400, 1.9600, 1.2100, 1.8300, 1.9600, 1.3600, 1.9600, 1.8200, - 1.9200, 1.6800, 1.9300, 1.2300, 1.9600, 1.9300, 1.8600, 1.4100, 1.1600, 1.6000, - 1.2500, 1.2000, 1.6500, 1.6600, 1.8700, 1.9400, 1.9600, 1.9100, 1.2500, 1.9300, - 1.9100, 1.7000, 0.9900, 1.8100, 1.9200, 1.9500, 1.5000, 1.4700, 1.1500, 1.5800, - 1.1800, 1.8200, 1.1300, 1.8300, 1.9100, 1.2600, 1.2700, 1.9100, 1.4500, 1.6000, - 1.2900, 1.9400, 1.9400, 1.2300, 1.9500, 1.2100, 1.9400, 1.8600, 1.9000, 1.3300, - 1.7500, 2.0200, 1.9800, 2.0300, 1.8300, 1.5000, 2.0400, 2.0200, 1.9000, 2.0000, - 2.0200, 1.9500, 1.9300, 1.9500, 1.9500, 1.9900, 2.0000, 1.9400, 1.9600, 1.8600, - 1.9200, 1.8800, 1.8600, 1.8400, 1.8700, 1.7700, 1.8900, 1.8900, 1.8800, 1.9400, - 1.8200, 1.7900, 1.8600, 2.0600, 2.3300, 1.8800, 1.8600, 1.8100, 1.8000, 1.8000, - 1.8600, 1.9000, 2.0000, 2.0600, 2.1000, 2.2000, 2.0000, 2.1600, 1.9800, 1.8000, - 1.8000, 1.8500, 1.7500, 2.0400, 2.1900, 2.1400, 2.1900, 1.8600, 2.1000, 2.1100, - 2.1800, 2.0300, 2.2800, 2.1900, 2.2600, 2.2600, 2.2100, 2.2100, 2.2600, 2.3300, - 2.2700, 2.2100, 2.1200, 2.2300, 2.2600, 2.2500, 1.8800, 2.2600, 2.2400, 2.3600, - 2.2900, 2.3500, 2.3000, 2.2700, 2.0800, 2.0500, 2.2700, 2.2800, 2.2700, 2.2800, - 1.9700, 2.2500, 2.2500, 2.2500, 2.3100, 2.2800, 2.2700, 2.1300, 2.2400, 2.2800, - 2.2800, 2.4100, 2.3400, 9.3200, 2.2800, 2.3800, 2.2700, 2.2700, 2.3900, 2.1100, - 2.0900, 2.1000, 2.0600, 2.1200, 2.0800, 2.0000, 1.9300, 2.0200, 2.5500, 1.5400, - 1.6400, 1.5100, 1.5500, 2.8200, 2.9200, 2.5500, 2.3700, 1.8500, 1.6000, 1.7200, - 1.7400, 1.7900, 1.9000, 1.9400, 2.0000, 2.0400, 2.0800, 2.1200, 2.1300, 2.1600, - 2.1800, 2.1800, 2.2000, 2.2000, 2.4100, 2.3900, 2.3800, 2.4000, 2.4200, 2.4100, - 2.4300, 2.4500, 2.4300, 2.4500, 2.4300, 2.4000, 2.4400, 2.4000, 2.4200, 2.4300, - 2.4500, 2.4500, 2.4500, 2.4600, 2.4500, 2.4500, 2.4300, 2.5100, 2.4800, 2.4800, - 2.5300, 2.4600, 2.4900, 2.5000, 2.5000, 2.5000, 2.5200, 2.5200, 2.5400, 2.5000, - 2.4800, 2.5000, 2.5500, 2.5000, 2.4800, 2.5000, 2.5000, 2.5200, 2.5200, 2.4800, - 2.5000, 2.5000, 2.5200, 2.4600, 2.5300, 9.0000 ] +obs space: + name: IASI METOP-C + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/iasi_metop-c.{{window_begin}}.nc4' + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.iasi_metop-c.{{window_begin}}.nc4' + simulated variables: [brightnessTemperature] + channels: &iasi_metop-c_channels 16, 29, 32, 35, 38, 41, 44, 47, 49, 50, 51, 53, + 55, 56, 57, 59, 61, 62, 63, 66, 68, 70, 72, 74, 76, 78, 79, 81, 82, 83, + 84, 85, 86, 87, 89, 92, 93, 95, 97, 99, 101, 103, 104, 106, 109, 110, + 111, 113, 116, 119, 122, 125, 128, 131, 133, 135, 138, 141, 144, 146, + 148, 150, 151, 154, 157, 159, 160, 161, 163, 167, 170, 173, 176, 179, + 180, 185, 187, 191, 193, 197, 199, 200, 202, 203, 205, 207, 210, 212, + 213, 214, 217, 218, 219, 222, 224, 225, 226, 228, 230, 231, 232, 236, + 237, 239, 243, 246, 249, 252, 254, 259, 260, 262, 265, 267, 269, 275, + 279, 282, 285, 294, 296, 299, 300, 303, 306, 309, 313, 320, 323, 326, + 327, 329, 332, 335, 345, 347, 350, 354, 356, 360, 363, 366, 371, 372, + 373, 375, 377, 379, 381, 383, 386, 389, 398, 401, 404, 405, 407, 408, + 410, 411, 414, 416, 418, 423, 426, 428, 432, 433, 434, 439, 442, 445, + 450, 457, 459, 472, 477, 483, 509, 515, 546, 552, 559, 566, 571, 573, + 578, 584, 594, 625, 646, 662, 668, 705, 739, 756, 797, 867, 906, 921, + 1027, 1046, 1090, 1098, 1121, 1133, 1173, 1191, 1194, 1222, 1271, 1283, + 1338, 1409, 1414, 1420, 1424, 1427, 1430, 1434, 1440, 1442, 1445, 1450, + 1454, 1460, 1463, 1469, 1474, 1479, 1483, 1487, 1494, 1496, 1502, 1505, + 1509, 1510, 1513, 1518, 1521, 1526, 1529, 1532, 1536, 1537, 1541, 1545, + 1548, 1553, 1560, 1568, 1574, 1579, 1583, 1585, 1587, 1606, 1626, 1639, + 1643, 1652, 1658, 1659, 1666, 1671, 1675, 1681, 1694, 1697, 1710, 1786, + 1791, 1805, 1839, 1884, 1913, 1946, 1947, 1991, 2019, 2094, 2119, 2213, + 2239, 2271, 2289, 2321, 2333, 2346, 2349, 2352, 2359, 2367, 2374, 2398, + 2426, 2562, 2701, 2741, 2745, 2760, 2819, 2889, 2907, 2910, 2919, 2921, + 2939, 2944, 2945, 2948, 2951, 2958, 2971, 2977, 2985, 2988, 2990, 2991, + 2993, 3002, 3008, 3014, 3027, 3029, 3030, 3036, 3047, 3049, 3052, 3053, + 3055, 3058, 3064, 3069, 3087, 3093, 3098, 3105, 3107, 3110, 3116, 3127, + 3129, 3136, 3146, 3151, 3160, 3165, 3168, 3175, 3178, 3189, 3207, 3228, + 3244, 3248, 3252, 3256, 3263, 3281, 3295, 3303, 3309, 3312, 3322, 3326, + 3354, 3366, 3375, 3378, 3411, 3416, 3432, 3438, 3440, 3442, 3444, 3446, + 3448, 3450, 3452, 3454, 3458, 3467, 3476, 3484, 3491, 3497, 3499, 3504, + 3506, 3509, 3518, 3527, 3555, 3575, 3577, 3580, 3582, 3586, 3589, 3599, + 3610, 3626, 3638, 3646, 3653, 3658, 3661, 3673, 3689, 3700, 3710, 3726, + 3763, 3814, 3841, 3888, 4032, 4059, 4068, 4082, 4095, 4160, 4234, 4257, + 4411, 4498, 4520, 4552, 4567, 4608, 4646, 4698, 4808, 4849, 4920, 4939, + 4947, 4967, 4991, 4996, 5015, 5028, 5056, 5128, 5130, 5144, 5170, 5178, + 5183, 5188, 5191, 5368, 5371, 5379, 5381, 5383, 5397, 5399, 5401, 5403, + 5405, 5446, 5455, 5472, 5480, 5483, 5485, 5492, 5497, 5502, 5507, 5509, + 5517, 5528, 5558, 5697, 5714, 5749, 5766, 5785, 5798, 5799, 5801, 5817, + 5833, 5834, 5836, 5849, 5851, 5852, 5865, 5869, 5881, 5884, 5897, 5900, + 5916, 5932, 5948, 5963, 5968, 5978, 5988, 5992, 5994, 5997, 6003, 6008, + 6023, 6026, 6039, 6053, 6056, 6067, 6071, 6082, 6085, 6098, 6112, 6126, + 6135, 6140, 6149, 6154, 6158, 6161, 6168, 6174, 6182, 6187, 6205, 6209, + 6213, 6317, 6339, 6342, 6366, 6381, 6391, 6489, 6962, 6966, 6970, 6975, + 6977, 6982, 6985, 6987, 6989, 6991, 6993, 6995, 6997, 6999, 7000, 7004, + 7008, 7013, 7016, 7021, 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, + 7069, 7072, 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, + 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, 7436, 7444, + 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, 7865, 7885, 7888, 7912, + 7950, 7972, 7980, 7995, 8007, 8015, 8055, 8078 + +obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: &Sensor_ID iasi_metop-c + EndianType: little_endian + CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + +obs bias: + input file: '{{cycle_dir}}/iasi_metop-c.{{background_time}}.satbias.nc4' + variational bc: + predictors: + - name: constant + - name: lapse_rate + order: 2 + tlapse: &iasi_metop-c_tlapse '{{cycle_dir}}/iasi_metop-c.{{background_time}}.tlapse.txt' + - name: lapse_rate + tlapse: *iasi_metop-c_tlapse + - name: emissivity + - name: scan_angle + order: 4 + - name: scan_angle + order: 3 + - name: scan_angle + order: 2 + - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/iasi_metop-c.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/iasi_metop-c.{{window_begin}}.satbias.nc4' + +obs filters: +- filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + action: + name: assign error + error parameter vector: [ 0.7270, 0.8100, 0.7500, 0.7900, 0.7055, 0.7400, 0.6800, 0.7200, 0.6526, 0.6500, + 0.6650, 0.6900, 0.6394, 0.6400, 0.6528, 0.6065, 0.6246, 0.6100, 0.6423, 0.5995, + 0.5900, 0.6069, 0.6000, 0.5965, 0.6400, 0.6200, 0.5890, 0.5865, 0.6500, 0.5861, + 0.6100, 0.5874, 0.6800, 0.6060, 0.6800, 4.3800, 3.0500, 2.3100, 1.5600, 1.3300, + 1.5800, 0.9300, 0.5832, 0.5587, 0.5867, 0.5800, 0.5655, 0.5522, 0.5864, 0.5475, + 0.5854, 0.5455, 0.5811, 0.5376, 0.5452, 0.5686, 0.5329, 0.5655, 0.5302, 0.5450, + 0.5628, 0.5900, 0.5262, 0.5590, 0.5264, 0.5442, 0.5100, 0.5513, 0.5224, 0.5523, + 0.5188, 0.5487, 0.5245, 0.5800, 0.5437, 0.5343, 0.5364, 0.6400, 0.5338, 0.7200, + 0.5370, 0.7500, 0.5100, 0.6500, 0.5274, 0.5290, 0.5187, 0.5228, 1.1200, 0.5222, + 0.5109, 0.6700, 0.5133, 0.5179, 0.5070, 0.6700, 0.5091, 0.6200, 0.5093, 0.6900, + 0.5048, 0.5024, 0.7800, 0.4970, 0.5337, 0.4865, 0.4915, 0.4835, 0.4869, 0.8700, + 0.4824, 0.4852, 0.8400, 0.8400, 0.8400, 0.5318, 0.8000, 0.4772, 0.9800, 0.4880, + 0.4978, 0.5157, 0.6100, 0.5213, 0.4884, 0.7900, 0.6200, 0.6600, 0.4691, 0.6500, + 0.4809, 0.4680, 0.6200, 0.4679, 0.6913, 0.4705, 0.4785, 0.4700, 0.4773, 0.4703, + 0.9800, 0.4697, 0.4662, 0.6500, 0.4670, 0.4883, 0.4684, 0.4684, 0.4947, 0.5393, + 0.5024, 0.4715, 0.6210, 0.6136, 0.5316, 1.7800, 0.5099, 1.1400, 0.5390, 1.7900, + 0.5080, 0.5723, 1.9400, 2.0100, 0.4900, 0.5647, 0.5022, 1.4700, 0.5815, 0.6782, + 2.1300, 0.5445, 1.5200, 0.5555, 1.9600, 2.3100, 2.3300, 2.3200, 2.3100, 0.6994, + 0.7006, 0.7060, 0.9785, 0.7023, 0.6991, 0.6946, 2.2800, 2.2600, 2.2600, 2.2600, + 0.6608, 0.6835, 0.6822, 2.2400, 2.2600, 0.6735, 2.2800, 0.6670, 0.7732, 0.6642, + 0.6480, 0.6629, 2.2900, 2.2900, 0.6799, 0.6230, 2.3200, 0.6030, 0.6224, 2.3200, + 0.6187, 2.3100, 2.3100, 2.2800, 2.2900, 2.2800, 2.2600, 1.9660, 2.2700, 2.2600, + 2.2500, 2.2700, 2.2400, 2.2100, 2.2400, 2.1700, 2.1800, 2.1700, 2.2100, 1.4000, + 2.1600, 2.2000, 2.1300, 2.1200, 2.1300, 2.1000, 2.1200, 2.1100, 2.0900, 2.0900, + 2.0800, 2.0900, 2.0400, 2.0400, 1.9660, 2.0100, 2.0500, 2.0300, 2.0600, 1.9800, + 1.9500, 1.9400, 1.9100, 1.8570, 1.7600, 1.7480, 1.8300, 2.0400, 1.7480, 1.9900, + 2.0750, 2.0700, 2.0200, 2.0400, 2.1000, 1.9660, 2.1800, 2.2100, 2.2400, 2.2300, + 2.2300, 1.9800, 2.2000, 2.1800, 2.1800, 2.2100, 2.2300, 2.2400, 2.2400, 2.2500, + 1.8000, 2.2400, 1.7300, 1.7300, 2.2700, 1.6700, 2.2100, 1.7200, 2.2300, 2.2300, + 2.2300, 2.2400, 2.2300, 2.1200, 2.1700, 1.7400, 2.0200, 1.8800, 1.6700, 1.7300, + 1.8300, 1.8200, 1.7300, 1.8300, 2.1900, 1.8400, 1.8900, 1.6000, 1.7100, 1.8600, + 1.8500, 1.8400, 1.8700, 1.9100, 1.5200, 1.9500, 1.8700, 1.8900, 1.9100, 1.9100, + 1.9300, 1.9000, 1.9100, 1.9000, 1.8900, 1.8900, 1.9100, 1.9000, 1.9100, 1.9100, + 1.9100, 1.9300, 1.9400, 1.9100, 1.9200, 1.7700, 1.9100, 1.9500, 1.1900, 1.9600, + 1.9800, 1.9400, 1.5500, 1.9100, 1.9200, 1.9200, 1.9700, 1.9300, 1.9900, 1.8600, + 1.1200, 1.9300, 1.9200, 1.9500, 1.8500, 1.8400, 1.9100, 1.1200, 1.8200, 1.8200, + 1.9500, 1.2400, 1.9400, 1.9600, 1.2100, 1.8300, 1.9600, 1.3600, 1.9600, 1.8200, + 1.9200, 1.6800, 1.9300, 1.2300, 1.9600, 1.9300, 1.8600, 1.4100, 1.1600, 1.6000, + 1.2500, 1.2000, 1.6500, 1.6600, 1.8700, 1.9400, 1.9600, 1.9100, 1.2500, 1.9300, + 1.9100, 1.7000, 0.9900, 1.8100, 1.9200, 1.9500, 1.5000, 1.4700, 1.1500, 1.5800, + 1.1800, 1.8200, 1.1300, 1.8300, 1.9100, 1.2600, 1.2700, 1.9100, 1.4500, 1.6000, + 1.2900, 1.9400, 1.9400, 1.2300, 1.9500, 1.2100, 1.9400, 1.8600, 1.9000, 1.3300, + 1.7500, 2.0200, 1.9800, 2.0300, 1.8300, 1.5000, 2.0400, 2.0200, 1.9000, 2.0000, + 2.0200, 1.9500, 1.9300, 1.9500, 1.9500, 1.9900, 2.0000, 1.9400, 1.9600, 1.8600, + 1.9200, 1.8800, 1.8600, 1.8400, 1.8700, 1.7700, 1.8900, 1.8900, 1.8800, 1.9400, + 1.8200, 1.7900, 1.8600, 2.0600, 2.3300, 1.8800, 1.8600, 1.8100, 1.8000, 1.8000, + 1.8600, 1.9000, 2.0000, 2.0600, 2.1000, 2.2000, 2.0000, 2.1600, 1.9800, 1.8000, + 1.8000, 1.8500, 1.7500, 2.0400, 2.1900, 2.1400, 2.1900, 1.8600, 2.1000, 2.1100, + 2.1800, 2.0300, 2.2800, 2.1900, 2.2600, 2.2600, 2.2100, 2.2100, 2.2600, 2.3300, + 2.2700, 2.2100, 2.1200, 2.2300, 2.2600, 2.2500, 1.8800, 2.2600, 2.2400, 2.3600, + 2.2900, 2.3500, 2.3000, 2.2700, 2.0800, 2.0500, 2.2700, 2.2800, 2.2700, 2.2800, + 1.9700, 2.2500, 2.2500, 2.2500, 2.3100, 2.2800, 2.2700, 2.1300, 2.2400, 2.2800, + 2.2800, 2.4100, 2.3400, 9.3200, 2.2800, 2.3800, 2.2700, 2.2700, 2.3900, 2.1100, + 2.0900, 2.1000, 2.0600, 2.1200, 2.0800, 2.0000, 1.9300, 2.0200, 2.5500, 1.5400, + 1.6400, 1.5100, 1.5500, 2.8200, 2.9200, 2.5500, 2.3700, 1.8500, 1.6000, 1.7200, + 1.7400, 1.7900, 1.9000, 1.9400, 2.0000, 2.0400, 2.0800, 2.1200, 2.1300, 2.1600, + 2.1800, 2.1800, 2.2000, 2.2000, 2.4100, 2.3900, 2.3800, 2.4000, 2.4200, 2.4100, + 2.4300, 2.4500, 2.4300, 2.4500, 2.4300, 2.4000, 2.4400, 2.4000, 2.4200, 2.4300, + 2.4500, 2.4500, 2.4500, 2.4600, 2.4500, 2.4500, 2.4300, 2.5100, 2.4800, 2.4800, + 2.5300, 2.4600, 2.4900, 2.5000, 2.5000, 2.5000, 2.5200, 2.5200, 2.5400, 2.5000, + 2.4800, 2.5000, 2.5500, 2.5000, 2.4800, 2.5000, 2.5000, 2.5200, 2.5200, 2.4800, + 2.5000, 2.5000, 2.5200, 2.4600, 2.5300, 9.0000 ] # assign ObsError <---- ObsErrorData (Assigned in Yaml) - - filter: Variable Assignment - assignments: - - name: ObsError/brightnessTemperature - channels: *iasi_metop-c_channels - type: float - function: - name: ObsFunction/Arithmetic - options: - variables: - - name: ObsErrorData/brightnessTemperature - channels: *iasi_metop-c_channels -# Wavenumber Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, 7069, 7072, - 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, - 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, - 7436, 7444, 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, - 7865, 7885, 7888, 7912, 7950, 7972, 7980, 7995, 8007, 8015, - 8055, 8078 - where: - - variable: - name: MetaData/solarZenithAngle - maxvalue: 88.9999 - - variable: - name: GeoVaLs/water_area_fraction - minvalue: 1.0e-12 - action: - name: reject - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorWavenumIR - channels: *iasi_metop-c_channels - options: - channels: *iasi_metop-c_channels -# Observation Range Sanity Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - minvalue: 50.00001 - maxvalue: 549.99999 - action: - name: reject -# Topography Check - - filter: BlackList - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTopoRad - channels: *iasi_metop-c_channels - options: +- filter: Variable Assignment + assignments: + - name: ObsError/brightnessTemperature + channels: *iasi_metop-c_channels + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/brightnessTemperature channels: *iasi_metop-c_channels - sensor: *Sensor_ID -# Transmittance Top Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Wavenumber Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 7024, 7027, 7029, 7032, 7038, 7043, 7046, 7049, 7069, 7072, + 7076, 7081, 7084, 7089, 7099, 7209, 7222, 7231, 7235, 7247, + 7267, 7269, 7284, 7389, 7419, 7423, 7424, 7426, 7428, 7431, + 7436, 7444, 7475, 7549, 7584, 7665, 7666, 7831, 7836, 7853, + 7865, 7885, 7888, 7912, 7950, 7972, 7980, 7995, 8007, 8015, + 8055, 8078 + where: + - variable: + name: MetaData/solarZenithAngle + maxvalue: 88.9999 + - variable: + name: GeoVaLs/water_area_fraction + minvalue: 1.0e-12 + action: + name: reject +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorWavenumIR channels: *iasi_metop-c_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorTransmitTopRad + options: channels: *iasi_metop-c_channels - options: - channels: *iasi_metop-c_channels -# Cloud Detection Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - test variables: - - name: ObsFunction/CloudDetectMinResidualIR +# Observation Range Sanity Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + minvalue: 50.00001 + maxvalue: 549.99999 + action: + name: reject +# Topography Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad channels: *iasi_metop-c_channels options: channels: *iasi_metop-c_channels - use_flag: &useflag_iasi_metop-c [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, - 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, - -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, - 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, - 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, - 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, - 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, - 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, - 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, - 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, - -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, - 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, - 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, - 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, - 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, - -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, - 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1] - use_flag_clddet: &clddet_iasi_metop-c [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, - 1, 1, 1, 31, 1, 31, 1, 1, 31, 1, - 31, 1, 1, 1, 1, 31, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# NSST Retrieval Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - test variables: - - name: ObsFunction/NearSSTRetCheckIR + sensor: *Sensor_ID +# Transmittance Top Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *iasi_metop-c_channels options: channels: *iasi_metop-c_channels - use_flag: *useflag_iasi_metop-c - obserr_demisf: [0.01,0.02,0.03,0.02,0.03] - obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] - maxvalue: 1.0e-12 - action: - name: reject -# Surface Jacobians Check - - filter: BlackList - filter variables: - - name: brightnessTemperature +# Cloud Detection Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + test variables: + - name: ObsFunction/CloudDetectMinResidualIR + channels: *iasi_metop-c_channels + options: channels: *iasi_metop-c_channels - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorSurfJacobianRad - channels: *iasi_metop-c_channels - options: - channels: *iasi_metop-c_channels - sensor: *Sensor_ID - obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] - obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] -# Gross check - - filter: Background Check - filter variables: - - name: brightnessTemperature + use_flag: &useflag_iasi_metop-c [ 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, + 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, + -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, + -1, 1, -1, 1, -1, -1, -1, -1, -1, -1, + -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, + 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, + 1, -1, -1, -1, 1, 1, 1, 1, -1, 1, + 1, -1, 1, 1, 1, -1, 1, -1, 1, -1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, + 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, + 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, + 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, + -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, -1, 1, -1, 1, -1, + 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, + -1, 1, -1, 1, -1, -1, -1, -1, -1, 1, + 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, + 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, + 1, 1, -1, -1, 1, 1, -1, 1, 1, -1, + 1, -1, -1, -1, -1, -1, -1, 1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, -1, 1, -1, -1, 1, -1, + 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1] + use_flag_clddet: &clddet_iasi_metop-c [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 31, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, + 1, 1, 1, 31, 1, 31, 1, 1, 31, 1, + 31, 1, 1, 1, 1, 31, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# NSST Retrieval Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *iasi_metop-c_channels + options: channels: *iasi_metop-c_channels - function absolute threshold: - - name: ObsFunction/ObsErrorBoundIR + use_flag: *useflag_iasi_metop-c + obserr_demisf: [0.01,0.02,0.03,0.02,0.03] + obserr_dtempf: [0.50,2.00,4.00,2.00,4.00] + maxvalue: 1.0e-12 + action: + name: reject +# Surface Jacobians Check +- filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad channels: *iasi_metop-c_channels options: channels: *iasi_metop-c_channels - obserr_bound_latitude: - name: ObsFunction/ObsErrorFactorLatRad - options: - latitude_parameters: [25.0, 0.5, 0.04, 1.0] - obserr_bound_transmittop: - name: ObsFunction/ObsErrorFactorTransmitTopRad - channels: *iasi_metop-c_channels - options: - channels: *iasi_metop-c_channels - obserr_bound_max: [ 3.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 4.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 4.00, 4.00, - 3.50, 2.50, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 0.75, 2.00, - 0.75, 2.00, 2.00, 2.00, 0.75, 0.75, 0.75, 0.75, 2.00, 0.75, - 0.75, 2.00, 0.75, 0.75, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, - 2.00, 2.00, 2.00, 2.00, 2.50, 2.00, 2.50, 2.50, 3.00, 2.50, - 2.50, 2.50, 2.50, 3.50, 2.50, 2.50, 3.00, 3.50, 3.00, 4.00, - 4.00, 0.75, 4.00, 4.00, 4.00, 4.50, 4.50, 4.50, 4.50, 4.50, - 4.00, 4.50, 4.00, 4.00, 4.50, 2.50, 3.00, 2.50, 3.00, 2.50, - 3.00, 2.00, 2.50, 2.50, 3.00, 3.00, 2.50, 3.00, 3.00, 3.00, - 2.50, 2.50, 4.00, 4.50, 4.50, 5.00, 4.00, 4.00, 5.00, 5.00, - 5.00, 5.00, 5.50, 5.50, 4.00, 5.00, 4.00, 4.50, 5.50, 5.50, - 6.00, 4.50, 4.50, 4.00, 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 1.40, 6.00, 1.40, 6.00, 6.00, 1.40, 6.00, - 1.50, 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.50, 4.50, 6.00, - 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, - 6.00, 6.00, 4.00, 6.00, 6.00, 6.00, 6.00, 4.50, 6.00, 6.00, - 4.50, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, 6.00, 6.00, - 5.00, 6.00, 6.00, 5.00, 6.00, 5.00, 6.00, 6.00, 6.00, 5.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, - 6.00, 6.00, 6.00, 6.00, 6.00, 6.00 ] - action: - name: reject -# Surface Type Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature - channels: *iasi_metop-c_channels - test variables: - - name: ObsFunction/SurfTypeCheckRad + sensor: *Sensor_ID + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.50, 2.00, 4.00, 2.00, 4.00] +# Gross check +- filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *iasi_metop-c_channels + options: channels: *iasi_metop-c_channels - options: + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad + options: + latitude_parameters: [25.0, 0.5, 0.04, 1.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad channels: *iasi_metop-c_channels - use_flag: *useflag_iasi_metop-c - use_flag_clddet: *clddet_iasi_metop-c - maxvalue: 1.0e-12 - defer to post: true - action: - name: reject -# Useflag Check - - filter: Bounds Check - filter variables: - - name: brightnessTemperature + options: + channels: *iasi_metop-c_channels + obserr_bound_max: [ 3.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 4.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 4.00, 4.00, + 3.50, 2.50, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 0.75, 2.00, + 0.75, 2.00, 2.00, 2.00, 0.75, 0.75, 0.75, 0.75, 2.00, 0.75, + 0.75, 2.00, 0.75, 0.75, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, + 2.00, 2.00, 2.00, 2.00, 2.50, 2.00, 2.50, 2.50, 3.00, 2.50, + 2.50, 2.50, 2.50, 3.50, 2.50, 2.50, 3.00, 3.50, 3.00, 4.00, + 4.00, 0.75, 4.00, 4.00, 4.00, 4.50, 4.50, 4.50, 4.50, 4.50, + 4.00, 4.50, 4.00, 4.00, 4.50, 2.50, 3.00, 2.50, 3.00, 2.50, + 3.00, 2.00, 2.50, 2.50, 3.00, 3.00, 2.50, 3.00, 3.00, 3.00, + 2.50, 2.50, 4.00, 4.50, 4.50, 5.00, 4.00, 4.00, 5.00, 5.00, + 5.00, 5.00, 5.50, 5.50, 4.00, 5.00, 4.00, 4.50, 5.50, 5.50, + 6.00, 4.50, 4.50, 4.00, 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 1.25, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 1.40, 6.00, 1.40, 6.00, 6.00, 1.40, 6.00, + 1.50, 6.00, 6.00, 6.00, 6.00, 1.50, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.50, 4.50, 6.00, + 5.00, 5.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, + 6.00, 6.00, 4.00, 6.00, 6.00, 6.00, 6.00, 4.50, 6.00, 6.00, + 4.50, 6.00, 6.00, 6.00, 6.00, 6.00, 5.00, 6.00, 6.00, 6.00, + 5.00, 6.00, 6.00, 5.00, 6.00, 5.00, 6.00, 6.00, 6.00, 5.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, 6.00, + 6.00, 6.00, 6.00, 6.00, 6.00, 6.00 ] + action: + name: reject +# Surface Type Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + test variables: + - name: ObsFunction/SurfTypeCheckRad + channels: *iasi_metop-c_channels + options: channels: *iasi_metop-c_channels - test variables: - - name: ObsFunction/ChannelUseflagCheckRad + use_flag: *useflag_iasi_metop-c + use_flag_clddet: *clddet_iasi_metop-c + maxvalue: 1.0e-12 + defer to post: true + action: + name: reject +# Useflag Check +- filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *iasi_metop-c_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *iasi_metop-c_channels + options: channels: *iasi_metop-c_channels - options: - channels: *iasi_metop-c_channels -# use passive_bc: true - use_flag: *useflag_iasi_metop-c - minvalue: 1.0e-12 - action: - name: reject + use_flag: *useflag_iasi_metop-c + minvalue: 1.0e-12 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-b.yaml index 1603df38..6664e0a1 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-b.yaml @@ -1,5 +1,5 @@ obs space: - name: mhs_metop-b + name: MHS METOP-B obsdatain: engine: type: H5File @@ -10,18 +10,20 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.mhs_metop-b.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] channels: &mhs_metop-b_channels 1-5 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] Clouds: [Water, Ice, Rain, Snow] Cloud_Fraction: 1.0 - linear obs operator: - Absorbers: [H2O,O3,CO2] - Clouds: [Water] obs options: Sensor_ID: &Sensor_ID mhs_metop-b EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3] + Clouds: [Water] + obs bias: input file: '{{cycle_dir}}/mhs_metop-b.{{background_time}}.satbias.nc4' variational bc: @@ -40,6 +42,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/mhs_metop-b.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/mhs_metop-b.{{window_begin}}.satbias.nc4' + obs filters: - filter: Bounds Check filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml index 72da7705..8a682159 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml @@ -1,5 +1,5 @@ obs space: - name: mhs_metop-c + name: MHS METOP-C obsdatain: engine: type: H5File @@ -10,18 +10,20 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.mhs_metop-c.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] channels: &mhs_metop-c_channels 1-5 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] Clouds: [Water, Ice, Rain, Snow] Cloud_Fraction: 1.0 - linear obs operator: - Absorbers: [H2O,O3,CO2] - Clouds: [Water] obs options: Sensor_ID: &Sensor_ID mhs_metop-c EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3,CO2] + Clouds: [Water] + obs bias: input file: '{{cycle_dir}}/mhs_metop-c.{{background_time}}.satbias.nc4' variational bc: @@ -40,6 +42,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/mhs_metop-c.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/mhs_metop-c.{{window_begin}}.satbias.nc4' + obs filters: - filter: Bounds Check filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml index f2bb3c4a..80827315 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml @@ -1,5 +1,5 @@ obs space: - name: mhs_n19 + name: MHS NOAA-19 obsdatain: engine: type: H5File @@ -10,18 +10,20 @@ obs space: obsfile: '{{cycle_dir}}/{{experiment_id}}.mhs_n19.{{window_begin}}.nc4' simulated variables: [brightnessTemperature] channels: &mhs_n19_channels 1-5 + obs operator: name: CRTM Absorbers: [H2O,O3,CO2] Clouds: [Water, Ice, Rain, Snow] Cloud_Fraction: 1.0 - linear obs operator: - Absorbers: [H2O,O3,CO2] - Clouds: [Water] obs options: Sensor_ID: &Sensor_ID mhs_n19 EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}' + linear obs operator: + Absorbers: [H2O,O3,CO2] + Clouds: [Water] + obs bias: input file: '{{cycle_dir}}/mhs_n19.{{background_time}}.satbias.nc4' variational bc: @@ -40,6 +42,18 @@ obs bias: - name: scan_angle order: 2 - name: scan_angle + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/mhs_n19.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/mhs_n19.{{window_begin}}.satbias.nc4' + obs filters: - filter: Bounds Check filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mls55_aura.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mls55_aura.yaml index 7788ce6f..029377f0 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mls55_aura.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mls55_aura.yaml @@ -1,5 +1,5 @@ obs space: - name: mls55_aura + name: MLS55 AURA obsdatain: engine: type: H5File @@ -9,10 +9,12 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.mls55_aura.{{window_begin}}.nc4' simulated variables: [ozoneProfile] + obs operator: name: VertInterp vertical coordinate: air_pressure observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + obs filters: # range sanity check - filter: Bounds Check diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml index ebdc65af..3a591c74 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml @@ -1,5 +1,5 @@ obs space: - name: omi_aura + name: OMI AURA obsdatain: engine: type: H5File @@ -9,12 +9,14 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.omi_aura.{{window_begin}}.nc4' simulated variables: [ozoneTotal] + obs operator: name: AtmVertInterpLay geovals: [mole_fraction_of_ozone_in_air] coefficients: [0.0078976797] # convert from ppmv to DU (Wargan approved value) nlevels: [1] observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + obs filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml index 15fda3af..17831a00 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml @@ -1,5 +1,5 @@ obs space: - name: ompsnm_npp + name: OMPSNM NPP obsdatain: engine: type: H5File @@ -9,11 +9,13 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.ompsnm_npp.{{window_begin}}.nc4' simulated variables: [ozoneTotal] + obs operator: name: AtmVertInterpLay geovals: [mole_fraction_of_ozone_in_air] coefficients: [0.0078976797] # convert from ppmv to DU (Wargan approved value) nlevels: [1] + obs filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml new file mode 100644 index 00000000..87ddb44e --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml @@ -0,0 +1,276 @@ +obs space: + name: Pilot Balloon + obsdatain: + engine: + type: H5File + obsfile: '{{cycle_dir}}/pibal.{{window_begin}}.nc4' + obsgrouping: + group variables: ["stationIdentification", "releaseTime"] + sort variable: "pressure" + sort order: "descending" + obsdataout: + engine: + type: H5File + obsfile: '{{cycle_dir}}/{{experiment_id}}.pibal.{{window_begin}}.nc4' + simulated variables: [windEastward, windNorthward] + +obs operator: + name: Composite + components: + - name: VertInterp + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + + # Use height vertical coordinate first + vertical coordinate: geopotential_height + observation vertical coordinate group: DerivedVariables + observation vertical coordinate: adjustedHeight + interpolation method: linear + + # Use pressure vertical coordinate backup + vertical coordinate backup: air_pressure + observation vertical coordinate group backup: MetaData + observation vertical coordinate backup: pressure + interpolation method backup: log-linear + + # Hofx scaling + hofx scaling field: SurfaceWindScalingCombined + hofx scaling field group: DerivedVariables + +obs pre filters: + + # Reject all observations that are not Pibal + - filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_not_in: 221 + action: + name: reject + + - filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: ObsType/windNorthward + is_not_in: 221 + action: + name: reject + +obs prior filters: + + # Apply variable changes needed for rescaled height coordinate + # ------------------------------------------------------------ + - filter: Variable Transforms + Transform: AdjustedHeightCoordinate + + # Apply variable changes needed wind scaling + # ------------------------------------------ + - filter: Variable Transforms + Transform: SurfaceWindScalingHeight + - filter: Variable Transforms + Transform: SurfaceWindScalingPressure + + # Combining to use pressure where height is missing + # ------------------------------------------------- + - filter: Variable Transforms + Transform: SurfaceWindScalingCombined + +obs post filters: + +# Assign the initial observation error, based on height/pressure +- filter: Bounds Check + filter variables: + - name: windEastward + - name: windNorthward + minvalue: -135 + maxvalue: 135 + action: + name: assign error + error function: + name: ObsErrorModelStepwiseLinear@ObsFunction + options: + xvar: + name: MetaData/pressure + xvals: [110000, 105000, 100000, 95000, 90000, 85000, 80000, 75000, 70000, 65000, + 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, + 10000, 7500, 5000, 4000, 3000, 2000, 1000, 500, 400, 300, + 200, 100, 0 ] #Pressure (Pa) + errors: [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.6, 1.7, 1.8, + 1.9, 2.0, 2.1, 2.2, 2.2, 2.3, 2.3, 2.4, 2.4, 2.4, + 2.4, 2.4, 2.4, 2.4, 2.5, 2.7, 2.9, 3.1, 3.3, 3.5, + 3.7, 3.9, 4.1] +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: PreUseFlag/windEastward + is_in: 100 + action: + name: reject +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: PreUseFlag/windNorthward + is_in: 100 + action: + name: reject +## a temporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments. +- filter: Perform Action + filter variables: + - name: windEastward + action: + name: assign error + error function: GsiAdjustObsError/windEastward + where: + - variable: + name: GsiAdjustObsError/windEastward + is_defined: + +- filter: Perform Action + filter variables: + - name: windNorthward + action: + name: assign error + error function: GsiAdjustObsError/windNorthward + where: + - variable: + name: GsiAdjustObsError/windNorthward + is_defined: + +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: + name: ObsType/windEastward + is_in: 221 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windEastward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: + name: ObsType/windNorthward + is_in: 221 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windNorthward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + # Gross Check +- filter: Background Check + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 221 ] + cgross: [ 8.0 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windEastward + action: + name: reject +# Gross Check +- filter: Background Check + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 221 ] + cgross: [ 8.0 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windNorthward + action: + name: reject + +- filter: Bounds Check + filter variables: + - name: windEastward + test variables: + - name: ObsErrorData/windEastward + maxvalue: 100.0 + action: + name: reject + defer to post: true + +# assign TempObsErrorData/stationPressure <--- ObsErrorData +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/windEastward + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/windEastward + defer to post: true +# assign TempObsErrorData/stationPressure <--- ObsErrorData +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/windNorthward + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/windNorthward + defer to post: true + +- filter: Bounds Check + filter variables: + - name: windNorthward + test variables: + - name: ObsErrorData/windNorthward + maxvalue: 100.0 + action: + name: reject + defer to post: true + +- filter: BlackList + filter variables: + - name: windEastward + action: + name: inflate error + inflation variable: + name: ObsErrorFactorDuplicateCheck@ObsFunction + options: + use_air_pressure: true + variable: windEastward + where: + - variable: + name: ObsType/windEastward + is_in: 221 + defer to post: true +- filter: BlackList + filter variables: + - name: windNorthward + action: + name: inflate error + inflation variable: + name: ObsErrorFactorDuplicateCheck@ObsFunction + options: + use_air_pressure: true + variable: windNorthward + where: + - variable: + name: ObsType/windNorthward + is_in: 221 + defer to post: true diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml index 1a9517b1..7d6253c9 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml @@ -1,9 +1,5 @@ -obs operator: - name: VertInterp - observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' - apply near surface wind scaling: true obs space: - name: satwind + name: Satellite Winds obsdatain: engine: type: H5File @@ -13,8 +9,20 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.satwind.{{window_begin}}.nc4' simulated variables: [windEastward, windNorthward] + +obs operator: + name: VertInterp + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + hofx scaling field: SurfaceWindScalingPressure + hofx scaling field group: DerivedVariables + obs filters: -# + +# Apply variable changes needed for performing wind scaling +# --------------------------------------------------------- +- filter: Variable Transforms + Transform: SurfaceWindScalingPressure + # Reject all obs with PreQC mark already set above 3 - filter: PreQC maxvalue: 3 @@ -39,15 +47,11 @@ obs filters: action: name: reject -# -# Assign the initial observation error, based on height/pressure -# add back +# Assign the initial observation error, based on height/pressure add back - filter: Perform Action filter variables: - name: windEastward - name: windNorthward -# minvalue: -135 -# maxvalue: 135 action: name: assign error error function: @@ -58,15 +62,14 @@ obs filters: xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] #Pressure (Pa) errors: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] -# #Blacklist Obstypes that aren't used in GSI +# Blacklist Obstypes that aren't used in GSI - filter: BlackList where: - variable: name: ObsType/windEastward is_in: 240, 241, 248, 249, 251, 255, 256, 260 -# -# Assign the initial observation error, based on height/pressure -# kx = 244 + +# Assign the initial observation error, based on height/pressure kx = 244 # reject pressure levels = [110000, 105000, 7500, 5000, 4000, 3000, 2000, 1000, 500, 400, 300, 200, 100, 0] - filter: Perform Action filter variables: @@ -86,8 +89,7 @@ obs filters: name: ObsType/windEastward is_in: 244 - - # Assign the initial observation error, based on height/pressure +# Assign the initial observation error, based on height/pressure - filter: Perform Action filter variables: - name: windEastward @@ -107,7 +109,6 @@ obs filters: name: ObsType/windEastward is_in: 245, 246 - # Assign the initial observation error, based on height/pressure - filter: Perform Action filter variables: @@ -244,7 +245,7 @@ obs filters: - variable: name: MetaData/surfaceQualifier minvalue: 1 -# + - filter: Difference Check filter variables: - name: windEastward @@ -274,8 +275,7 @@ obs filters: is_in: 247 action: name: reject -# -# + # AVHRR (244), MODIS (257,258,259), VIIRS (260), GOES (247) use a LNVD check. - filter: Bounds Check filter variables: @@ -290,9 +290,7 @@ obs filters: is_in: 244, 247, 257-260 action: name: reject -# -#wgu - filter: BlackList filter variables: - name: windEastward @@ -327,7 +325,6 @@ obs filters: adjusted_error_name: GsiAdjustObsError geovar_sfc_geomz: surface_geometric_height -#wgu # Gross Check - filter: Background Check filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml index ff4863d2..db513468 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml @@ -1,5 +1,5 @@ obs space: - name: Scatwind + name: Scatterometer Winds obsdatain: engine: type: H5File @@ -9,12 +9,32 @@ obs space: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.scatwind.{{window_begin}}.nc4' simulated variables: [windEastward, windNorthward] + obs operator: + name: VertInterp observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' - apply near surface wind scaling: true + + # Use height vertical coordinate first + vertical coordinate: geopotential_height + observation vertical coordinate group: DerivedVariables + observation vertical coordinate: adjustedHeight + interpolation method: linear + hofx scaling field: SurfaceWindScalingHeight + hofx scaling field group: DerivedVariables obs filters: + +# Apply variable changes needed for rescaled height coordinate +# ------------------------------------------------------------ +- filter: Variable Transforms + Transform: AdjustedHeightCoordinate + +# Apply variable changes needed wind scaling +# ------------------------------------------ +- filter: Variable Transforms + Transform: SurfaceWindScalingHeight + # # Reject all obs with PreQC mark already set above 3 #- filter: PreQC diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml index c11707d1..ba966a96 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml @@ -1,10 +1,5 @@ -obs operator: - name: SfcPCorrected - da_psfc_scheme: UKMO -# geovar_geomz: geopotential_height -# geovar_sfc_geomz: surface_geopotential_height obs space: - name: sfc + name: Surface Land Stations obsdatain: engine: type: H5File @@ -13,32 +8,93 @@ obs space: engine: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.sfc.{{window_begin}}.nc4' - simulated variables: [stationPressure] #, airTemperature] + simulated variables: [windEastward, windNorthward, virtualTemperature, airTemperature, + specificHumidity, stationPressure] + +obs operator: + name: Composite + components: + + # Wind fields are handled using wind reduction factor applied to the lowest level. + - name: VertInterp + variables: + - name: windEastward + - name: windNorthward + # Use height vertical coordinate first + vertical coordinate: geopotential_height + observation vertical coordinate group: DerivedVariables + observation vertical coordinate: adjustedHeight + interpolation method: linear + hofx scaling field: SurfaceWindScalingHeight + hofx scaling field group: DerivedVariables + + # Temperatures use vertical interpolation + - name: VertInterp + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + variables: + - name: airTemperature + - name: virtualTemperature + + # Surface pressure is handled using the correction scheme + - name: SfcPCorrected + variables: + - name: stationPressure + da_psfc_scheme: GSI + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height + + # Specific humidity is using the lowest model level (identity) + - name: Identity + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + variables: + - name: specificHumidity + obs filters: + +# Apply variable changes needed for rescaled height coordinate +# ------------------------------------------------------------ +- filter: Variable Transforms + Transform: AdjustedHeightCoordinate + +# Apply variable changes needed wind scaling +# ------------------------------------------ +- filter: Variable Transforms + Transform: SurfaceWindScalingHeight + +# ------------------ +# stationPressure (surface pressure) # Observation Range Sanity Check - filter: Bounds Check filter variables: - name: stationPressure - minvalue: 37499 - maxvalue: 106999 - action: - name: reject -# Reject all obs with PreQC mark already set above 3 -- filter: PreQC - maxvalue: 3 + minvalue: 49999 action: name: reject -# Assign obsError. -- filter: BlackList +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action filter variables: - name: stationPressure + where: + - variable: PreUseFlag/stationPressure + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 action: - name: assign error - error parameter: 120 # 120 Pa (1.2mb) -# -- filter: BlackList + name: reject +# PrepBUFR check to be supplemented later +- filter: RejectList + where: + - variable: + name: PreQC/stationPressure + is_in: 4-15 +# error assignments +# Original error interpolated from the error table +- filter: Perform Action filter variables: - name: stationPressure + where: + - variable: ObsType/stationPressure + is_in: [181] action: name: assign error error function: @@ -46,16 +102,14 @@ obs filters: options: xvar: name: ObsValue/stationPressure - xvals: [80000, 75000] - errors: [110, 120] - where: - - variable: - name: ObsType/stationPressure - is_in: 181 # Type is SYNOP -# -- filter: BlackList + xvals: [70000, 65000, 60000, 55000] + errors: [100, 120, 120, 1.0e+11] +- filter: Perform Action filter variables: - name: stationPressure + where: + - variable: ObsType/stationPressure + is_in: [187] action: name: assign error error function: @@ -63,15 +117,18 @@ obs filters: options: xvar: name: ObsValue/stationPressure - xvals: [85000, 80000] - errors: [120, 140] + xvals: [80000, 75000, 70000, 65000] + errors: [100, 130, 160, 1.0e+11] +# Ajusted error after reading prep_bufr +- filter: Perform Action + action: + name: inflate error + inflation factor: 1.2 where: - - variable: - name: ObsType/stationPressure - is_in: 187 # Type is METAR -# -# Inflate ObsError as it is done with GSI -- filter: BlackList + - variable: PreQC/stationPressure + is_in: [3] +# error inflation based on Ps correction +- filter: Perform Action filter variables: - name: stationPressure action: @@ -79,46 +136,176 @@ obs filters: inflation variable: name: ObsFunction/ObsErrorFactorSfcPressure options: -# original_obserr: ObsError - error_min: 100 # 1 mb - error_max: 300 # 3 mb - geovar_sfc_geomz: surface_geopotential_height -# -# If the ObsError is inflated too much, reject the obs -- filter: Bounds Check + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height +# assign TempObsErrorData/stationPressure <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/stationPressure + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/stationPressure + defer to post: true +# set ObsErrorData 100 Pa if it < 100 Pa. +- filter: Perform Action filter variables: - name: stationPressure action: - name: reject - maxvalue: 3.6 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/stationPressure # After inflation step - denominator: - name: ObsError/stationPressure + name: assign error + error parameter: 100 + where: + - variable: + name: TempObsErrorData/stationPressure + maxvalue: 100 + - variable: + name: TempObsErrorData/stationPressure + is_defined: defer to post: true +# set ObsErrorData 300 Pa if it > 300 Pa. +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error parameter: 300 where: - variable: - name: ObsType/stationPressure - is_in: 181 # Type is SYNOP -# -- filter: Bounds Check + name: TempObsErrorData/stationPressure + minvalue: 300 + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true + +# Background check +# background check for obstype 187: +- filter: Background Check + filter variables: + - name: stationPressure + threshold: 4.0 + action: + name: reject + where: + - variable: PreQC/stationPressure + is_not_in: [3] + - variable: ObsType/stationPressure + is_in: 187 + defer to post: true +# threshold 4.0 * 0.7 = 2.8 if PreQC=3 +- filter: Background Check + filter variables: + - name: stationPressure + threshold: 2.8 + action: + name: reject + where: + - variable: PreQC/stationPressure + is_in: [3] + - variable: ObsType/stationPressure + is_in: 187 + defer to post: true +# background check for obstype 181: +# threshold 3.6 if PreQC /= 3 +- filter: Background Check filter variables: - name: stationPressure + threshold: 3.6 action: name: reject - maxvalue: 4.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/stationPressure # After inflation step - denominator: - name: ObsError/stationPressure + where: + - variable: PreQC/stationPressure + is_not_in: [3] + - variable: ObsType/stationPressure + is_in: [181] defer to post: true +# threshold 3.6 * 0.7 = 2.52 if PreQC=3 +- filter: Background Check + filter variables: + - name: stationPressure + threshold: 2.52 + action: + name: reject + where: + - variable: PreQC/stationPressure + is_in: [3] + - variable: ObsType/stationPressure + is_in: [181] + defer to post: true +# Re-assign error ObsErrorData/stationPressure <--- TempObsErrorData/stationPressure +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error function: TempObsErrorData/stationPressure where: - variable: - name: ObsType/stationPressure - is_in: 187 # Type is METAR + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# Duplicate factor +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: false + variable: stationPressure + defer to post: true + +## specificHumidity. Both types 181 & 187 are rejected. +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity + is_in: 181,187 + action: + name: reject + +## airTemperature. Both types 181 & 187 are rejected. +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: ObsType/airTemperature + is_in: 181,187 + action: + name: reject + +## virtualTemperature. Both types 181 & 187 are rejected. +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: ObsType/virtualTemperature + is_in: 181,187 + action: + name: reject + +## windEastward. Both types 281 & 287 are rejected. +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_in: 281,287 + action: + name: reject + +## windNorthward. Both types 281 & 287 are rejected. +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: ObsType/windNorthward + is_in: 281,287 + action: + name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml index 9bd24d81..baff448a 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml @@ -1,8 +1,5 @@ -obs operator: - name: SfcPCorrected - da_psfc_scheme: UKMO obs space: - name: sfcship + name: Surface Marine Stations obsdatain: engine: type: H5File @@ -11,68 +8,123 @@ obs space: engine: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.sfcship.{{window_begin}}.nc4' - simulated variables: [stationPressure] #, airTemperature, specificHumidity] + simulated variables: [windEastward, windNorthward, virtualTemperature, airTemperature, + specificHumidity, stationPressure] + +obs operator: + name: Composite + components: + + - name: VertInterp + variables: + - name: windEastward + - name: windNorthward + # Use height vertical coordinate first + vertical coordinate: geopotential_height + observation vertical coordinate group: DerivedVariables + observation vertical coordinate: adjustedHeight + interpolation method: linear + hofx scaling field: SurfaceWindScalingHeight + hofx scaling field group: DerivedVariables + + - name: VertInterp + observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' + variables: + - name: airTemperature + - name: virtualTemperature + + # Surface pressure is handled using the correction scheme + - name: SfcPCorrected + variables: + - name: stationPressure + da_psfc_scheme: GSI + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height + + # Specific humidity is using the lowest model level (identity) + - name: Identity + variables: + - name: specificHumidity + obs filters: -# Observation Range Sanity Check -#- filter: Bounds Check -# filter variables: -# - name: airTemperature -# minvalue: 195 -# maxvalue: 327 -# action: -# name: reject -# -- filter: Bounds Check + +# Apply variable changes needed for rescaled height coordinate +# ------------------------------------------------------------ +- filter: Variable Transforms + Transform: AdjustedHeightCoordinate + +# Apply variable changes needed wind scaling +# ------------------------------------------ +- filter: Variable Transforms + Transform: SurfaceWindScalingHeight + +# ------------------ +# stationPressure (surface pressure) +# ------------------ +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action filter variables: - name: stationPressure - minvalue: 37499 - maxvalue: 106999 - action: - name: reject -# -#- filter: Bounds Check -# filter variables: -# - name: specificHumidity -# minvalue: 1.0E-7 -# maxvalue: 0.034999999 -# action: -# name: reject -# Reject all obs with PreQC mark already set above 3 -- filter: PreQC - maxvalue: 3 - action: - name: reject -# Assign obsError, first temperature -#- filter: BlackList -# filter variables: -# - name: airTemperature -# action: -# name: assign error -# error parameter: 2.5 -# Assign obsError, next moisture -#- filter: BlackList -# filter variables: -# - name: specificHumidity -# action: -# name: assign error -# error function: -# name: ObsFunction/ObsErrorModelStepwiseLinear -# options: -# xvar: -# name: ObsValue/stationPressure -# xvals: [110000, 10] -# errors: [.2, .2] -# scale_factor_var: specific_humidity@ObsValue -# Assign obsError, last surface pressure -- filter: BlackList + where: + - variable: PreUseFlag/stationPressure + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 + action: + name: reject +# PrepBUFR check to be supplemented later +- filter: RejectList + where: + - variable: + name: PreQC/stationPressure + is_in: 4-15 +# error assignments +# Original error interpolated from the error table +- filter: Perform Action filter variables: - name: stationPressure + where: + - variable: ObsType/stationPressure + is_in: [180] action: name: assign error - error parameter: 130 # 130 Pa (1.3mb) -# -# Inflate ObsError as it is done with GSI -- filter: BlackList + error function: + name: ObsFunction/ObsErrorModelStepwiseLinear + options: + xvar: + name: ObsValue/stationPressure + xvals: [ 80000, 75000, 70000, 65000, 60000, 55000] + errors: [100, 100, 110, 120, 120, 1.0e+11] +- filter: Perform Action + filter variables: + - name: stationPressure + where: + - variable: ObsType/stationPressure + is_in: [183] + action: + name: assign error + error parameter: 1.0e+11 +# GSI says this adjustment is for buoys type(180) & subtype (0) in setupps.f90 +# Note, types of drifting buoys are re-set to 199/299 in read_prepbufr.f90 when id_drifter=TRUE. +- filter: Perform Action + action: + name: inflate error + inflation factor: 0.7 + where: + - variable: ObsType/stationPressure + is_in: [180] + - variable: ObsSubType/stationPressure + is_in: [0] +# Ajusted error after reading prep_bufr +- filter: Perform Action + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: PreQC/stationPressure + is_in: [3] +# error inflation based on Ps correction +- filter: Perform Action filter variables: - name: stationPressure action: @@ -80,54 +132,815 @@ obs filters: inflation variable: name: ObsFunction/ObsErrorFactorSfcPressure options: - error_min: 100 # 1 mb - error_max: 300 # 3 mb - geovar_sfc_geomz: surface_geopotential_height -# + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height +# assign TempObsErrorData/stationPressure <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/stationPressure + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/stationPressure + defer to post: true +# set ObsErrorData 100 Pa if it < 100 Pa. +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error parameter: 100 + where: + - variable: + name: TempObsErrorData/stationPressure + maxvalue: 100 + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# set ObsErrorData 300 Pa if it > 300 Pa. +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error parameter: 300 + where: + - variable: + name: TempObsErrorData/stationPressure + minvalue: 300 + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# Background check +# background check for obstype 180,183: +# threshold 4.0 if PreQC /= 3 - filter: Background Check filter variables: - name: stationPressure - absolute threshold: 500.0 # 5 mb - action: - name: inflate error - inflation factor: 3.0 - defer to post: true -# -#- filter: Background Check -# filter variables: -# - name: airTemperature -# absolute threshold: 4.0 -# action: -# name: inflate error -# inflation factor: 3.0 -# defer to post: true -# -#- filter: Bounds Check -# filter variables: -# - name: airTemperature -# action: -# name: reject -# maxvalue: 4.5 -# test variables: -# - name: ObsFunction/ObsErrorFactorQuotient -# options: -# numerator: -# name: ObsErrorData/airTemperature # After inflation step -# denominator: -# name: ObsError/airTemperature -# defer to post: true -# -- filter: Bounds Check + threshold: 4.0 + action: + name: reject + where: + - variable: PreQC/stationPressure + is_not_in: [3] + - variable: ObsType/stationPressure + is_in: 180,183 + defer to post: true +# threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: stationPressure + threshold: 2.8 + action: + name: reject + where: + - variable: PreQC/stationPressure + is_in: [3] + - variable: ObsType/stationPressure + is_in: 180,183 + defer to post: true +# Re-assign error ObsErrorData/stationPressure <--- TempObsErrorData/stationPressure +- filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error function: TempObsErrorData/stationPressure + where: + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# # Duplicate factor +- filter: Perform Action filter variables: - name: stationPressure + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: false + variable: stationPressure + defer to post: true + +# ------------------ +# airTemperature +# ------------------ +# Error assignments +## All airTemperature data with ObsType=183 are passive in GSI. +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: ObsType/airTemperature + is_in: [183] + action: + name: assign error + error parameter: 1.0e+11 +## Reject airTemperature with ObsType=183 +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: ObsType/airTemperature + is_in: [183] + action: + name: reject +## airTemperature data with ObsType=180 +# initial error +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: ObsType/airTemperature + is_in: [180] + action: + name: assign error + error function: + name: ObsFunction/ObsErrorModelStepwiseLinear + options: + xvar: + name: MetaData/pressure + xvals: [ 80000,75000, 70000, 65000] + errors: [ 1.75, 1.95, 2.25, 1.0] +# Ajusted error after initial assignment +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorConventional + options: + test QCflag: PreQC + test QCthreshold: 3 + inflate variables: [airTemperature] + pressure: MetaData/pressure + distance threshold: -1. + defer to post: true +# inflate error, x1.2 for PreQC = 3,7 +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: PreQC/airTemperature + is_in: [3 7] + defer to post: true +# inflate error, x1.2 at pressure < 10000 Pa. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: MetaData/pressure + minvalue: 0 + maxvalue: 9999 + defer to post: true +## a tempporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments and inflation. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error function: GsiAdjustObsError/airTemperature + where: + - variable: + name: GsiAdjustObsError/airTemperature + is_defined: + defer to post: true +# error inflation based on pressure check +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: airTemperature + inflation factor: 8.0 + geovar_sfc_geomz: surface_geometric_height + defer to post: true +# assign TempObsErrorData/airTemperature <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/airTemperature + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/airTemperature + defer to post: true +# set ObsErrorData 1.3 K if it < 1.3 K +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error parameter: 1.3 + where: + - variable: + name: TempObsErrorData/airTemperature + maxvalue: 1.3 + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true +# set ObsErrorData 5.6 K if it > 5.6 K. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error parameter: 5.6 + where: + - variable: + name: TempObsErrorData/airTemperature + minvalue: 5.6 + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true + +# Screen data by PreUseFlag +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: PreUseFlag/airTemperature + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 + action: + name: reject +# Background check +# ratio threshold 7.0 if PreQC /= 3 +- filter: Background Check + filter variables: + - name: airTemperature + threshold: 7.0 + action: + name: reject + where: + - variable: PreQC/airTemperature + is_not_in: [3] + defer to post: true +# ratio threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: airTemperature + threshold: 4.9 + action: + name: reject + where: + - variable: PreQC/airTemperature + is_in: [3] + defer to post: true +# Re-assign error ObsErrorData/aireTemperature <--- TempObsErrorData/aireTemperature +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error function: TempObsErrorData/airTemperature + where: + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true +## Duplicate factor +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: airTemperature + defer to post: true + +# ------------------ +# virtualTemperature +# ------------------ +## All virtualTemperature data with ObsType=183 are passive in GSI. +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: ObsType/virtualTemperature + is_in: [183] + action: + name: assign error + error parameter: 1.0e+11 +## Reject virtualTemperature with ObsType=183 +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: ObsType/virtualTemperature + is_in: [183] + action: + name: reject +## virtualTemperature data with ObsType=180 +# Error assignments +# initial error +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: ObsType/virtualTemperature + is_in: [180] + action: + name: assign error + error function: + name: ObsFunction/ObsErrorModelStepwiseLinear + options: + xvar: + name: MetaData/pressure + xvals: [ 80000,75000, 70000, 65000] + errors: [ 1.75, 1.95, 2.25, 1.0] +# Ajusted error after initial assignment +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorConventional + options: + test QCflag: PreQC + test QCthreshold: 3 + inflate variables: [virtualTemperature] + pressure: MetaData/pressure + distance threshold: -1. + defer to post: true +# inflate error, x1.2 for PreQC = 3,7 +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: PreQC/virtualTemperature + is_in: [3 7] + defer to post: true +# inflate error, x1.2 at pressure < 10000 Pa. +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: MetaData/pressure + minvalue: 0 + maxvalue: 9999 + defer to post: true +## a tempporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments and inflation. +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error function: GsiAdjustObsError/virtualTemperature + where: + - variable: + name: GsiAdjustObsError/virtualTemperature + is_defined: + defer to post: true +# error inflation based on pressure check +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: virtualTemperature + inflation factor: 8.0 + geovar_sfc_geomz: surface_geometric_height + defer to post: true + +# assign TempObsErrorData/virtualTemperature <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/virtualTemperature + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/virtualTemperature + defer to post: true +# set ObsErrorData 1.3 K if it < 1.3 K +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error parameter: 1.3 + where: + - variable: + name: TempObsErrorData/virtualTemperature + maxvalue: 1.3 + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: + defer to post: true +# set ObsErrorData 5.6 K if it > 5.6 K. +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error parameter: 5.6 + where: + - variable: + name: TempObsErrorData/virtualTemperature + minvalue: 5.6 + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: + defer to post: true +# Screen data by PreUseFlag +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: PreUseFlag/virtualTemperature + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 + action: + name: reject +# Background check +# ratio threshold 7.0 if PreQC /= 3 +- filter: Background Check + filter variables: + - name: virtualTemperature + threshold: 7.0 + action: + name: reject + where: + - variable: PreQC/virtualTemperature + is_not_in: [3] + defer to post: true +# ratio threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: virtualTemperature + threshold: 4.9 + action: + name: reject + where: + - variable: PreQC/virtualTemperature + is_in: [3] + defer to post: true +# Re-assign error ObsErrorData/aireTemperature <--- TempObsErrorData/aireTemperature +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error function: TempObsErrorData/virtualTemperature + where: + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: + defer to post: true +## Duplicate factor +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: virtualTemperature + defer to post: true + + +# ------------------ +# specificHumidity +# ------------------ +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: PreUseFlag/specificHumidity + # PreUseFlag should =< ijter (1,2,or 3) in GSI + minvalue: 1 + action: + name: reject + +# All specificHumidity data with ObsType=183 are passive in GSI. +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity + is_in: [183] + action: + name: assign error + error parameter: 1.0e+11 + +# Reject specificHumidity with ObsType=183 +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity + is_in: [183] + action: + name: reject + +# Ships data (kx=180) +# Modify error +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity + is_in: [180] + action: + name: assign error + error function: + name: ObsFunction/ObsErrorSatSpecHumidity + options: + variable: specificHumidity + input_error_name: GsiInputObsError + +# Pressure check +- filter: BlackList + filter variables: + - name: specificHumidity + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: specificHumidity + inflation factor: 8 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + +# Background check +# ratio threshold 8.0 PreQC /= 3 +- filter: Background Check + filter variables: + - name: specificHumidity + threshold: 8.0 + action: + name: reject + where: + - variable: PreQC/specificHumidity + is_not_in: [3] + defer to post: true +# #ratio threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: specificHumidity + threshold: 5.6 + action: + name: reject + where: + - variable: PreQC/specificHumidity + is_in: [3] + defer to post: true + +# Duplicate factor +- filter: BlackList + filter variables: + - name: specificHumidity + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: specificHumidity + defer to post: true + +# ------------------ +# Winds +# ------------------ + +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_in: [284] + action: + name: assign error + error parameter: 1.0e+11 + +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_in: [284] + action: + name: reject + +- filter: Perform Action #280 + filter variables: + - name: windEastward + - name: windNorthward + where: + - variable: ObsType/windEastward + is_in: [280] + action: + name: assign error + error parameter: 2.5 + +- filter: Perform Action #282 + filter variables: + - name: windEastward + - name: windNorthward + where: + - variable: ObsType/windEastward + is_in: [282] + action: + name: assign error + error parameter: 2.2 + +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: PreUseFlag/windEastward + # PreUseFlag should =< ijter (1,2,or 3) in GSI + minvalue: 1 + action: + name: reject + +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: PreUseFlag/windNorthward + # PreUseFlag should =< ijter (1,2,or 3) in GSI + minvalue: 1 + action: + name: reject + +# Pressure check +- filter: BlackList + filter variables: + - name: windEastward + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windEastward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + +# Pressure check +- filter: BlackList + filter variables: + - name: windNorthward + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windNorthward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + +# Background check +# ratio threshold 6.0 if PreQC /= 3 +- filter: Background Check + filter variables: + - name: windEastward + threshold: 6.0 + action: + name: reject + where: + - variable: PreQC/windEastward + is_not_in: [3] + defer to post: true +# ratio threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: windEastward + threshold: 4.2 + action: + name: reject + where: + - variable: PreQC/windEastward + is_in: [3] + defer to post: true + +# Background check +# ratio threshold 6.0 if PreQC /= 3 +- filter: Background Check + filter variables: + - name: windNorthward + threshold: 6.0 + action: + name: reject + where: + - variable: PreQC/windNorthward + is_not_in: [3] + defer to post: true +# ratio threshold * 0.7 if PreQC=3 +- filter: Background Check + filter variables: + - name: windNorthward + threshold: 4.2 action: name: reject - maxvalue: 4.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient + where: + - variable: PreQC/windNorthward + is_in: [3] + defer to post: true + +#wgu +# Gross Check +- filter: Background Check + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + satwndtype: [ 280, 282, 284 ] + error_min: [ 1.4, 1.4, 1.4 ] + error_max: [ 6.1, 6.1, 6.1 ] + cgross: [ 6.0, 6.0, 6.0 ] + wndtype: [ 280, 282, 284 ] + variable: windEastward + action: + name: reject + defer to post: true + +#wgu +# Gross Check +- filter: Background Check + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck options: - numerator: - name: ObsErrorData/stationPressure # After inflation step - denominator: - name: ObsError/stationPressure + satwndtype: [ 280, 282, 284 ] + error_min: [ 1.4, 1.4, 1.4 ] + error_max: [ 6.1, 6.1, 6.1 ] + cgross: [ 6.0, 6.0, 6.0 ] + wndtype: [ 280, 282, 284 ] + variable: windNorthward + action: + name: reject + defer to post: true + +# Duplicate factor +- filter: BlackList + filter variables: + - name: windEastward + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: windEastward + defer to post: true + +# Duplicate factor +- filter: BlackList + filter variables: + - name: windNorthward + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: windNorthward defer to post: true + diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml index f957a529..f4008167 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml @@ -1,5 +1,5 @@ obs space: - name: sondes + name: Radiosondes obsdatain: engine: type: H5File @@ -12,141 +12,261 @@ obs space: engine: type: H5File obsfile: '{{cycle_dir}}/{{experiment_id}}.sondes.{{window_begin}}.nc4' - simulated variables: [airTemperature, specificHumidity, windEastward, windNorthward, stationPressure] + simulated variables: [windEastward, windNorthward, virtualTemperature, airTemperature, + specificHumidity, stationPressure] + obs operator: name: Composite components: - - name: VertInterp - observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' - variables: - - name: airTemperature - - name: specificHumidity - - name: windEastward - - name: windNorthward - - name: SfcPCorrected - variables: - - name: stationPressure - da_psfc_scheme: UKMO -# geovar_geomz: geopotential_height -# geovar_sfc_geomz: surface_geopotential_height + + - name: VertInterp + variables: + - name: windEastward + - name: windNorthward + + # Hofx scaling + hofx scaling field: SurfaceWindScalingPressure + hofx scaling field group: DerivedVariables + + - name: VertInterp + variables: + - name: airTemperature + - name: virtualTemperature + - name: specificHumidity + + - name: SfcPCorrected + variables: + - name: stationPressure + da_psfc_scheme: GSI + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height + obs filters: -# Reject all obs with PreQC mark already set above 3 -- filter: PreQC - maxvalue: 3 + +# Apply variable changes needed for performing wind scaling +# --------------------------------------------------------- +- filter: Variable Transforms + Transform: SurfaceWindScalingPressure + +## Surface pressure +## ---------------- +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action + filter variables: + - name: stationPressure + where: + - variable: PreUseFlag/stationPressure + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 action: name: reject -# -# Observation Range Sanity Check: temperature, surface_pressure, moisture, winds -- filter: Bounds Check +# PrepBUFR check to be supplemented later +- filter: RejectList + where: + - variable: + name: PreQC/stationPressure + is_in: 4-15 +# Error assignments +# Original error interpolated from the error table +- filter: Perform Action filter variables: - - name: airTemperature - minvalue: 185 - maxvalue: 327 + - name: stationPressure action: - name: reject -# -- filter: Bounds Check + name: assign error + error function: + name: ObsFunction/ObsErrorModelStepwiseLinear + options: + xvar: + name: ObsValue/stationPressure + xvals: [60000, 55000] + errors: [100, 1.0e+11] +# Ajusted error after reading prep_bufr +- filter: Perform Action filter variables: - name: stationPressure - minvalue: 37499 - maxvalue: 106999 action: - name: reject -# -- filter: Bounds Check + name: inflate error + inflation factor: 1.2 + where: + - variable: PreQC/stationPressure + is_in: [3] +# error inflation based on Ps correction +- filter: Perform Action filter variables: - - name: specificHumidity - minvalue: 1.0E-8 - maxvalue: 0.034999999 + - name: stationPressure action: - name: reject -# -- filter: Bounds Check + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSfcPressure + options: + geovar_geomz: geopotential_height + geovar_sfc_geomz: surface_geometric_height + station_altitude: height + +# Note: Obs Erorr should between [min ~ max] for gross error checks. +# However, duplicate factors are applied to those obs erros which are not reset between [min~max]. +# assign TempObsErrorData/stationPressure <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/stationPressure + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/stationPressure + defer to post: true +# set ObsErrorData 100 Pa if it < 100 Pa. +- filter: Perform Action filter variables: - - name: windEastward - - name: windNorthward - minvalue: -135 - maxvalue: 135 + - name: stationPressure action: - name: reject -- filter: Bounds Check + name: assign error + error parameter: 100 + where: + - variable: + name: TempObsErrorData/stationPressure + maxvalue: 100 + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# set ObsErrorData 300 Pa if it > 300 Pa. +- filter: Perform Action filter variables: - - name: windEastward - - name: windNorthward - test variables: - - name: ObsFunction/Velocity - maxvalue: 135.0 + - name: stationPressure + action: + name: assign error + error parameter: 300 + where: + - variable: + name: TempObsErrorData/stationPressure + minvalue: 300 + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true + +# Background check +- filter: Background Check + filter variables: + - name: stationPressure + threshold: 4.0 action: name: reject -# -# Reject when difference of wind direction is more than 50 degrees. -- filter: Bounds Check + where: + - variable: PreQC/stationPressure + is_not_in: [3] + defer to post: true +# threshold * 0.7 if PreQC=3 +- filter: Background Check filter variables: - - name: windEastward - - name: windNorthward - test variables: - - name: ObsFunction/WindDirAngleDiff - maxvalue: 50.0 + - name: stationPressure + threshold: 2.8 action: name: reject -# -# Assign the initial observation error, based on height/pressure + where: + - variable: PreQC/stationPressure + is_in: [3] + defer to post: true +# Re-assign error ObsErrorData/stationPressure <--- TempObsErrorData/stationPressure +# after gross error check. - filter: Perform Action filter variables: - - name: airTemperature + - name: stationPressure action: name: assign error - error function: - name: ObsFunction/ObsErrorModelStepwiseLinear - options: - xvar: - name: MetaData/pressure - xvals: [100000, 95000, 90000, 85000, 35000, 30000, 25000, 20000, 15000, 10000, 7500, 5000, 4000, 3000, 2000, 1000] - errors: [1.2, 1.1, 0.9, 0.8, 0.8, 0.9, 1.2, 1.2, 1.0, 0.8, 0.8, 0.9, 0.95, 1.0, 1.25, 1.5] -# + error function: TempObsErrorData/stationPressure + where: + - variable: + name: TempObsErrorData/stationPressure + is_defined: + defer to post: true +# Duplicate factor - filter: Perform Action filter variables: - name: stationPressure + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: false + variable: stationPressure + defer to post: true + +# Specific humidity +# ----------------- +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: PreUseFlag/specificHumidity + # PreUseFlag should =< ijter (1,2,or 3) in GSI + minvalue: 1 + action: + name: reject + +- filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity action: name: assign error error function: - name: ObsFunction/ObsErrorModelStepwiseLinear + name: ObsFunction/ObsErrorSatSpecHumidity options: - xvar: - name: ObsValue/stationPressure - xvals: [80000, 75000] - errors: [110, 120] # 1.1 mb below 800 mb and 1.2 mb agove 750 mb -# -- filter: Perform Action + variable: specificHumidity + input_error_name: GsiInputObsError + +# Pressure check +- filter: BlackList filter variables: - - name: stationPressure + - name: specificHumidity action: name: inflate error inflation variable: - name: ObsFunction/ObsErrorFactorSfcPressure + name: ObsErrorFactorPressureCheck@ObsFunction + options: + variable: specificHumidity + inflation factor: 8.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + defer to post: true +# assign TempObsErrorData/stationPressure <--- ObsErrorData +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/specificHumidity + type: float + function: + name: ObsFunction/Arithmetic options: - error_min: 100 # 1 mb - error_max: 300 # 3 mb - geovar_sfc_geomz: surface_geopotential_height -# + variables: + - name: ObsErrorData/specificHumidity + defer to post: true + +# Duplicate factor - filter: Perform Action filter variables: - name: specificHumidity action: - name: assign error - error function: - name: ObsFunction/ObsErrorModelStepwiseLinear + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck options: - xvar: - name: MetaData/pressure - xvals: [25000, 20000, 10] - errors: [0.2, 0.4, 0.8] # 20% RH up to 250 mb, then increased rapidly above - scale_factor_var: specific_humidity@ObsValue -# + use_air_pressure: true + variable: specificHumidity + defer to post: true + +# Air temperature +# --------------- +# Error assignments +# initial error - filter: Perform Action filter variables: - - name: windEastward - - name: windNorthward + - name: airTemperature action: name: assign error error function: @@ -154,147 +274,555 @@ obs filters: options: xvar: name: MetaData/pressure - xvals: [100000, 95000, 80000, 65000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 10000] #Pressure (Pa) - errors: [1.4, 1.5, 1.6, 1.8, 1.9, 2.0, 2.1, 2.3, 2.6, 2.8, 3.0, 3.2, 2.7, 2.4, 2.1] -# -# Inflate obserror when multiple obs exist inside vertical model layers. + xvals: [ 105000, 100000, 95000, 90000, 85000, 70000, 65000, 60000, + 40000, 35000, 30000, 25000, 20000, 5000, 4000, 3000, 2000, 1000] + errors: [1.3, 1.1, 0.9, 0.7, 0.6, 0.6, 0.55, 0.5, + 0.5, 0.55, 0.65, 1.1, 1.2, 1.2, 1.4, 1.6, 1.85, 2.0] +# Ajusted error after initial assignment - filter: Perform Action filter variables: - - name: specificHumidity + - name: airTemperature action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorConventional options: test QCflag: PreQC - inflate variables: [specific_humidity] + test QCthreshold: 3 + inflate variables: [airTemperature] + pressure: MetaData/pressure + distance threshold: -1. + defer to post: true +# inflate error, x1.2 for PreQC = 3,7 +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: PreQC/airTemperature + is_in: [3 7] + defer to post: true +# inflate error, x1.2 at pressure < 10000 Pa. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: MetaData/pressure + minvalue: 0 + maxvalue: 9999 + defer to post: true +## a tempporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments and inflation. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error function: GsiAdjustObsError/airTemperature + where: + - variable: + name: GsiAdjustObsError/airTemperature + is_defined: defer to post: true +## error inflation based on pressure check - filter: Perform Action filter variables: - name: airTemperature action: name: inflate error inflation variable: - name: ObsFunction/ObsErrorFactorConventional + name: ObsFunction/ObsErrorFactorPressureCheck options: - test QCflag: PreQC - inflate variables: [air_temperature] + variable: airTemperature + inflation factor: 8.0 + geovar_sfc_geomz: surface_geometric_height + defer to post: true +# assign TempObsErrorData/airTemperature <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/airTemperature + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/airTemperature defer to post: true +# set ObsErrorData 1.3 K if it < 1.3 K - filter: Perform Action filter variables: - - name: windEastward + - name: airTemperature + action: + name: assign error + error parameter: 1.3 + where: + - variable: + name: TempObsErrorData/airTemperature + maxvalue: 1.3 + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true +# set ObsErrorData 5.6 K if it > 5.6 K. +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error parameter: 5.6 + where: + - variable: + name: TempObsErrorData/airTemperature + minvalue: 5.6 + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true +# Screen data by PreUseFlag +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: PreUseFlag/airTemperature + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 + action: + name: reject +# Background check +# ratio threshold 8.0 if PreQC /= 3 +- filter: Background Check + filter variables: + - name: airTemperature + threshold: 8.0 + action: + name: reject + where: + - variable: PreQC/airTemperature + is_not_in: [3] + defer to post: true +# ratio threshold 8.0 * 0.7 = 5.6 if PreQC = 3 +- filter: Background Check + filter variables: + - name: airTemperature + threshold: 5.6 + action: + name: reject + where: + - variable: PreQC/airTemperature + is_in: [3] + defer to post: true +# Re-assign error ObsErrorData/aireTemperature <--- TempObsErrorData/aireTemperature +- filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error function: TempObsErrorData/airTemperature + where: + - variable: + name: TempObsErrorData/airTemperature + is_defined: + defer to post: true +## Duplicate factor +- filter: Perform Action + filter variables: + - name: airTemperature action: name: inflate error inflation variable: - name: ObsFunction/ObsErrorFactorConventional + name: ObsFunction/ObsErrorFactorDuplicateCheck options: - test QCflag: PreQC - inflate variables: [eastward_wind] + use_air_pressure: true + variable: airTemperature defer to post: true -# + +# Virtual Temperature +# ------------------- +# Error assignments +# initial error - filter: Perform Action filter variables: - - name: windNorthward + - name: virtualTemperature + action: + name: assign error + error function: + name: ObsFunction/ObsErrorModelStepwiseLinear + options: + xvar: + name: MetaData/pressure + xvals: [ 105000, 100000, 95000, 90000, 85000, 70000, 65000, 60000, + 40000, 35000, 30000, 25000, 20000, 5000, 4000, 3000, 2000, 1000] + errors: [1.3, 1.1, 0.9, 0.7, 0.6, 0.6, 0.55, 0.5, + 0.5, 0.55, 0.65, 1.1, 1.2, 1.2, 1.4, 1.6, 1.85, 2.0] +# Ajusted error after initial assignment +- filter: Perform Action + filter variables: + - name: virtualTemperature action: name: inflate error inflation variable: name: ObsFunction/ObsErrorFactorConventional options: test QCflag: PreQC - inflate variables: [northward_wind] + test QCthreshold: 3 + inflate variables: [virtualTemperature] + pressure: MetaData/pressure + distance threshold: -1. defer to post: true -# -- filter: Background Check +# inflate error, x1.2 for PreQC = 3,7 +- filter: Perform Action filter variables: - - name: airTemperature - absolute threshold: 4.0 + - name: virtualTemperature action: name: inflate error - inflation factor: 3.0 + inflation factor: 1.2 + where: + - variable: PreQC/virtualTemperature + is_in: [3 7] defer to post: true -# -- filter: Background Check +# inflate error, x1.2 at pressure < 10000 Pa. +- filter: Perform Action filter variables: - - name: windEastward - - name: windNorthward - absolute threshold: 7.5 + - name: virtualTemperature action: name: inflate error - inflation factor: 3.0 + inflation factor: 1.2 + where: + - variable: MetaData/pressure + minvalue: 0 + maxvalue: 9999 defer to post: true -# -# If the total inflation factor is too big, reject. -- filter: Bounds Check +## a tempporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments and inflation. +- filter: Perform Action filter variables: - - name: airTemperature + - name: virtualTemperature + action: + name: assign error + error function: GsiAdjustObsError/virtualTemperature + where: + - variable: + name: GsiAdjustObsError/virtualTemperature + is_defined: + defer to post: true +## error inflation based on pressure check +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: virtualTemperature + inflation factor: 8.0 + geovar_sfc_geomz: surface_geometric_height + defer to post: true + +# assign TempObsErrorData/virtualTemperature <--- ObsErrorData before changing its Min and Max +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/virtualTemperature + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/virtualTemperature + defer to post: true +# set ObsErrorData 1.3 K if it < 1.3 K +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error parameter: 1.3 + where: + - variable: + name: TempObsErrorData/virtualTemperature + maxvalue: 1.3 + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: + defer to post: true +# set ObsErrorData 5.6 K if it > 5.6 K. +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error parameter: 5.6 + where: + - variable: + name: TempObsErrorData/virtualTemperature + minvalue: 5.6 + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: + defer to post: true + +# Screen data by PreUseFlag +# PreUseFlag is assigned in reading programs in GSI. +- filter: Perform Action + filter variables: + - name: virtualTemperature + where: + - variable: PreUseFlag/virtualTemperature + # PreUseFlag should =< ijter ( # of outloop(0,1,2) + 1) in GSI + minvalue: 1 action: name: reject - maxvalue: 8.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/airTemperature # After inflation step - denominator: - name: ObsError/airTemperature +# Background check +# ratio threshold 8.0 +- filter: Background Check + filter variables: + - name: virtualTemperature + threshold: 8.0 + action: + name: reject + where: + - variable: PreQC/virtualTemperature + is_not_in: [3] defer to post: true -# -- filter: Bounds Check +# ratio threshold * 0.7 if PreQC=3 +- filter: Background Check filter variables: - - name: specificHumidity + - name: virtualTemperature + threshold: 5.6 action: name: reject - maxvalue: 8.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/specificHumidity # After inflation step - denominator: - name: ObsError/specificHumidity + where: + - variable: PreQC/virtualTemperature + is_in: [3] + defer to post: true +# Re-assign error ObsErrorData/aireTemperature <--- TempObsErrorData/aireTemperature +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: assign error + error function: TempObsErrorData/virtualTemperature + where: + - variable: + name: TempObsErrorData/virtualTemperature + is_defined: defer to post: true -# +## Duplicate factor +- filter: Perform Action + filter variables: + - name: virtualTemperature + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorDuplicateCheck + options: + use_air_pressure: true + variable: virtualTemperature + defer to post: true + +# Eastward and northward wind +# --------------------------- +# Assign the initial observation error, based on height/pressure - filter: Bounds Check filter variables: - name: windEastward + - name: windNorthward + minvalue: -135 + maxvalue: 135 + action: + name: assign error + error function: + name: ObsErrorModelStepwiseLinear@ObsFunction + options: + xvar: + name: MetaData/pressure + xvals: [110000, 105000, 100000, 95000, 90000, 85000, 80000, 75000, 70000, 65000, + 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, + 10000, 7500, 5000, 4000, 3000, 2000, 1000, 500, 400, 300, + 200, 100, 0 ] #Pressure (Pa) + errors: [1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.6, 1.7, 1.8, + 1.9, 2.0, 2.1, 2.2, 2.2, 2.3, 2.3, 2.4, 2.4, 2.4, + 2.4, 2.4, 2.4, 2.4, 2.5, 2.7, 2.9, 3.1, 3.3, 3.5, + 3.7, 3.9, 4.1] + +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: PreUseFlag/windEastward + is_in: 100 action: name: reject - maxvalue: 8.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient + +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: PreUseFlag/windNorthward + is_in: 100 + action: + name: reject +## a tempporary solution: Replace error by GsiAdjustObsError +## overwite above error assignments. +- filter: Perform Action + filter variables: + - name: windEastward + action: + name: assign error + error function: GsiAdjustObsError/windEastward + where: + - variable: + name: GsiAdjustObsError/windEastward + is_defined: +- filter: Perform Action + filter variables: + - name: windNorthward + action: + name: assign error + error function: GsiAdjustObsError/windNorthward + where: + - variable: + name: GsiAdjustObsError/windNorthward + is_defined: +- filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: + name: ObsType/windEastward + is_in: 220,221 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windEastward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + +- filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: + name: ObsType/windNorthward + is_in: 220,221 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windNorthward + inflation factor: 4.0 + adjusted_error_name: GsiAdjustObsError + geovar_sfc_geomz: surface_geometric_height + +# Gross Check +- filter: Background Check + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck options: - numerator: - name: ObsErrorData/windEastward # After inflation step - denominator: - name: ObsError/windEastward - defer to post: true -# -- filter: Bounds Check + wndtype: [ 220, 221 ] + cgross: [ 8.0, 8.0 ] + error_min: [ 1.4, 1.4 ] + error_max: [ 6.1, 6.1 ] + variable: windEastward + action: + name: reject +# Gross Check +- filter: Background Check filter variables: - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 220, 221 ] + cgross: [ 8.0, 8.0 ] + error_min: [ 1.4, 1.4 ] + error_max: [ 6.1, 6.1 ] + variable: windNorthward action: name: reject - maxvalue: 8.0 + +- filter: Bounds Check + filter variables: + - name: windEastward test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/windNorthward # After inflation step - denominator: - name: ObsError/windNorthward + - name: ObsErrorData/windEastward + maxvalue: 100.0 + action: + name: reject + defer to post: true + +# assign TempObsErrorData/stationPressure <--- ObsErrorData +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/windEastward + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/windEastward + defer to post: true +# assign TempObsErrorData/stationPressure <--- ObsErrorData +- filter: Variable Assignment + assignments: + - name: TempObsErrorData/windNorthward + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/windNorthward defer to post: true -# + - filter: Bounds Check filter variables: - - name: stationPressure + - name: windNorthward + test variables: + - name: ObsErrorData/windNorthward + maxvalue: 100.0 action: name: reject - maxvalue: 4.0 - test variables: - - name: ObsFunction/ObsErrorFactorQuotient - options: - numerator: - name: ObsErrorData/stationPressure # After inflation step - denominator: - name: ObsError/stationPressure + defer to post: true + +- filter: BlackList + filter variables: + - name: windEastward + action: + name: inflate error + inflation variable: + name: ObsErrorFactorDuplicateCheck@ObsFunction + options: + use_air_pressure: true + variable: windEastward + where: + - variable: + name: ObsType/windEastward + is_in: 220 + defer to post: true +- filter: BlackList + filter variables: + - name: windNorthward + action: + name: inflate error + inflation variable: + name: ObsErrorFactorDuplicateCheck@ObsFunction + options: + use_air_pressure: true + variable: windNorthward + where: + - variable: + name: ObsType/windNorthward + is_in: 220 defer to post: true diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ufo_tests.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ufo_tests.yaml index 87dc102b..4aa47fac 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ufo_tests.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ufo_tests.yaml @@ -2,13 +2,6 @@ # ----------------------------------------------------------------------- default: - operator_test: - linear obs operator test: - coef TL: 0.1 - tolerance TL: 1.0e-11 - tolerance AD: 1.0e-13 - tolerance: 1.0e-06 - rms ref: 1.0 filter_test: passedBenchmark: 1 @@ -16,193 +9,133 @@ default: # --------------------------------------- aircraft: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 341802 + passedBenchmark: 342566 airs_aqua: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 360232 + passedBenchmark: 360284 amsr2_gcom-w1: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 54558 amsua_aqua: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 0 amsua_metop-b: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 71950 amsua_metop-c: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 91419 amsua_n15: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 56139 + passedBenchmark: 56155 amsua_n18: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 69693 + passedBenchmark: 69700 amsua_n19: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 73421 + passedBenchmark: 73428 atms_n20: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 159928 + passedBenchmark: 131783 atms_npp: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 158687 + passedBenchmark: 130828 avhrr3_metop-b: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 4940 avhrr3_n18: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 5455 avhrr3_n19: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 4948 cris-fsr_n20: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 220381 + passedBenchmark: 220521 cris-fsr_npp: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 210942 + passedBenchmark: 210980 gmi_gpm: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 41937 + passedBenchmark: 41975 gps: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 1 + passedBenchmark: 467704 iasi_metop-b: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 561875 iasi_metop-c: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 558904 + passedBenchmark: 559038 mhs_metop-b: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 29630 mhs_metop-c: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 29815 mhs_n19: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 27823 mls55_aura: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 1 omi_aura: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 1 ompsnm_npp: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 1 +pibal: + filter_test: + passedBenchmark: 1204 + satwind: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 205802 # was 231948 + passedBenchmark: 231948 scatwind: - operator_test: - rms ref: 1.0e-1 filter_test: passedBenchmark: 16384 sfcship: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 1 + passedBenchmark: 99142 sfc: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 1 + passedBenchmark: 71960 sondes: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 1 + passedBenchmark: 116687 ssmis_f17: - operator_test: - rms ref: 1.0e-1 filter_test: - passedBenchmark: 48462 + passedBenchmark: 48492 diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml index 1afd6a0e..02647a46 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml @@ -32,6 +32,9 @@ clean_patterns: - '*.txt' - logfile.*.out +ensemble_num_members: + default_value: 10 + geos_background_restart_offset: default_value: TODO @@ -88,6 +91,7 @@ observations: default_value: - aircraft - gps + - pibal - satwind - scatwind - sfcship @@ -152,11 +156,14 @@ observations: - omi_aura - ompsnm_npp +path_to_ensemble: + default_value: /discover/nobackup/drholdaw/SwellTestData/letk/ensemble/Y%Y/M%m/D%d/H%H + path_to_geos_adas_background: default_value: /discover/nobackup/drholdaw/SwellTestData/geosadas/bkg/*bkg_clcv_rst* path_to_gsi_bc_coefficients: - default_value: /discover/nobackup/drholdaw/SwellTestData/ufo_testing/bc/%Y%m%d%H + default_value: /discover/nobackup/drholdaw/SwellTestData/ufo_testing/bc/Y%Y/M%m/*bias*%Y%m%d_%Hz.txt path_to_gsi_nc_diags: default_value: /discover/nobackup/drholdaw/SwellTestData/ufo_testing/ncdiag/%Y%m%d%H diff --git a/src/swell/configuration/jedi/observation_ioda_names.yaml b/src/swell/configuration/jedi/observation_ioda_names.yaml index be9135df..edf36865 100644 --- a/src/swell/configuration/jedi/observation_ioda_names.yaml +++ b/src/swell/configuration/jedi/observation_ioda_names.yaml @@ -1,130 +1,197 @@ ioda instrument names: - ioda name: abi_g16 full name: ABI (GOES-16) + inst type: radiance - ioda name: ahi_himawari8 full name: AHI (Himawari-8) + inst type: radiance - ioda name: aircraft full name: Aircraft + inst type: conventional - ioda name: airs_aqua full name: AIRS (AQUA) + inst type: radiance - ioda name: amsua_aqua full name: AMSU-A (AQUA) + inst type: radiance - ioda name: amsua_metop-a full name: AMSU-A (METOP-A) + inst type: radiance - ioda name: amsua_metop-b full name: AMSU-A (METOP-B) + inst type: radiance - ioda name: amsua_metop-c full name: AMSU-A (METOP-C) + inst type: radiance - ioda name: amsua_n15 full name: AMSU-A (NOAA-15) + inst type: radiance - ioda name: amsua_n18 full name: AMSU-A (NOAA-18) + inst type: radiance - ioda name: amsua_n19 full name: AMSU-A (NOAA-19) + inst type: radiance - ioda name: atms_n20 full name: ATMS (NOAA-20) + inst type: radiance - ioda name: atms_npp full name: ATMS (NPP) + inst type: radiance - ioda name: amsr2_gcom-w1 full name: AMSR2 (GCOM-W1) + inst type: radiance - ioda name: avhrr3_metop-a full name: AVHRR-3 (METOP-A) + inst type: radiance - ioda name: avhrr3_n18 full name: AVHRR-3 (NOAA-18) + inst type: radiance - ioda name: avhrr3_n19 full name: AVHRR-3 (NOAA-19) + inst type: radiance - ioda name: avhrr3_metop-b full name: AVHRR-3 (METOP-B) + inst type: radiance - ioda name: cris-fsr_n20 full name: CRIS-FSR (NOAA-20) + inst type: radiance - ioda name: cris-fsr_npp full name: CRIS-FSR (NPP) + inst type: radiance - ioda name: gmi_gpm full name: GMI (GPM) + inst type: radiance - ioda name: gps full name: GNSSRO + inst type: radiance - ioda name: gome_metop-a full name: GOME (METOP-A) + inst type: radiance - ioda name: hirs4_metop-a full name: HIRS-4 (METOP-A) + inst type: radiance - ioda name: hirs4_metop-b full name: HIRS-4 (METOP-B) + inst type: radiance - ioda name: iasi_metop-a full name: IASI (METOP-A) + inst type: radiance - ioda name: iasi_metop-b full name: IASI (METOP-B) + inst type: radiance - ioda name: iasi_metop-c full name: IASI (METOP-C) + inst type: radiance - ioda name: mhs_metop-a full name: MHS (METOP-A) + inst type: radiance - ioda name: mhs_metop-b full name: MHS (METOP-B) + inst type: radiance - ioda name: mhs_metop-c full name: MHS (METOP-C) + inst type: radiance - ioda name: mhs_n19 full name: MHS (NOAA-19) + inst type: radiance - ioda name: mls55_aura full name: MLS (AURA) + inst type: ozone - ioda name: omi_aura full name: OMI (AURA) + inst type: ozone - ioda name: ompsnp_npp full name: OMPS Nadir Profile (NPP) + inst type: ozone - ioda name: ompsnm_npp full name: OMPS Nadir Mapper (NPP) + inst type: ozone - ioda name: ompslpnc_npp full name: OMPS Limb Profiler (NPP) + inst type: ozone + - ioda name: pibal + full name: Pilot Balloon Data (PIBAL) + inst type: conventional - ioda name: rass_tv full name: RASS Virtual Temperature + inst type: conventional - ioda name: satwind full name: Satellite Winds + inst type: conventional - ioda name: scatwind full name: Scatterometer Winds + inst type: conventional - ioda name: seviri_m11 full name: SEVIRI (Meteosat-11) + inst type: radiance - ioda name: sfcship - full name: Surface Ship + full name: Surface Marine Stations + inst type: conventional - ioda name: sfc - full name: Surface + full name: Surface Land Stations + inst type: conventional - ioda name: sondes full name: Radiosondes + inst type: conventional - ioda name: ssmis_f17 full name: SSMIS (DMSP-F17) + inst type: radiance - ioda name: vadwind full name: Velocity Azimuth Display Wind Profile + inst type: conventional # Ocean - ioda name: adt_3a_egm2008 full name: ADT 3a (EGM2008) + inst type: conventional - ioda name: adt_3b_egm2008 full name: ADT 3b (EGM2008) + inst type: conventional - ioda name: adt_c2_egm2008 full name: ADT c2 (EGM2008) + inst type: conventional - ioda name: adt_coperl4 full name: ADT Copernicus Level-4 + inst type: conventional - ioda name: adt_j3_egm2008 full name: ADT j3 (EGM2008) + inst type: conventional - ioda name: adt_sa_egm2008 full name: ADT sa (EGM2008) + inst type: conventional - ioda name: adt full name: ADT + inst type: conventional - ioda name: insitus full name: Insitu Salinity + inst type: conventional - ioda name: insitut full name: Insitu Temperature + inst type: conventional - ioda name: salt_profile_fnmoc full name: FNMOC (In-situ Salinity) + inst type: conventional - ioda name: sss_smos_esa full name: ESA SMOS (SSS) + inst type: conventional - ioda name: sss_trak_fnmoc full name: FNMOC (SSS) + inst type: conventional - ioda name: sst_amsr2_l3u full name: AMSR2 (SST) + inst type: conventional - ioda name: sst_gmi_l3u full name: GMI (SST) + inst type: conventional - ioda name: sst_ostia full name: OSTIA (SST) + inst type: conventional - ioda name: sst_ship_fnmoc full name: FNMOC Ship (SST) + inst type: conventional - ioda name: sst_trak_fnmoc full name: FNMOC (SST) + inst type: conventional - ioda name: temp_profile_fnmoc full name: FNMOC (In-situ Temperature) + inst type: conventional diff --git a/src/swell/deployment/bin/swell_prepare_config.py b/src/swell/deployment/bin/swell_prepare_config.py index 12fe03d0..426b247e 100644 --- a/src/swell/deployment/bin/swell_prepare_config.py +++ b/src/swell/deployment/bin/swell_prepare_config.py @@ -27,12 +27,10 @@ 'platform specific defaults.') @click.option('-o', '--override', 'override', default=None, help='After generating the config ' + 'file parameters inside can be overridden using value from the override config file.') -@click.option('-t', '--test', 'test', default=None, help='Override defaults with a preprepared ' + - 'test config file.') @click.option('-a', '--advanced', 'advanced', default=False, help='Show configuration questions ' + 'which are otherwise not shown to the user.') @click.argument('suite') -def main(input_method, suite, platform, override, test, advanced): +def main(input_method, suite, platform, override, advanced): """ SUITE argument determines which set of tasks are going to be run. """ @@ -43,7 +41,7 @@ def main(input_method, suite, platform, override, test, advanced): # Create suites object # -------------------- - prepare_config(input_method, suite, platform, override, test, advanced) + prepare_config(input_method, suite, platform, override, advanced) # -------------------------------------------------------------------------------------------------- diff --git a/src/swell/deployment/platforms/nccs_discover/modules b/src/swell/deployment/platforms/nccs_discover/modules index 19b7cab7..b535e12a 100644 --- a/src/swell/deployment/platforms/nccs_discover/modules +++ b/src/swell/deployment/platforms/nccs_discover/modules @@ -6,12 +6,6 @@ source /usr/share/lmod/lmod/init/bash # ------------- module purge -# Unlimited Stacksize -# -------------------- -ulimit -S -s unlimited -ulimit -S -v unlimited -umask 022 - # Spack stack modules # ------------------- module use /discover/swdev/jcsda/spack-stack/modulefiles @@ -37,6 +31,7 @@ PYTHONPATH={{experiment_root}}/{{experiment_id}}/jedi_bundle/build/lib/python3.9 # IODA-Converters from experiement JEDI source # -------------------------------------------- PYTHONPATH={{experiment_root}}/{{experiment_id}}/jedi_bundle/source/iodaconv/src:$PYTHONPATH +PYTHONPATH={{experiment_root}}/{{experiment_id}}/jedi_bundle/source/iodaconv/src/acftbias:$PYTHONPATH # Load GMAO modules # ----------------- diff --git a/src/swell/deployment/prep_config.py b/src/swell/deployment/prep_config.py index 923ad251..4e5a1b4d 100644 --- a/src/swell/deployment/prep_config.py +++ b/src/swell/deployment/prep_config.py @@ -16,7 +16,7 @@ from swell.utilities.logger import Logger from swell.swell_path import get_swell_path -from swell.utilities.dictionary import dict_get, add_comments_to_dictionary, dictionary_override +from swell.utilities.dictionary import dict_get, add_comments_to_dictionary # -------------------------------------------------------------------------------------------------- @@ -43,7 +43,7 @@ def update_model_components(logger, experiment_dict, comment_dict): # -------------------------------------------------------------------------------------------------- -def prepare_config(method, suite, platform, override, test, advanced): +def prepare_config(method, suite, platform, override, advanced): # Create a logger # --------------- @@ -64,7 +64,7 @@ def prepare_config(method, suite, platform, override, test, advanced): # --------------------------------------------------------------- PrepUsing = getattr(importlib.import_module('swell.deployment.prep_config_'+method), 'PrepConfig'+method.capitalize()) - prep_using = PrepUsing(logger, config_file, suite, platform, advanced) + prep_using = PrepUsing(logger, config_file, suite, platform, override, advanced) # Call the config prep step # ------------------------- @@ -92,52 +92,6 @@ def prepare_config(method, suite, platform, override, test, advanced): experiment_dict_string = os.path.expandvars(experiment_dict_string) experiment_dict = yaml.safe_load(experiment_dict_string) - # Point to a particular pre-existing dictionary used for testing - # -------------------------------------------------------------- - if test is not None: - - # Method must be defaults if specifying test - logger.assert_abort(method == 'defaults', - f'If specifying a test override, the input method must be \'defaults\'') - - # Set an override to the test file - test_override_file = os.path.join(get_swell_path(), 'test', 'suite_tests', suite + '-' + - test + '.yaml') - - # Check that the test file choice is valid - logger.assert_abort(os.path.exists(test_override_file), f'Requested test \'{test}\' does ' + - f'not exist. Expected file is \'{test_override_file}\'') - - # Open the override file - with open(test_override_file, 'r') as file: - test_override_dict = yaml.safe_load(file) - - # Perform the override - logger.info(f'Overriding the experiment dictionary using suite test \'{test}\'') - dictionary_override(logger, experiment_dict, test_override_dict) - - # Update model components in case the test override changed which are turned on - # ----------------------------------------------------------------------------- - update_model_components(logger, experiment_dict, comment_dict) - - # Optionally override dictionary values (only used when method is 'defaults') - # ------------------------------------- - if override is not None: - - # Method must be defaults if specifying override - logger.assert_abort(method == 'defaults', - f'If specifying an override, the input method must be \'defaults\'') - - with open(override, 'r') as file: - override_dict = yaml.safe_load(file) - - logger.info(f'Overriding experiment dictionary settings using {override}') - dictionary_override(logger, experiment_dict, override_dict) - - # Update model components in case the user override changed which are turned on - # ----------------------------------------------------------------------------- - update_model_components(logger, experiment_dict, comment_dict) - # Add comments to dictionary # -------------------------- experiment_dict_string = yaml.dump(experiment_dict, default_flow_style=False, sort_keys=False) diff --git a/src/swell/deployment/prep_config_base.py b/src/swell/deployment/prep_config_base.py index 91ada044..7d7a5e42 100644 --- a/src/swell/deployment/prep_config_base.py +++ b/src/swell/deployment/prep_config_base.py @@ -21,7 +21,9 @@ class PrepConfigBase(ABC): - def __init__(self, logger, dictionary_file, suite, platform, advanced): + def __init__(self, logger, dictionary_file, suite, platform, override, advanced): + + self.override = override self.show_advanced = advanced @@ -90,6 +92,28 @@ def __init__(self, logger, dictionary_file, suite, platform, advanced): with open(os.path.join(swell_path, 'tasks', 'task_questions.yaml'), 'r') as ymlfile: self.all_task_questions = yaml.safe_load(ymlfile) + # Open tests override dictionary + # do this only on defaults + test_file = os.path.join(swell_path, 'test', 'suite_tests', suite + '-tier1.yaml') + + if os.path.exists(test_file): + with open(test_file, 'r') as test_yml: + self.test_dictionary = yaml.safe_load(test_yml) + else: + self.test_dictionary = {} + + # Open user selected override dictionary + if override is not None: + + logger.info(f'Overriding experiment dictionary settings using {override}') + + select_override_file = os.path.join(override) + + with open(select_override_file, 'r') as select_override_yml: + self.override_dictionary = yaml.safe_load(select_override_yml) + + self.override_models() + # ---------------------------------------------------------------------------------------------- def execute(self): @@ -245,7 +269,9 @@ def open_flow(self): continue base_task_list.append(task_name) - # add selected tasks to logger + # The following lists of tasks added to logger + self.logger.info(f'Base tasks selected include the following: {base_task_list}. \n' + + f'Model tasks selected include the following: {model_task_list}.') return base_task_list, model_task_list @@ -302,6 +328,15 @@ def build_question_dictionary(self, task, get_dependents): # ---------------------------------------------------------------------------------------------- + def override_models(self): + if 'model_components' in self.test_dictionary.keys(): + self.default_models = self.test_dictionary['model_components'] + if self.override is not None: + if 'model_components' in self.override_dictionary.keys(): + self.default_models = self.override_dictionary['model_components'] + + # ---------------------------------------------------------------------------------------------- + def get_model_defaults(self): self.model_defaults_dict = {} for m in self.selected_models: @@ -333,6 +368,66 @@ def show_deference(self, key, el_dict): # ---------------------------------------------------------------------------------------------- + def override_defaults(self, key, el_dict): + + override_dict = None + + if self.model is None: + if key in self.test_dictionary.keys(): + override_dict = self.test_dictionary + else: + pass + if self.override is not None: + if key in self.override_dictionary.keys(): + override_dict = self.override_dictionary + else: + pass + if override_dict is None: + return el_dict + else: + override_default = override_dict[key] + if 'options' in el_dict.keys(): + if isinstance(override_default, list): + override_options = override_default + else: + override_options = [override_default] + else: + override_options = None + else: + if 'models' in self.test_dictionary.keys(): + if self.model in self.test_dictionary['models'].keys(): + if key in self.test_dictionary['models'][self.model].keys(): + override_dict = self.test_dictionary + else: + pass + if self.override is not None: + if 'models' in self.override_dictionary.keys(): + if self.model in self.override_dictionary['models'].keys(): + if key in self.override_dictionary['models'][self.model].keys(): + override_dict = self.override_dictionary + else: + pass + + if override_dict is None: + return el_dict + else: + override_default = override_dict['models'][self.model][key] + if 'options' in el_dict.keys(): + if isinstance(override_default, list): + override_options = override_default + else: + override_options = [override_default] + else: + override_options = None + + el_dict['default_value'] = override_default + if 'options' in el_dict.keys(): + el_dict['options'] = override_options + + return el_dict + + # ---------------------------------------------------------------------------------------------- + def key_passer(self, key, el_dict): # Validate the element dictionary @@ -353,8 +448,11 @@ def key_passer(self, key, el_dict): # In this case the key is not expected to refer to a sub dictionary but have # everything needed in the elements dictionary if depends_flag: + el_dict = self.show_deference(key, el_dict) + el_dict = self.override_defaults(key, el_dict) + if self.show_advanced: el_dict['ask_question'] = True diff --git a/src/swell/deployment/prep_suite.py b/src/swell/deployment/prep_suite.py index d053b195..33e4587f 100644 --- a/src/swell/deployment/prep_suite.py +++ b/src/swell/deployment/prep_suite.py @@ -93,7 +93,7 @@ def prepare_cylc_suite_jinja2(logger, swell_suite_path, exp_suite_path, experime yaml_path = os.path.expanduser("~/.swell/swell-slurm.yaml") slurm_global = {} if os.path.exists(yaml_path): - logger.info(f'Found file contianing swell slurm global values') + logger.info(f'Found file containing swell slurm global values') with open(yaml_path, "r") as yaml_file: slurm_global = yaml.safe_load(yaml_file) @@ -123,6 +123,7 @@ def prepare_cylc_suite_jinja2(logger, swell_suite_path, exp_suite_path, experime 'BuildGeos', 'GenerateBClimatology', 'RunJediHofxExecutable', + 'RunJediLetkfExecutable', 'RunJediVariationalExecutable', 'RunJediUfoTestsExecutable', 'RunGeosExecutable', @@ -148,9 +149,6 @@ def prepare_cylc_suite_jinja2(logger, swell_suite_path, exp_suite_path, experime render_dictionary['scheduling']['BuildJedi']['execution_time_limit'] = 'PT3H' render_dictionary['scheduling']['RunJediHofxExecutable']['execution_time_limit'] = 'PT2H' - # nodes - render_dictionary['scheduling']['RunJediUfoTestsExecutable']['ntasks_per_node'] = 1 - # Render the template # ------------------- new_suite_file = template_string_jinja2(logger, suite_file, render_dictionary) diff --git a/src/swell/suites/letkf/flow.cylc b/src/swell/suites/letkf/flow.cylc new file mode 100644 index 00000000..07ca8d10 --- /dev/null +++ b/src/swell/suites/letkf/flow.cylc @@ -0,0 +1,155 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +# -------------------------------------------------------------------------------------------------- + +# Cylc suite for executing JEDI-based h(x) + +# -------------------------------------------------------------------------------------------------- + +[scheduler] + UTC mode = True + allow implicit tasks = False + +# -------------------------------------------------------------------------------------------------- + +[scheduling] + + initial cycle point = {{start_cycle_point}} + final cycle point = {{final_cycle_point}} + runahead limit = {{runahead_limit}} + + [[graph]] + R1 = """ + # Triggers for non cycle time dependent tasks + # ------------------------------------------- + # Clone JEDI source code + CloneJedi + + # Build JEDI source code by linking + CloneJedi => BuildJediByLinking? + + # If not able to link to build create the build + BuildJediByLinking:fail? => BuildJedi + + {% for model_component in model_components %} + # Stage JEDI static files + CloneJedi => StageJedi-{{model_component}} + {% endfor %} + """ + + {% for cycle_time in cycle_times %} + {{cycle_time.cycle_time}} = """ + {% for model_component in model_components %} + {% if cycle_time[model_component] %} + # Task triggers for: {{model_component}} + # ------------------ + # Get ensemble + GetEnsemble-{{model_component}} + + # Get observations + GetObservations-{{model_component}} + + # Perform staging that is cycle dependent + StageJediCycle-{{model_component}} + + # Run Jedi hofx executable + BuildJediByLinking[^]? | BuildJedi[^] => RunJediLetkfExecutable-{{model_component}} + StageJedi-{{model_component}}[^] => RunJediLetkfExecutable-{{model_component}} + StageJediCycle-{{model_component}} => RunJediLetkfExecutable-{{model_component}} + GetEnsemble-{{model_component}} => RunJediLetkfExecutable-{{model_component}} + GetObservations-{{model_component}} => RunJediLetkfExecutable-{{model_component}} + + # EvaObservations + RunJediLetkfExecutable-{{model_component}} => EvaObservations-{{model_component}} + + # Save observations + RunJediLetkfExecutable-{{model_component}} => SaveObsDiags-{{model_component}} + + # Clean up large files + EvaObservations-{{model_component}} & SaveObsDiags-{{model_component}} => + CleanCycle-{{model_component}} + + {% endif %} + {% endfor %} + """ + {% endfor %} + +# -------------------------------------------------------------------------------------------------- + +[runtime] + + # Task defaults + # ------------- + [[root]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + + [[[environment]]] + datetime = $CYLC_TASK_CYCLE_POINT + config = $CYLC_SUITE_DEF_PATH/experiment.yaml + + # Tasks + # ----- + [[CloneJedi]] + script = "swell_task CloneJedi $config" + + [[BuildJediByLinking]] + script = "swell_task BuildJediByLinking $config" + + [[BuildJedi]] + script = "swell_task BuildJedi $config" + platform = {{platform}} + execution time limit = {{scheduling["BuildJedi"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["BuildJedi"]["account"]}} + --qos = {{scheduling["BuildJedi"]["qos"]}} + --job-name = BuildJedi + --nodes={{scheduling["BuildJedi"]["nodes"]}} + --ntasks-per-node={{scheduling["BuildJedi"]["ntasks_per_node"]}} + --constraint={{scheduling["BuildJedi"]["constraint"]}} + {% if scheduling["BuildJedi"]["partition"] %} + --partition={{scheduling["BuildJedi"]["partition"]}} + {% endif %} + + {% for model_component in model_components %} + [[StageJedi-{{model_component}}]] + script = "swell_task StageJedi $config -m {{model_component}}" + + [[StageJediCycle-{{model_component}}]] + script = "swell_task StageJedi $config -d $datetime -m {{model_component}}" + + [[ GetEnsemble-{{model_component}} ]] + script = "swell_task GetEnsemble $config -d $datetime -m {{model_component}}" + + [[GetObservations-{{model_component}}]] + script = "swell_task GetObservations $config -d $datetime -m {{model_component}}" + + [[RunJediLetkfExecutable-{{model_component}}]] + script = "swell_task RunJediLetkfExecutable $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["RunJediLetkfExecutable"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["RunJediLetkfExecutable"]["account"]}} + --qos = {{scheduling["RunJediLetkfExecutable"]["qos"]}} + --job-name = RunJediLetkfExecutable + --nodes={{scheduling["RunJediLetkfExecutable"]["nodes"]}} + --ntasks-per-node={{scheduling["RunJediLetkfExecutable"]["ntasks_per_node"]}} + --constraint={{scheduling["RunJediLetkfExecutable"]["constraint"]}} + {% if scheduling["RunJediLetkfExecutable"]["partition"] %} + --partition={{scheduling["RunJediLetkfExecutable"]["partition"]}} + {% endif %} + + [[EvaObservations-{{model_component}}]] + script = "swell_task EvaObservations $config -d $datetime -m {{model_component}}" + + [[SaveObsDiags-{{model_component}}]] + script = "swell_task SaveObsDiags $config -d $datetime -m {{model_component}}" + + [[CleanCycle-{{model_component}}]] + script = "swell_task CleanCycle $config -d $datetime -m {{model_component}}" + {% endfor %} + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/suites/letkf/suite_questions.yaml b/src/swell/suites/letkf/suite_questions.yaml new file mode 100644 index 00000000..f7598997 --- /dev/null +++ b/src/swell/suites/letkf/suite_questions.yaml @@ -0,0 +1,26 @@ +start_cycle_point: + ask_question: True + default_value: '2021-12-12T00:00:00Z' + prompt: What is the time of the first cycle (middle of the window)? + type: iso-datetime + +final_cycle_point: + ask_question: True + default_value: '2021-12-12T06:00:00Z' + prompt: What is the time of the final cycle (middle of the window)? + type: iso-datetime + +runahead_limit: + ask_question: True + default_value: 'P4' + prompt: Since this suite is non-cycling choose how many hours the workflow can run ahead? + type: string + +cycle_times: + ask_question: True + default_value: defer_to_model + options: defer_to_model + models: + - all + prompt: Enter the cycle times for this model. + type: string-check-list diff --git a/src/swell/tasks/base/task_registry.py b/src/swell/tasks/base/task_registry.py index ff5a6219..4683e87a 100644 --- a/src/swell/tasks/base/task_registry.py +++ b/src/swell/tasks/base/task_registry.py @@ -18,6 +18,7 @@ 'GenerateBClimatology', 'GetBackgroundGeosExperiment', 'GetBackground', + 'GetEnsemble', 'GetGeosAdasBackground', 'GetGeosRestart', 'GetGeovals', @@ -35,6 +36,7 @@ 'RemoveForecastDir', 'RunGeosExecutable', 'RunJediHofxExecutable', + 'RunJediLetkfExecutable', 'RunJediUfoTestsExecutable', 'RunJediVariationalExecutable', 'SaveObsDiags', diff --git a/src/swell/tasks/build_jedi.py b/src/swell/tasks/build_jedi.py index 7a7ad40b..04220499 100644 --- a/src/swell/tasks/build_jedi.py +++ b/src/swell/tasks/build_jedi.py @@ -41,13 +41,16 @@ def execute(self): bundles = [] for model_component in model_components: # Open the metadata config for interface - meta = self.jedi_rendering.render_interface_meta() + self.jedi_rendering.add_key('npx_proc', 1) + self.jedi_rendering.add_key('npy_proc', 1) + self.jedi_rendering.add_key('total_processors', 1) + meta = self.jedi_rendering.render_interface_meta(model_component) bundles.append(meta['jedi_interface']) else: - bundles_default = get_bundles() + bundles = get_bundles() # Generate the build dictionary - jedi_bundle_dict = set_jedi_bundle_config(self.config.bundles(bundles_default), + jedi_bundle_dict = set_jedi_bundle_config(self.config.bundles(bundles), jedi_bundle_source_path, jedi_bundle_build_path, 24) diff --git a/src/swell/tasks/clone_jedi.py b/src/swell/tasks/clone_jedi.py index 6f72d821..694d80ee 100644 --- a/src/swell/tasks/clone_jedi.py +++ b/src/swell/tasks/clone_jedi.py @@ -48,13 +48,16 @@ def execute(self): bundles = [] for model_component in model_components: # Open the metadata config for interface - meta = self.jedi_rendering.render_interface_meta() + self.jedi_rendering.add_key('npx_proc', '1') + self.jedi_rendering.add_key('npy_proc', '1') + self.jedi_rendering.add_key('total_processors', '1') + meta = self.jedi_rendering.render_interface_meta(model_component) bundles.append(meta['jedi_interface']) else: - bundles_default = get_bundles() + bundles = get_bundles() # Generate the build dictionary - jedi_bundle_dict = set_jedi_bundle_config(self.config.bundles(bundles_default), + jedi_bundle_dict = set_jedi_bundle_config(self.config.bundles(bundles), jedi_bundle_source_path, jedi_bundle_build_path) diff --git a/src/swell/tasks/eva_observations.py b/src/swell/tasks/eva_observations.py index b3f17187..e050ad4e 100644 --- a/src/swell/tasks/eva_observations.py +++ b/src/swell/tasks/eva_observations.py @@ -50,11 +50,16 @@ def execute(self): # Set channels for which plots will be made # This should be configurable once we do the eva refactoring. channels_to_plot = { - 'airs_aqua': [1, 6, 7], - 'cris-fsr_n20': [19, 24, 26], - 'cris-fsr_npp': [19, 24, 26], - 'iasi_metop-b': [16, 29, 32], - 'iasi_metop-c': [16, 29, 32], + 'airs_aqua': [15, 92, 128, 156, 172, 175, 190, 215, 252, 262, 310, 362, 497, 672, 914, + 1088, 1329, 1449, 1766, 1800, 1869, 1918], + 'cris-fsr_n20': [59, 69, 82, 86, 92, 102, 107, 114, 130, 141, 153, 158, 164, 167, 168, + 402, 487, 501, 626, 874, 882, 1008], + 'cris-fsr_npp': [59, 69, 82, 86, 92, 102, 107, 114, 130, 141, 153, 158, 164, 167, 168, + 402, 487, 501, 626, 874, 882, 1008], + 'iasi_metop-b': [55, 70, 106, 122, 144, 176, 185, 210, 236, 254, 299, 345, 375, 404, + 445, 552, 573, 906, 1121, 1194, 1427, 1585], + 'iasi_metop-c': [55, 70, 106, 122, 144, 176, 185, 210, 236, 254, 299, 345, 375, 404, + 445, 552, 573, 906, 1121, 1194, 1427, 1585], } # Loop over observations diff --git a/src/swell/tasks/get_ensemble.py b/src/swell/tasks/get_ensemble.py new file mode 100644 index 00000000..db99c0e2 --- /dev/null +++ b/src/swell/tasks/get_ensemble.py @@ -0,0 +1,69 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + + +# -------------------------------------------------------------------------------------------------- + + +import datetime +import glob +import os +import re + +from swell.tasks.base.task_base import taskBase + + +# -------------------------------------------------------------------------------------------------- + + +class GetEnsemble(taskBase): + + def execute(self): + + # Get the path and pattern for the background files + # ------------------------------------------------- + ensemble_path = self.config.path_to_ensemble() + + # Fetch list of ensemble members + # -------------------------------- + ensemble_members = glob.glob(ensemble_path) + + # Assert at least one ensemble member was found + # ----------------------------------------------- + self.logger.assert_abort(len(ensemble_members) != 0, f'No ensemble member ' + + f'files found in the source directory ' + + f'\'{ensemble_path}\'') + + # Loop over all the ensemble members found + # ----------------------------------------- + for ensemble_member in ensemble_members: + + # Get filename from full path + member_file = os.path.basename(ensemble_member) + + # Extract the datetime part from the string + datetime_part = re.search(r"\d{8}_\d{4}\w", member_file).group() + + # Get datetime for the file from the filename + member_file_datetime = datetime.datetime.strptime(datetime_part, '%Y%m%d_%H%Mz') + + # Create target filename using the datetime format + member_file_target = member_file_datetime.strftime('geos.mem001.%Y%m%d_%H%M%Sz.nc4') + + # Target path and filename + ensemble_path_file_target = os.path.join(self.cycle_dir(), member_file_target) + + # Remove target file if it exists (might be a link) + if os.path.exists(ensemble_path_file_target): + os.remove(ensemble_path_file_target) + + # Create symlink from target to source + self.logger.info(f'Creating sym link from {ensemble_member} to ' + f'{ensemble_path_file_target}') + os.symlink(ensemble_member, ensemble_path_file_target) + + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/tasks/get_gsi_bc.py b/src/swell/tasks/get_gsi_bc.py index bf348c4e..ead70322 100644 --- a/src/swell/tasks/get_gsi_bc.py +++ b/src/swell/tasks/get_gsi_bc.py @@ -9,6 +9,7 @@ import glob +import isodate import os import shutil import tarfile @@ -26,59 +27,51 @@ def execute(self): # Get the build method # -------------------- gsi_bc_location = self.config.path_to_gsi_bc_coefficients() + window_length = self.config.window_length() + + # Time of GSI analysis providing the bias correction coefficients + # --------------------------------------------------------------- + gsi_bc_ana_time = self.cycle_time_dto() - isodate.parse_duration(window_length) # Replace gsi_bc_location datetime string with the actual datetime # -------------------------------------------------------------- - cycle_time_dto = self.cycle_time_dto() - gsi_bc_location = cycle_time_dto.strftime(gsi_bc_location) + gsi_bc_location = gsi_bc_ana_time.strftime(gsi_bc_location) + + # Get list of matching files + # -------------------------- + bc_files = glob.glob(gsi_bc_location) # Holding directory gsi_bc_dir = os.path.join(self.cycle_dir(), 'gsi_bcs') os.makedirs(gsi_bc_dir, 0o755, exist_ok=True) - # Get list of bias correction files to copy - # ----------------------------------------- - files_found = False - - if os.path.isdir(gsi_bc_location): - - # Get list of matching files in the directory - ana_satbias_rst = glob.glob(os.path.join(gsi_bc_location, '*.ana.satbias.*')) - ana_satbiaspc_rst = glob.glob(os.path.join(gsi_bc_location, '*.ana.satbiaspc.*')) - - # Record that files were found - if len(ana_satbias_rst) == 1 and len(ana_satbiaspc_rst) == 1: - files_found = True - - # Report if too many files were found - if len(ana_satbias_rst) > 1 or len(ana_satbiaspc_rst) > 1: - self.logger.abort(f'In GetGsiBc too many files were found in the directory.') - - # Copy files - shutil.copy(ana_satbias_rst[0], gsi_bc_dir) - shutil.copy(ana_satbiaspc_rst[0], gsi_bc_dir) - - elif tarfile.is_tarfile(gsi_bc_location): - - bc_tar = tarfile.open(gsi_bc_location) - found_satbias = False - found_satbiaspc = False - for bc_tar_file in bc_tar.getnames(): - if 'ana_satbias_rst' in bc_tar_file: - bc_tar.extract(bc_tar_file, gsi_bc_dir) - found_satbias = True - if 'ana_satbiaspc_rst' in bc_tar_file: - bc_tar.extract(bc_tar_file, gsi_bc_dir) - found_satbiaspc = True - bc_tar.close() - - # Record that files were found - if found_satbias and found_satbiaspc: - files_found = True - - self.logger.assert_abort(files_found, f'When passing \'gsi_bc_location\' it should point ' - f'to either a tar file or directory containing *ana_satbias_rst* ' - f'and *ana_satbiaspc_rst*. gsi_bc_location = {gsi_bc_location}.') + # Check whether the found file is a tar file + # ------------------------------------------ + if len(bc_files) == 1 and tarfile.is_tarfile(bc_files[0]): + + self.logger.abort('Support for extracting from tar files needs testing. Not supported') + +# # Extract the tar file +# bc_tar = tarfile.open(bc_files[0]) +# +# # Loop over files in tar file +# for bc_tar_file in bc_tar.getnames(): +# +# # If bias file found, extract it +# if 'bias' in bc_tar_file: +# bc_tar.extract(bc_tar_file, gsi_bc_dir) +# +# # Close file +# bc_tar.close() +# +# # Should rename the files to be the same e.g. ana.satbias.date etc + + else: + + # Otherwise just copy all the files + # --------------------------------- + for bc_file in bc_files: + shutil.copy(bc_file, gsi_bc_dir) # -------------------------------------------------------------------------------------------------- diff --git a/src/swell/tasks/get_observations.py b/src/swell/tasks/get_observations.py index 3a446609..ad9a0dff 100644 --- a/src/swell/tasks/get_observations.py +++ b/src/swell/tasks/get_observations.py @@ -72,7 +72,7 @@ def execute(self): # ----------------------- target_file = observation_dict['obs space']['obsdatain']['engine']['obsfile'] - self.logger.info("Processing observation file "+target_file) + self.logger.info(f'Processing observation file {target_file}') target_dir = os.path.dirname(target_file) os.makedirs(target_dir, exist_ok=True) @@ -92,14 +92,44 @@ def execute(self): # Change permission os.chmod(target_file, 0o644) - # Fetch bias correction files - # --------------------------- + # Aircraft bias correction files + # ------------------------------ + if observation == 'aircraft': + + # Aircraft bias correction files + target_file_types = [ + f'aircraft_abias_air_ascent', + f'aircraft_abias_air_ascentSquared', + f'aircraft_abias_air_constant', + ] + + for target_file_type in target_file_types: + + target_file = os.path.join(self.cycle_dir(), + f'{target_file_type}.{background_time}.csv') + + self.logger.info(f'Processing aircraft bias file {target_file}') + + fetch(date=background_time, + target_file=target_file, + provider='gsi', + obs_type=target_file_type, + type='bc', + experiment=obs_experiment, + file_type='csv') + + # Change permission + os.chmod(target_file, 0o644) + + # Otherwise there is only work to do if the observation operator has bias correction + # ---------------------------------------------------------------------------------- if 'obs bias' not in observation_dict: continue - # Satbias + # Satellite bias correction files + # ------------------------------- target_file = observation_dict['obs bias']['input file'] - self.logger.info("Processing satbias file "+target_file) + self.logger.info(f'Processing satellite bias file {target_file}') target_dir = os.path.dirname(target_file) os.makedirs(target_dir, exist_ok=True) @@ -121,10 +151,11 @@ def execute(self): # Change permission os.chmod(target_file, 0o644) - # Tlapse + # Satellite time lapse + # -------------------- for target_file in list(set(list(self.get_tlapse_files(observation_dict)))): - self.logger.info("Processing tlapse file "+target_file) + self.logger.info(f'Processing time lapse file {target_file}') target_dir = os.path.dirname(target_file) os.makedirs(target_dir, exist_ok=True) @@ -170,3 +201,5 @@ def get_tlapse_files(self, observation_dict): yield p['tlapse'] return + +# ---------------------------------------------------------------------------------------------- diff --git a/src/swell/tasks/gsi_bc_to_ioda.py b/src/swell/tasks/gsi_bc_to_ioda.py index d0ad95a6..1da9d308 100644 --- a/src/swell/tasks/gsi_bc_to_ioda.py +++ b/src/swell/tasks/gsi_bc_to_ioda.py @@ -11,6 +11,8 @@ import glob import os +from generate_aircraft_bias_csv import csv_write + from swell.tasks.base.task_base import taskBase from swell.utilities.dictionary import write_dict_to_yaml from swell.utilities.shell_commands import run_track_log_subprocess @@ -46,6 +48,8 @@ def execute(self): sensors_satbias = [] sensors_tlapse = [] for observation in observations: + + print('observation', observation) # Open configuration file for observation observation_dict = self.jedi_rendering.render_interface_observations(observation) @@ -70,15 +74,39 @@ def execute(self): # Get list of files from holding directory bc_files = glob.glob(os.path.join(gsi_bc_dir, '*.txt')) + # Assert that the number of files is 3 or less + self.logger.assert_abort(len(bc_files) <= 3, f'In GsiBcToIoda too many files found in ' + + f'{gsi_bc_dir}. Expected 3 or less, found ' + + f'{len(bc_files)}.') + + # Get index of file that contains satbias but not satbiaspc + satbias_file_index = None + satbiaspc_file_index = None + acftbias_file_index = None + + for index, bc_file in enumerate(bc_files): + if 'satbias' in bc_file and 'satbiaspc' not in bc_file: + satbias_file_index = index + if 'satbiaspc' in bc_file: + satbiaspc_file_index = index + if 'acftbias' in bc_file: + acftbias_file_index = index + + # Assert that the files were all found + self.logger.assert_abort(satbias_file_index is not None, + f'In GsiBcToIoda no satbias file found in {gsi_bc_dir}.') + self.logger.assert_abort(satbiaspc_file_index is not None, + f'In GsiBcToIoda no satbiaspc file found in {gsi_bc_dir}.') + if 'aircraft' in observations: + self.logger.assert_abort(acftbias_file_index is not None, + f'In GsiBcToIoda no acftbias file found in {gsi_bc_dir}.') + # Create dictionary that will be passed to converter satbias_converter_dict = {} # Add the files - for bc_file in bc_files: - if '.ana.satbias.' in bc_file: - satbias_converter_dict['input coeff file'] = bc_file - if '.ana.satbiaspc.' in bc_file: - satbias_converter_dict['input err file'] = bc_file + satbias_converter_dict['input coeff file'] = bc_files[satbias_file_index] + satbias_converter_dict['input err file'] = bc_files[satbiaspc_file_index] # Add the default predictors default_predictors = [] @@ -145,5 +173,39 @@ def execute(self): with open(os.path.join(self.cycle_dir(), sensor_tlapse), 'w') as file_open: file_open.write(sensor_tlapse_file) + # Do the conversion of the aircraft bias correction files + # ------------------------------------------------------- + if 'aircraft' in observations: + + # Input file name + coefFileName = bc_files[acftbias_file_index] + coordVariableName = 'MetaData/stationIdentification' + coordVariableType = 'string' + coordVariableColumn = 0 + drawVariableType = 'float' + + aircraft_properties = [ + {'csvFileName': f'aircraft_abias_air_constant.{background_time}.csv', + 'drawVariableName': 'BiasCoefficientValue/constantPredictor', + 'drawVariableColumn': 2}, + {'csvFileName': f'aircraft_abias_air_ascent.{background_time}.csv', + 'drawVariableName': 'BiasCoefficientValue/ascentPredictor', + 'drawVariableColumn': 3}, + {'csvFileName': f'aircraft_abias_air_ascentSquared.{background_time}.csv', + 'drawVariableName': 'BiasCoefficientValue/ascentSquaredPredictor', + 'drawVariableColumn': 4}, + ] + + for aircraft_property in aircraft_properties: + + csv_write(os.path.join(self.cycle_dir(), aircraft_property['csvFileName']), + coefFileName, + coordVariableName, + coordVariableType, + coordVariableColumn, + aircraft_property['drawVariableName'], + drawVariableType, + aircraft_property['drawVariableColumn']) + # -------------------------------------------------------------------------------------------------- diff --git a/src/swell/tasks/gsi_ncdiag_to_ioda.py b/src/swell/tasks/gsi_ncdiag_to_ioda.py index 9dcf01f8..b658e243 100644 --- a/src/swell/tasks/gsi_ncdiag_to_ioda.py +++ b/src/swell/tasks/gsi_ncdiag_to_ioda.py @@ -11,6 +11,9 @@ import copy import datetime import glob +import h5py +import isodate +import numpy as np import os import re @@ -19,9 +22,9 @@ from gsi_ncdiag.combine_obsspace import combine_obsspace from swell.tasks.base.task_base import taskBase -from swell.utilities.shell_commands import run_track_log_subprocess from swell.utilities.datetime import datetime_formats + # -------------------------------------------------------------------------------------------------- @@ -93,6 +96,22 @@ def execute(self): gsi_datetime_str = datetime.datetime.strftime(self.cycle_time_dto(), datetime_formats['gsi_nc_diag_format']) + # Clean up any files that are the end result of this program, in case of multiple runs + # ------------------------------------------------------------------------------------ + for observation in observations_orig: + + obs_file = f'{observation}_obs.{window_begin}.nc4' + geo_file = f'{observation}_geovals.{window_begin}.nc4' + + # If obs_file exists remove it + if os.path.exists(os.path.join(self.cycle_dir(), obs_file)): + os.remove(os.path.join(self.cycle_dir(), obs_file)) + + # If geo exists remove it + if produce_geovals: + if os.path.exists(os.path.join(self.cycle_dir(), geo_file)): + os.remove(os.path.join(self.cycle_dir(), geo_file)) + # First process the conventional data (if needed) # ----------------------------------------------- for gsi_type_to_process in gsi_types_to_process: @@ -167,6 +186,7 @@ def execute(self): # List of files for that instrument ioda_path_files = glob.glob(os.path.join(self.cycle_dir(), ioda_type_pattern)) + ioda_path_files = sorted(ioda_path_files) # For sfc make sure there are no surface ship files if needed_ioda_type == 'sfc': @@ -216,16 +236,6 @@ def execute(self): if produce_geovals: geo_dir = self.cycle_dir() - # Remove wind_reduction_factor_at_10m from non-uv geoval files - geoval_files = glob.glob(os.path.join(self.cycle_dir(), - f'{needed_ioda_type}_*_geoval_*.nc4')) - for geoval_file in geoval_files: - if f'{needed_ioda_type}_uv_geoval_' not in geoval_file: - var_remove_command = ['ncks', '-O', '-x', '-v', - 'wind_reduction_factor_at_10m', - geoval_file, geoval_file] - run_track_log_subprocess(self.logger, var_remove_command) - combine_obsspace(ioda_path_files, new_name, geo_dir) # Remove input files @@ -293,6 +303,9 @@ def execute(self): if any('avhrr' in item for item in observations): avhrr_files = glob.glob(os.path.join(self.cycle_dir(), f'avhrr_*_obs_{gsi_datetime}.nc4')) + # Add geovals files + avhrr_files = avhrr_files + glob.glob(os.path.join(self.cycle_dir(), + f'avhrr_*_geoval_{gsi_datetime}.nc4')) for avhrr_file in avhrr_files: avhrr_file_newname = os.path.basename(avhrr_file).replace('avhrr_', 'avhrr3_') os.rename(avhrr_file, os.path.join(self.cycle_dir(), avhrr_file_newname)) @@ -332,9 +345,26 @@ def execute(self): os.rename(ioda_geoval_in, os.path.join(self.cycle_dir(), ioda_geoval_out)) + # Bump the time in the all observation files by 1 second + # (because JEDI does not include observations equal to + # the beginning of the window, while GSI does). IODA wrote + # the files in such a way that h5py needs to be used not + # netcdf4 to append the files in place. + # ----------------------------------------------------- + wind_begin = self.cycle_time_dto() - isodate.parse_duration(window_offset) + ioda_begin = datetime.datetime(1970, 1, 1) + seconds_to_window_begin = (wind_begin - ioda_begin).total_seconds() + + for observation in observations_orig: + obs_file = os.path.join(self.cycle_dir(), f'{observation}.{window_begin}.nc4') + self.logger.info(f'One second bump for obs at window beg for ({observation})') + with h5py.File(obs_file, 'a') as fh: + variable = fh['MetaData']['dateTime'] + window_begin_ind = np.where(variable[:] == seconds_to_window_begin) + variable[window_begin_ind] += 1 + # Remove left over files # ------------------------------ - self.logger.info('Removing residual files...') patterns = [ diff --git a/src/swell/tasks/run_jedi_letkf_executable.py b/src/swell/tasks/run_jedi_letkf_executable.py new file mode 100644 index 00000000..043bab96 --- /dev/null +++ b/src/swell/tasks/run_jedi_letkf_executable.py @@ -0,0 +1,117 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + + +# -------------------------------------------------------------------------------------------------- + + +import os +import yaml + +from swell.tasks.base.task_base import taskBase +from swell.utilities.run_jedi_executables import jedi_dictionary_iterator, run_executable + + +# -------------------------------------------------------------------------------------------------- + + +class RunJediLetkfExecutable(taskBase): + + # ---------------------------------------------------------------------------------------------- + + def execute(self): + + # Jedi application name + # --------------------- + jedi_application = 'letkf' + + # Parse configuration + # ------------------- + window_type = self.config.window_type() + window_offset = self.config.window_offset() + background_time_offset = self.config.background_time_offset() + observations = self.config.observations() + jedi_forecast_model = self.config.jedi_forecast_model(None) + generate_yaml_and_exit = self.config.generate_yaml_and_exit(False) + + # Compute data assimilation window parameters + background_time = self.da_window_params.background_time(window_offset, + background_time_offset) + local_background_time = self.da_window_params.local_background_time(window_offset, + window_type) + local_background_time_iso = self.da_window_params.local_background_time_iso(window_offset, + window_type) + window_begin = self.da_window_params.window_begin(window_offset) + window_begin_iso = self.da_window_params.window_begin_iso(window_offset) + + # Populate jedi interface templates dictionary + # -------------------------------------------- + self.jedi_rendering.add_key('window_begin_iso', window_begin_iso) + self.jedi_rendering.add_key('window_length', self.config.window_length()) + + # Background + self.jedi_rendering.add_key('horizontal_resolution', self.config.horizontal_resolution()) + self.jedi_rendering.add_key('local_background_time', local_background_time) + self.jedi_rendering.add_key('local_background_time_iso', local_background_time_iso) + self.jedi_rendering.add_key('ensemble_num_members', self.config.ensemble_num_members()) + + # Geometry + self.jedi_rendering.add_key('vertical_resolution', self.config.vertical_resolution()) + self.jedi_rendering.add_key('npx_proc', self.config.npx_proc(None)) + self.jedi_rendering.add_key('npy_proc', self.config.npy_proc(None)) + self.jedi_rendering.add_key('total_processors', self.config.total_processors(None)) + + # Observations + self.jedi_rendering.add_key('background_time', background_time) + self.jedi_rendering.add_key('crtm_coeff_dir', self.config.crtm_coeff_dir(None)) + self.jedi_rendering.add_key('window_begin', window_begin) + + # Jedi configuration file + # ----------------------- + jedi_config_file = os.path.join(self.cycle_dir(), f'jedi_{jedi_application}_config.yaml') + + # Output log file + # --------------- + output_log_file = os.path.join(self.cycle_dir(), f'jedi_{jedi_application}_log.log') + + # Open the JEDI config file and fill initial templates + # ---------------------------------------------------- + jedi_config_dict = self.jedi_rendering.render_oops_file(f'{jedi_application}{window_type}') + + # Perform complete template rendering + # ----------------------------------- + jedi_dictionary_iterator(jedi_config_dict, self.jedi_rendering, window_type, observations, + jedi_forecast_model) + + # Write the expanded dictionary to YAML file + # ------------------------------------------ + with open(jedi_config_file, 'w') as jedi_config_file_open: + yaml.dump(jedi_config_dict, jedi_config_file_open, default_flow_style=False) + + # Get the JEDI interface metadata + # ------------------------------- + model_component_meta = self.jedi_rendering.render_interface_meta() + + # Compute number of processors + # ---------------------------- + np = eval(str(model_component_meta['total_processors'])) + + # Jedi executable name + # -------------------- + jedi_executable = model_component_meta['executables'][f'{jedi_application}{window_type}'] + jedi_executable_path = os.path.join(self.experiment_path(), 'jedi_bundle', 'build', 'bin', + jedi_executable) + + # Run the JEDI executable + # ----------------------- + if not generate_yaml_and_exit: + self.logger.info('Running '+jedi_executable_path+' with '+str(np)+' processors.') + run_executable(self.logger, self.cycle_dir(), np, jedi_executable_path, + jedi_config_file, output_log_file) + else: + self.logger.info('YAML generated, now exiting.') + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/tasks/run_jedi_ufo_tests_executable.py b/src/swell/tasks/run_jedi_ufo_tests_executable.py index b451e114..e779db79 100644 --- a/src/swell/tasks/run_jedi_ufo_tests_executable.py +++ b/src/swell/tasks/run_jedi_ufo_tests_executable.py @@ -66,6 +66,7 @@ def execute(self): # ------------------------------------- conventional_types = [ 'aircraft', + 'pibal', 'satwind', 'scatwind', 'sfcship', @@ -104,7 +105,7 @@ def execute(self): # Copies for each kind of test # ---------------------------- - jedi_operator_dict = copy.deepcopy(jedi_config_dict) + # jedi_operator_dict = copy.deepcopy(jedi_config_dict) jedi_filter_dict = copy.deepcopy(jedi_config_dict) # Loop through observations and moderate based on test needs @@ -116,22 +117,22 @@ def execute(self): ufo_tests_obs = update_dict(ufo_tests_default, ufo_tests_obs) # Merge the ufo_tests_obs dictionary with the observation dictionary - jedi_operator_dict['observations'][index].update(ufo_tests_obs['operator_test']) + # jedi_operator_dict['observations'][index].update(ufo_tests_obs['operator_test']) jedi_filter_dict['observations'][index].update(ufo_tests_obs['filter_test']) - # Remove filters from operator test - if 'obs filters' in jedi_operator_dict['observations'][index]: - del jedi_operator_dict['observations'][index]['obs filters'] + # # Remove filters from operator test + # if 'obs filters' in jedi_operator_dict['observations'][index]: + # del jedi_operator_dict['observations'][index]['obs filters'] # Write configuration files for the tests # --------------------------------------- - file = os.path.join(self.cycle_dir(), 'jedi_test_ObsOperator_config.yaml') - with open(file, 'w') as jedi_config_file_open: - yaml.dump(jedi_operator_dict, jedi_config_file_open, default_flow_style=False) + # file = os.path.join(self.cycle_dir(), 'jedi_test_ObsOperator_config.yaml') + # with open(file, 'w') as jedi_config_file_open: + # yaml.dump(jedi_operator_dict, jedi_config_file_open, default_flow_style=False) - file = os.path.join(self.cycle_dir(), 'jedi_test_ObsOperatorTLAD_config.yaml') - with open(file, 'w') as jedi_config_file_open: - yaml.dump(jedi_operator_dict, jedi_config_file_open, default_flow_style=False) + # file = os.path.join(self.cycle_dir(), 'jedi_test_ObsOperatorTLAD_config.yaml') + # with open(file, 'w') as jedi_config_file_open: + # yaml.dump(jedi_operator_dict, jedi_config_file_open, default_flow_style=False) file = os.path.join(self.cycle_dir(), 'jedi_test_ObsFilters_config.yaml') with open(file, 'w') as jedi_config_file_open: diff --git a/src/swell/tasks/stage_jedi.py b/src/swell/tasks/stage_jedi.py index 8e1d74cd..8bdf5db2 100644 --- a/src/swell/tasks/stage_jedi.py +++ b/src/swell/tasks/stage_jedi.py @@ -52,7 +52,7 @@ def execute(self): if not os.path.exists(stage_pathfile): self.logger.info('No stage dictionary was found for this configuration') - exit(0) + return # Open file and template it stage_dict = self.jedi_rendering.render_interface_model(stage_file) diff --git a/src/swell/tasks/task_questions.yaml b/src/swell/tasks/task_questions.yaml index bcebbe67..538c7a02 100644 --- a/src/swell/tasks/task_questions.yaml +++ b/src/swell/tasks/task_questions.yaml @@ -76,6 +76,7 @@ background_time_offset: - GetObservations - GsiBcToIoda - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable - SaveObsDiags @@ -127,11 +128,22 @@ crtm_coeff_dir: - GetObservations - GsiBcToIoda - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable - SaveObsDiags type: string +ensemble_num_members: + ask_question: false + default_value: defer_to_model + models: + - geos_atmosphere + prompt: How many members comprise the ensemble? + tasks: + - RunJediLetkfExecutable + type: integer + existing_geos_gcm_build_path: ask_question: true default_value: defer_to_platform @@ -194,6 +206,7 @@ generate_yaml_and_exit: prompt: Generate JEDI executable YAML and exit? tasks: - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable type: boolean @@ -312,6 +325,7 @@ horizontal_resolution: - GenerateBClimatologyByLinking - GetBackground - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable - StageJedi type: string-drop-list @@ -351,6 +365,7 @@ jedi_forecast_model: prompt: What forecast model should be used within JEDI for 4D window propagation? tasks: - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable type: string-drop-list @@ -383,6 +398,7 @@ npx_proc: - GenerateBClimatology - GenerateBClimatologyByLinking - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable type: integer @@ -396,6 +412,7 @@ npy_proc: - GenerateBClimatology - GenerateBClimatologyByLinking - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable type: integer @@ -444,11 +461,22 @@ observations: - GsiBcToIoda - GsiNcdiagToIoda - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable - SaveObsDiags type: string-check-list +path_to_ensemble: + ask_question: true + default_value: defer_to_model + models: + - geos_atmosphere + prompt: What is the path to where ensemble members are stored? + tasks: + - GetEnsemble + type: string + path_to_geos_adas_background: ask_question: true default_value: defer_to_model @@ -543,6 +571,7 @@ total_processors: - GenerateBClimatology - GenerateBClimatologyByLinking - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable type: integer @@ -557,6 +586,7 @@ vertical_resolution: - GenerateBClimatology - GenerateBClimatologyByLinking - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable - StageJedi type: string-drop-list @@ -570,9 +600,11 @@ window_length: tasks: - GetBackground - GetGeovals + - GetGsiBc - GetObservations - MoveDaRestart - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable - StoreBackground @@ -593,6 +625,7 @@ window_offset: - GsiBcToIoda - GsiNcdiagToIoda - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediUfoTestsExecutable - RunJediVariationalExecutable - SaveObsDiags @@ -612,6 +645,7 @@ window_type: - GenerateBClimatology - GetBackground - RunJediHofxExecutable + - RunJediLetkfExecutable - RunJediVariationalExecutable - StoreBackground type: string-drop-list diff --git a/src/swell/test/suite_tests/3dvar-stable_build-ocean-5deg.yaml b/src/swell/test/suite_tests/3dvar-tier1.yaml similarity index 100% rename from src/swell/test/suite_tests/3dvar-stable_build-ocean-5deg.yaml rename to src/swell/test/suite_tests/3dvar-tier1.yaml diff --git a/src/swell/test/suite_tests/3dvar_cycle-stable_build-ocean-5deg.yaml b/src/swell/test/suite_tests/3dvar_cycle-tier1.yaml similarity index 100% rename from src/swell/test/suite_tests/3dvar_cycle-stable_build-ocean-5deg.yaml rename to src/swell/test/suite_tests/3dvar_cycle-tier1.yaml diff --git a/src/swell/test/suite_tests/convert_ncdiags-stable_build.yaml b/src/swell/test/suite_tests/convert_ncdiags-tier1.yaml similarity index 86% rename from src/swell/test/suite_tests/convert_ncdiags-stable_build.yaml rename to src/swell/test/suite_tests/convert_ncdiags-tier1.yaml index c89848b4..bfff604c 100644 --- a/src/swell/test/suite_tests/convert_ncdiags-stable_build.yaml +++ b/src/swell/test/suite_tests/convert_ncdiags-tier1.yaml @@ -19,3 +19,4 @@ models: - gsi_ncdiags/aircraft/*.nc4 - gsi_ncdiags/aircraft - gsi_ncdiags + path_to_gsi_nc_diags: /discover/nobackup/drholdaw/SwellTestData/ufo_testing/ncdiagv2/%Y%m%d%H diff --git a/src/swell/test/suite_tests/forecast_geos-stable_build.yaml b/src/swell/test/suite_tests/forecast_geos-tier1.yaml similarity index 100% rename from src/swell/test/suite_tests/forecast_geos-stable_build.yaml rename to src/swell/test/suite_tests/forecast_geos-tier1.yaml diff --git a/src/swell/test/suite_tests/geosadas-stable_build.yaml b/src/swell/test/suite_tests/geosadas-stable_build.yaml deleted file mode 100644 index 476c93ce..00000000 --- a/src/swell/test/suite_tests/geosadas-stable_build.yaml +++ /dev/null @@ -1,15 +0,0 @@ -jedi_build_method: use_existing -existing_jedi_source_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/source/ -existing_jedi_build_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/build/ -bundles: REMOVE -model_components: ['geos_atmosphere'] -models: - geos_atmosphere: - observations: - - sondes - - amsua_n19 - produce_geovals: false - window_type: 3D - gradient_norm_reduction: 1e-6 - number_of_iterations: - - 50 diff --git a/src/swell/test/suite_tests/geosadas-tier1.yaml b/src/swell/test/suite_tests/geosadas-tier1.yaml new file mode 100644 index 00000000..9ff9be29 --- /dev/null +++ b/src/swell/test/suite_tests/geosadas-tier1.yaml @@ -0,0 +1,47 @@ +jedi_build_method: use_existing +existing_jedi_source_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/source/ +existing_jedi_build_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/build/ +bundles: REMOVE +model_components: ['geos_atmosphere'] +models: + geos_atmosphere: + horizontal_resolution: '13' + observations: + - aircraft + - airs_aqua + - amsr2_gcom-w1 + - amsua_aqua + - amsua_metop-b + - amsua_metop-c + - amsua_n15 + - amsua_n18 + - amsua_n19 + - atms_n20 + - atms_npp + - avhrr3_metop-b + - avhrr3_n18 + - avhrr3_n19 + - cris-fsr_n20 + - cris-fsr_npp + - gmi_gpm + #- gps + - iasi_metop-b + - iasi_metop-c + - mhs_metop-b + - mhs_metop-c + - mhs_n19 + - mls55_aura + - omi_aura + - ompsnm_npp + #- pibal + - satwind + - scatwind + #- sfcship + #- sfc + #- sondes + - ssmis_f17 + produce_geovals: false + window_type: 3D + gradient_norm_reduction: 1e-6 + number_of_iterations: + - 5 diff --git a/src/swell/test/suite_tests/hofx-stable_build.yaml b/src/swell/test/suite_tests/hofx-stable_build.yaml deleted file mode 100644 index 3415b2ae..00000000 --- a/src/swell/test/suite_tests/hofx-stable_build.yaml +++ /dev/null @@ -1,13 +0,0 @@ -jedi_build_method: use_existing -existing_jedi_source_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/source/ -existing_jedi_build_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/build/ -bundles: REMOVE -models: - geos_atmosphere: - observations: - - aircraft - - gmi_gpm - - amsr2_gcom-w1 - - mls55_aura - - omi_aura - - ompsnm_npp diff --git a/src/swell/test/suite_tests/hofx-tier1.yaml b/src/swell/test/suite_tests/hofx-tier1.yaml new file mode 100644 index 00000000..cafd995e --- /dev/null +++ b/src/swell/test/suite_tests/hofx-tier1.yaml @@ -0,0 +1,42 @@ +jedi_build_method: use_existing +existing_jedi_source_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/source/ +existing_jedi_build_directory: /discover/nobackup/gmao_ci/swell/tier2/stable/build_jedi/jedi_bundle/build/ +models: + geos_atmosphere: + horizontal_resolution: '91' + observations: + - aircraft + - airs_aqua + - amsr2_gcom-w1 + - amsua_aqua + - amsua_metop-b + - amsua_metop-c + - amsua_n15 + - amsua_n18 + - amsua_n19 + - atms_n20 + - atms_npp + - avhrr3_metop-b + - avhrr3_n18 + - avhrr3_n19 + - cris-fsr_n20 + - cris-fsr_npp + - gmi_gpm + #- gps + - iasi_metop-b + - iasi_metop-c + - mhs_metop-b + - mhs_metop-c + - mhs_n19 + - mls55_aura + - omi_aura + - ompsnm_npp + - pibal + - satwind + - scatwind + - sfcship + - sfc + - sondes + - ssmis_f17 + obs_experiment: x0048v2 + geovals_experiment: x0048v2-geovals diff --git a/src/swell/test/suite_tests/ufo_testing-stable_build.yaml b/src/swell/test/suite_tests/ufo_testing-tier1.yaml similarity index 83% rename from src/swell/test/suite_tests/ufo_testing-stable_build.yaml rename to src/swell/test/suite_tests/ufo_testing-tier1.yaml index 6ee22310..4a14ac8d 100644 --- a/src/swell/test/suite_tests/ufo_testing-stable_build.yaml +++ b/src/swell/test/suite_tests/ufo_testing-tier1.yaml @@ -33,14 +33,14 @@ models: - mhs_metop-c - mhs_n19 #- mls55_aura - #- obsop_name_map #- omi_aura #- ompsnm_npp + - pibal - satwind - scatwind - #- sfcship - #- sfc - #- sondes + - sfc + - sfcship + - sondes - ssmis_f17 produce_geovals: false clean_patterns: @@ -48,6 +48,7 @@ models: - '*.txt' - '*.log' - '*.yaml' + - '*.csv' - gsi_bcs/*.nc4 - gsi_bcs/*.txt - gsi_bcs/*.yaml @@ -56,3 +57,6 @@ models: - gsi_ncdiags/aircraft/*.nc4 - gsi_ncdiags/aircraft - gsi_ncdiags + path_to_gsi_nc_diags: /discover/nobackup/drholdaw/SwellTestData/ufo_testing/ncdiagv2/%Y%m%d%H + obs_experiment: x0048v2 + geovals_experiment: x0048v2-geovals diff --git a/src/swell/utilities/build.py b/src/swell/utilities/build.py index 64780271..145e15d9 100644 --- a/src/swell/utilities/build.py +++ b/src/swell/utilities/build.py @@ -62,6 +62,10 @@ def set_jedi_bundle_config(bundles, path_to_source, path_to_build, cores_to_use_ jedi_bundle_config['clone_options']['bundles'] = bundles jedi_bundle_config['clone_options']['path_to_source'] = path_to_source + # Add GSIbec as extra repo + if 'fv3-jedi' in bundles: + jedi_bundle_config['clone_options']['extra_repos'] = ['gsibec'] + # Set the configure stage options jedi_bundle_config['configure_options']['path_to_build'] = path_to_build diff --git a/src/swell/utilities/datetime.py b/src/swell/utilities/datetime.py index 956cb7e7..904291c1 100644 --- a/src/swell/utilities/datetime.py +++ b/src/swell/utilities/datetime.py @@ -18,6 +18,7 @@ 'directory_format': '%Y%m%dT%H%M%SZ', # yyyymmddThhMMssZ for directory formats 'iso_format': '%Y-%m-%dT%H:%M:%SZ', # yyyy-mm-ddThh:MM:ssZ ISO format 'gsi_nc_diag_format': '%Y%m%d_%Hz', # yyyymmdd_hhz Format for GSI netcdf diagnostic files + 'short_date': '%Y%m%d%H', # yyyymmddhh Short format } # --------------------------------------------------------------------------------------------------