Skip to content

Commit e71b667

Browse files
authored
Add errtable comparison tool and align selected wind obs errors with GSI (NOAA-EMC#571)
* Adds a new `check_j2_errtable.py` utility for comparing JEDI YAML `ObsErrorModelStepwiseLinear` pressure-dependent error tables against `errtable.rrfs`. * Updates selected SATWND YAMLs for types 245, 246, and 247 and satellite identifiers 270/272 to align error handling and QC behavior with GSI. * Adds `use_error_inflation` Jinja guards around the SATWND error inflation blocks so error inflation can be toggled consistently for diagnostic experiments. * Moves the SATWND `0.5` observation-error scaling earlier in the filter sequence, alongside the other error inflation steps, rather than applying it later after additional QC filters. * Relaxes SATWND wind ObsValue bounds from `[-130, 130]` to `[-200, 200]`. * Updates SATWND type 246 pressure bounds from `150-400 mb` to `150-300 mb`. * Updates SATWND type 247 initial errors to use the large GSI-style placeholder error values from `errtable.rrfs`. * Updates `sfcshp_winds_284.yaml.j2` initial wind errors from `1.079` to `1.5874`. * Updates affected FV3-JEDI 3DVar reference test outputs.
1 parent a075cc9 commit e71b667

10 files changed

Lines changed: 894 additions & 237 deletions

parm/jcb-rdas/observations/atmosphere/satwnd_winds_245_270.yaml.j2

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
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]
141141
errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]
142142

143+
{% if use_error_inflation | default(true) %} # BEGIN use_error_inflation
143144
# Error inflation (windEastward) based on pressure check (setupw.f90)
144145
- filter: Perform Action
145146
udescriptor: "error_inflation_pressure_check"
@@ -176,14 +177,30 @@
176177
variable: windNorthward
177178
inflation factor: 4.0
178179

180+
# Halve the ob error (based on read_satwnd.f90)
181+
- filter: Perform Action
182+
udescriptor: "ob_error_inflation"
183+
filter variables:
184+
- name: windEastward
185+
- name: windNorthward
186+
where:
187+
- variable: ObsType/windEastward
188+
is_in: 245
189+
- variable: MetaData/satelliteIdentifier
190+
is_in: 270
191+
action:
192+
name: inflate error
193+
inflation factor: 0.5
194+
{% endif %} # END use_error_inflation
195+
179196
# Bounds Check (ObsValue)
180197
- filter: Bounds Check
181198
udescriptor: "bounds_check_ObsValue"
182199
filter variables:
183200
- name: windEastward
184201
- name: windNorthward
185-
minvalue: -130
186-
maxvalue: 130
202+
minvalue: -200
203+
maxvalue: 200
187204
where:
188205
- variable: ObsType/windEastward
189206
is_in: 245
@@ -332,21 +349,6 @@
332349
action:
333350
name: reject
334351

335-
# Halve the ob error (based on read_satwnd.f90)
336-
- filter: Perform Action
337-
udescriptor: "ob_error_inflation"
338-
filter variables:
339-
- name: windEastward
340-
- name: windNorthward
341-
where:
342-
- variable: ObsType/windEastward
343-
is_in: 245
344-
- variable: MetaData/satelliteIdentifier
345-
is_in: 270
346-
action:
347-
name: inflate error
348-
inflation factor: 0.5
349-
350352
# Reject when pressure is more than 50 mb above tropopause
351353
- filter: Difference Check
352354
udescriptor: "difference_check_tropopause_pressure"

parm/jcb-rdas/observations/atmosphere/satwnd_winds_245_272.yaml.j2

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
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]
141141
errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0]
142142

143+
{% if use_error_inflation | default(true) %} # BEGIN use_error_inflation
143144
# Error inflation (windEastward) based on pressure check (setupw.f90)
144145
- filter: Perform Action
145146
udescriptor: "error_inflation_pressure_check"
@@ -176,14 +177,30 @@
176177
variable: windNorthward
177178
inflation factor: 4.0
178179

180+
# Halve the ob error (based on read_satwnd.f90)
181+
- filter: Perform Action
182+
udescriptor: "ob_error_inflation"
183+
filter variables:
184+
- name: windEastward
185+
- name: windNorthward
186+
where:
187+
- variable: ObsType/windEastward
188+
is_in: 245
189+
- variable: MetaData/satelliteIdentifier
190+
is_in: 272
191+
action:
192+
name: inflate error
193+
inflation factor: 0.5
194+
{% endif %} # END use_error_inflation
195+
179196
# Bounds Check (ObsValue)
180197
- filter: Bounds Check
181198
udescriptor: "bounds_check_ObsValue"
182199
filter variables:
183200
- name: windEastward
184201
- name: windNorthward
185-
minvalue: -130
186-
maxvalue: 130
202+
minvalue: -200
203+
maxvalue: 200
187204
where:
188205
- variable: ObsType/windEastward
189206
is_in: 245
@@ -332,21 +349,6 @@
332349
action:
333350
name: reject
334351

