Skip to content

Commit

Permalink
Phase 3 validation: updates for aircar yamls (#251)
Browse files Browse the repository at this point in the history
Finished Phase 3 testing with great results. I decided to combine Phase
2&3 since the new GSI/FV3 case is available to match the dateTime of the
MPAS case. Most of these updates were based on the sounding and mesonet
yamls which greatly accelerated this work. Phase 3 results for aircar
start in the associated issue with this
[comment](#106 (comment)).

 Issue(s) addressed #106
  • Loading branch information
delippi authored Jan 8, 2025
1 parent 3988400 commit 1ab496a
Show file tree
Hide file tree
Showing 4 changed files with 449 additions and 358 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
- obs space:
name: aircar
name: aircar_airTemperature_133
distribution:
name: "@DISTRIBUTION@"
halo size: 100e3
Expand All @@ -10,7 +10,7 @@
obsdataout:
engine:
type: H5File
obsfile: jdiag_AIRCAR_airTemperature_133.nc4
obsfile: jdiag_aircar_airTemperature_133.nc4
allow overwrite: true
io pool:
max pool size: 1
Expand Down Expand Up @@ -40,10 +40,36 @@

obs filters:
# ------------------
# airTemperature
# airTemperature (133)
# ------------------
# Reject all obs with QualityMarker > 3
- filter: RejectList
apply at iterations: 0,1
where:
- variable: ObsType/airTemperature
is_in: 133
- variable: QualityMarker/airTemperature
is_in: 4-15

# Time window filter
- filter: Domain Check
apply at iterations: 0,1
where:
- variable:
name: MetaData/timeOffset # units: s
minvalue: -5400
maxvalue: 5400

# Online domain check
- filter: Bounds Check
filter variables:
- name: airTemperature
test variables:
- name: GeoVaLs/observable_domain_mask
minvalue: 0.0
maxvalue: 0.5

# Initial error assignment
# 133
- filter: Perform Action
filter variables:
- name: airTemperature
Expand All @@ -59,28 +85,8 @@
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]
errors: [1.4088, 1.3361, 1.2395, 1.1379, 1.0505, 0.98154, 0.92451, 0.87349, 0.82829, 0.79582, 0.77562, 0.75911, 0.7408, 0.72571, 0.72719, 0.75204, 0.80129, 0.8696, 0.93292, 0.9672, 0.9831, 0.99132, 0.99603, 0.99854, 0.99963, 0.99997, 1.0, 0.99999, 0.99995, 0.99985, 0.99958, 0.99914, 0.99869]
defer to post: true

## Ajusted error after initial assignment (qcmod.f90)
#- filter: Perform Action
# filter variables:
# - name: airTemperature
# where:
# - variable: ObsType/airTemperature
# is_in: 133
# 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

# error inflation based on pressure check (setupt.f90)
# Error inflation based on pressure check (setupt.f90)
- filter: Perform Action
filter variables:
- name: airTemperature
Expand All @@ -93,56 +99,104 @@
name: ObsFunction/ObsErrorFactorPressureCheck
options:
variable: airTemperature
inflation factor: 0.0
#geovar_sfc_geomz: surface_geometric_height #FV3
#geovar_sfc_geomz: surface_altitude #MPAS
defer to post: true
inflation factor: 8.0

# Bounds Check
- filter: Bounds Check
apply at iterations: 0,1
filter variables:
- name: airTemperature
minvalue: 100
maxvalue: 400

# Create temporary ObsErrorData
- filter: Variable Assignment
apply at iterations: 0,1
assignments:
- name: TempObsErrorData/airTemperature
type: float
function:
name: ObsFunction/Arithmetic
options:
variables:
- name: ObsErrorData/airTemperature
defer to post: true

# Set ObsError set "error parameter" if < "max value"
- filter: Perform Action
apply at iterations: 0,1
filter variables:
- name: airTemperature
action:
name: assign error
error parameter: 1.3
where:
- variable:
name: ObsErrorData/airTemperature
maxvalue: 1.3
- variable:
name: ObsErrorData/airTemperature
value: is_valid
defer to post: true

# Set ObsError set "error parameter" if > "min value"
- filter: Perform Action
apply at iterations: 0,1
filter variables:
- name: airTemperature
action:
name: assign error
error parameter: 5.6
where:
- variable:
name: ObsErrorData/airTemperature
minvalue: 5.6
- variable:
name: ObsErrorData/airTemperature
value: is_valid
defer to post: true

# Gross Error Check
- filter: Background Check
apply at iterations: 0,1
filter variables:
- name: airTemperature
absolute threshold: 7.0
threshold: 7.0
where:
- variable: ObsType/airTemperature
is_in: 133
action:
name: reject
where:
- variable: ObsType/airTemperature
- variable: QualityMarker/airTemperature
is_not_in: 3
defer to post: true

- filter: Domain Check
# Gross Error Check: cgross*0.7 if QualityMarker=3
- filter: Background Check
apply at iterations: 0,1
filter variables:
- name: airTemperature
threshold: 4.9
action:
name: reject
where:
- variable:
name: MetaData/timeOffset
minvalue: -0.75
maxvalue: 0.75
- variable: ObsType/airTemperature
- variable: QualityMarker/airTemperature
is_in: 3
defer to post: true

- filter: Temporal Thinning
# Re-assign err ObsErrorData <--- TempObsErrorData after gross error check.
- filter: Perform Action
apply at iterations: 0,1
min_spacing: PT30M
seed_time: *analysisDate
category_variable:
name: MetaData/stationIdentification

## Print filter data
#- filter: Print Filter Data
# message: Printing filter data
# summary: true
# variables:
# - variable: MetaData/latitude
# - variable: MetaData/longitude
# - variable: MetaData/pressure
# - variable: ObsType/airTemperature
# - variable: ObsValue/airTemperature
# - variable: QCflagsData/airTemperature
filter variables:
- name: airTemperature
action:
name: assign error
error function: TempObsErrorData/airTemperature
where:
- variable:
name: TempObsErrorData/airTemperature
value: is_valid
defer to post: true

#- filter: GOMsaver
# filename: ./data/geovals/aircar_geovals_rrfs.nc4
Loading

0 comments on commit 1ab496a

Please sign in to comment.