-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Phase 2 validation: sonde (adpupa 120/220) (#245)
## 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
Showing
3 changed files
with
697 additions
and
0 deletions.
There are no files selected for viewing
221 changes: 221 additions & 0 deletions
221
rrfs-test/validated_yamls/templates/obtype_config/adpupa_airTemperature_120.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.