335-
# Halve the ob error (based on read_satwnd.f90)
336-
- filter: Perform Action
337-
udescriptor: "ob_error_inflation"
338-
filter variables:
339-
- name: windEastward
340-
- name: windNorthward
341-
where:
342-
- variable: ObsType/windEastward
343-
is_in: 245
344-
- variable: MetaData/satelliteIdentifier
345-
is_in: 272
346-
action:
347-
name: inflate error
348-
inflation factor: 0.5
349-
350352
# Reject when pressure is more than 50 mb above tropopause
351353
- filter: Difference Check
352354
udescriptor: "difference_check_tropopause_pressure"

parm/jcb-rdas/observations/atmosphere/satwnd_winds_246_270.yaml.j2

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
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]
141141
errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.1, 5.0, 6.0, 6.3, 6.6, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0]
142142

143+
{% if use_error_inflation | default(true) %} # BEGIN use_error_inflation
143144
# Error inflation (windEastward) based on pressure check (setupw.f90)
144145
- filter: Perform Action
145146
udescriptor: "error_inflation_pressure_check"
@@ -176,14 +177,30 @@
176177
variable: windNorthward
177178
inflation factor: 4.0
178179

180+
# Halve the ob error (based on read_satwnd.f90)
181+
- filter: Perform Action
182+
udescriptor: "ob_error_inflation"
183+
filter variables:
184+
- name: windEastward
185+
- name: windNorthward
186+
where:
187+
- variable: ObsType/windEastward
188+
is_in: 246
189+
- variable: MetaData/satelliteIdentifier
190+
is_in: 270
191+
action:
192+
name: inflate error
193+
inflation factor: 0.5
194+
{% endif %} # END use_error_inflation
195+
179196
# Bounds Check (ObsValue)
180197
- filter: Bounds Check
181198
udescriptor: "bounds_check_ObsValue"
182199
filter variables:
183200
- name: windEastward
184201
- name: windNorthward
185-
minvalue: -130
186-
maxvalue: 130
202+
minvalue: -200
203+
maxvalue: 200
187204
where:
188205
- variable: ObsType/windEastward
189206
is_in: 246
@@ -227,7 +244,7 @@
227244
action:
228245
name: reject
229246

230-
# Reject obs with pressure < 150 mb and > 400 mb
247+
# Reject obs with pressure < 150 mb and > 300 mb
231248
- filter: Bounds Check
232249
udescriptor: "bounds_check_pressure"
233250
filter variables:
@@ -236,7 +253,7 @@
236253
test variables:
237254
- name: MetaData/pressure
238255
minvalue: 15000.
239-
maxvalue: 40000.
256+
maxvalue: 30000.
240257
where:
241258
- variable: ObsType/windEastward
242259
is_in: 246
@@ -315,21 +332,6 @@
315332
action:
316333
name: reject
317334

318-
# Halve the ob error (based on read_satwnd.f90)
319-
- filter: Perform Action
320-
udescriptor: "ob_error_inflation"
321-
filter variables:
322-
- name: windEastward
323-
- name: windNorthward
324-
where:
325-
- variable: ObsType/windEastward
326-
is_in: 246
327-
- variable: MetaData/satelliteIdentifier
328-
is_in: 270
329-
action:
330-
name: inflate error
331-
inflation factor: 0.5
332-
333335
# Reject when pressure is more than 50 mb above tropopause
334336
- filter: Difference Check
335337
udescriptor: "difference_check_tropopause_pressure"

parm/jcb-rdas/observations/atmosphere/satwnd_winds_246_272.yaml.j2

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@
140140
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]
141141
errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.1, 5.0, 6.0, 6.3, 6.6, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0]
142142

143+
{% if use_error_inflation | default(true) %} # BEGIN use_error_inflation
143144
# Error inflation (windEastward) based on pressure check (setupw.f90)
144145
- filter: Perform Action
145146
udescriptor: "error_inflation_pressure_check"
@@ -176,14 +177,30 @@
176177
variable: windNorthward
177178
inflation factor: 4.0
178179

