Skip to content

Commit

Permalink
Phase 2 validation: sonde (adpupa 120/220) (#245)
Browse files Browse the repository at this point in the history
## Description
Finished phase 2 (FV3-JEDI vs GSI) testing of sonde (adpupa 120/220). Most of each yaml was inherited from the mesonet yamls. The main difference was using the `ObsErrorFactorConventional` which also required the use of pre-sorting via `obsgrouping` in the obs space. All tests were shown to run successfully using the online domain check.
Phase 2 doesn't guarantee each yaml will fully work with MPAS-JEDI (due to certain features not being ready in MPAS-JEDI and not due to issues with the yamls themselves).

I also want to note that in GSI I used `ext_sonde=.false.` and `time_window_max=0.99`. We should not be using the `ext_sonde` in GSI which has since been fixed in the latest ctest GSI case. I'm not sure why `time_window_max=1.0` still gave more obs than expected. The correct setting should be `time_window_max=1.5`, but some more work is needed to extend the assimilation window for JEDI. This difference in settings should not affect results.

## Issue(s) addressed
Resolves/Results are documented in Issue - #232
  • Loading branch information
delippi authored Dec 13, 2024
1 parent c3ce325 commit 2968d5b
Show file tree
Hide file tree
Showing 3 changed files with 697 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
- obs space:
name: adpupa_airTemperature_120
distribution:
name: "@DISTRIBUTION@"
halo size: 100e3
obsdatain:
engine:
type: H5File
obsfile: "@OBSFILE@"
obsgrouping:
group variables: ["stationIdentification"]
sort variable: "pressure"
sort order: "descending"
obsdataout:
engine:
type: H5File
obsfile: jdiag_adpupa_airTemperature_120.nc4
allow overwrite: true
io pool:
max pool size: 1
observed variables: [airTemperature]
simulated variables: [airTemperature]

obs operator:
name: Composite
components:
- name: VertInterp
vertical coordinate: air_pressure
observation vertical coordinate: pressure
observation vertical coordinate group: MetaData
interpolation method: log-linear
#gsi geovals:
# filename: "obsout/sondes_tsen_geoval_2022052619.nc4"
# levels_are_top_down: False
variables:
- name: airTemperature

obs error:
covariance model: diagonal

obs localizations:
- localization method: Horizontal Gaspari-Cohn
lengthscale: 300e3 # orig

obs filters:
# ------------------
# airTemperature (120)
# ------------------
# Reject all obs with QualityMarker > 3
- filter: RejectList
apply at iterations: 0,1
where:
- variable: ObsType/airTemperature
is_in: 120
- 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
- filter: Perform Action
filter variables:
- name: airTemperature
where:
- variable: ObsType/airTemperature
is_in: 120
action:
name: assign error
error function:
name: ObsFunction/ObsErrorModelStepwiseLinear
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]
errors: [1.2671, 1.3302, 1.4017, 1.4543, 1.4553, 1.3865, 1.2696, 1.1458, 1.0461, 0.98493, 0.95259, 0.9353, 0.92541, 0.92565, 0.94536, 0.99513, 1.0799, 1.1885, 1.2894, 1.3559, 1.3854, 1.3857, 1.3525, 1.3019, 1.2818, 1.3112, 1.3698, 1.4263, 1.4654, 1.4868, 1.4964, 1.4992, 1.4962]

# Error inflation based on pressure check (setupt.f90)
- filter: Perform Action
filter variables:
- name: airTemperature
where:
- variable: ObsType/airTemperature
is_in: 120
action:
name: inflate error
inflation variable:
name: ObsFunction/ObsErrorFactorPressureCheck
options:
variable: airTemperature
inflation factor: 8.0

# Error inflation based on errormod (qcmod.f90)
- filter: Perform Action
filter variables:
- name: airTemperature
where:
- variable: ObsType/airTemperature
is_in: 120
action:
name: inflate error
inflation variable:
name: ObsFunction/ObsErrorFactorConventional
options:
inflate variables: [airTemperature]
pressure: MetaData/pressure

# 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
threshold: 7.0
action:
name: reject
where:
- variable: ObsType/airTemperature
- variable: QualityMarker/airTemperature
is_not_in: 3
defer to post: true

# 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: ObsType/airTemperature
- variable: QualityMarker/airTemperature
is_in: 3
defer to post: true

# Re-assign err ObsErrorData <--- TempObsErrorData after gross error check.
- filter: Perform Action
apply at iterations: 0,1
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/adpupa_geovals_rrfs.nc4
Loading

0 comments on commit 2968d5b

Please sign in to comment.