180+
# Halve the ob error (based on read_satwnd.f90)
181+
- filter: Perform Action
182+
udescriptor: "ob_error_inflation"
183+
filter variables:
184+
- name: windEastward
185+
- name: windNorthward
186+
where:
187+
- variable: ObsType/windEastward
188+
is_in: 246
189+
- variable: MetaData/satelliteIdentifier
190+
is_in: 272
191+
action:
192+
name: inflate error
193+
inflation factor: 0.5
194+
{% endif %} # END use_error_inflation
195+
179196
# Bounds Check (ObsValue)
180197
- filter: Bounds Check
181198
udescriptor: "bounds_check_ObsValue"
182199
filter variables:
183200
- name: windEastward
184201
- name: windNorthward
185-
minvalue: -130
186-
maxvalue: 130
202+
minvalue: -200
203+
maxvalue: 200
187204
where:
188205
- variable: ObsType/windEastward
189206
is_in: 246
@@ -227,7 +244,7 @@
227244
action:
228245
name: reject
229246

230-
# Reject obs with pressure < 150 mb and > 400 mb
247+
# Reject obs with pressure < 150 mb and > 300 mb
231248
- filter: Bounds Check
232249
udescriptor: "bounds_check_pressure"
233250
filter variables:
@@ -236,7 +253,7 @@
236253
test variables:
237254
- name: MetaData/pressure
238255
minvalue: 15000.
239-
maxvalue: 40000.
256+
maxvalue: 30000.
240257
where:
241258
- variable: ObsType/windEastward
242259
is_in: 246
@@ -315,21 +332,6 @@
315332
action:
316333
name: reject
317334

318-
# Halve the ob error (based on read_satwnd.f90)
319-
- filter: Perform Action
320-
udescriptor: "ob_error_inflation"
321-
filter variables:
322-
- name: windEastward
323-
- name: windNorthward
324-
where:
325-
- variable: ObsType/windEastward
326-
is_in: 246
327-
- variable: MetaData/satelliteIdentifier
328-
is_in: 272
329-
action:
330-
name: inflate error
331-
inflation factor: 0.5
332-
333335
# Reject when pressure is more than 50 mb above tropopause
334336
- filter: Difference Check
335337
udescriptor: "difference_check_tropopause_pressure"

parm/jcb-rdas/observations/atmosphere/satwnd_winds_247_270.yaml.j2

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,10 @@
138138
xvar:
139139
name: MetaData/pressure
140140
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]
141-
errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.1, 5.0, 6.0, 6.3, 6.6, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0]
141+
errors: [1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0, 1000000000.0]
142+
#errors: [3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.8, 3.9, 3.9, 4.0, 4.0, 4.1, 5.0, 6.0, 6.3, 6.6, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0]
142143

144+
{% if use_error_inflation | default(true) %} # BEGIN use_error_inflation
143145
# Error inflation (windEastward) based on pressure check (setupw.f90)
144146
- filter: Perform Action
145147
udescriptor: "error_inflation_pressure_check"
@@ -176,14 +178,30 @@
176178
variable: windNorthward
177179
inflation factor: 4.0
178180

181+
# Halve the ob error (based on read_satwnd.f90)
182+
- filter: Perform Action
183+
udescriptor: "ob_error_inflation"
184+
filter variables:
185+
- name: windEastward
186+
- name: windNorthward
187+
where:
188+
- variable: ObsType/windEastward
189+
is_in: 247
190+
- variable: MetaData/satelliteIdentifier
191+
is_in: 270
192+
action:
193+
name: inflate error
194+
inflation factor: 0.5
195+
{% endif %} # END use_error_inflation
196+
179197
# Bounds Check (ObsValue)
180198
- filter: Bounds Check
181199
udescriptor: "bounds_check_ObsValue"
182200
filter variables:
183201
- name: windEastward
184202
- name: windNorthward
185-
minvalue: -130
186-
maxvalue: 130
203+
minvalue: -200
204+
maxvalue: 200
187205
where:
188206
- variable: ObsType/windEastward
189207
is_in: 247
@@ -296,21 +314,6 @@
296314
action:
297315
name: reject
298316

299-
# Halve the ob error (based on read_satwnd.f90)
300-
- filter: Perform Action
301-
udescriptor: "ob_error_inflation"
302-
filter variables:
303-
- name: windEastward
304-
- name: windNorthward
305-
where:
306-
- variable: ObsType/windEastward
307-
is_in: 247
308-
- variable: MetaData/satelliteIdentifier
309-
is_in: 270
310-
action:
311-
name: inflate error
312-
inflation factor: 0.5
313-
314317
# Reject when pressure is more than 50 mb above tropopause
315318
- filter: Difference Check
316319
udescriptor: "difference_check_tropopause_pressure"

0 commit comments

Comments
 (0)