From 1ab496ae60f28c8373a8fbec2a6c6fd1a33ab94f Mon Sep 17 00:00:00 2001 From: delippi <31075260+delippi@users.noreply.github.com> Date: Wed, 8 Jan 2025 12:28:23 -0500 Subject: [PATCH] Phase 3 validation: updates for aircar yamls (#251) 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](https://github.com/NOAA-EMC/RDASApp/issues/106#issuecomment-2523995955). Issue(s) addressed #106 --- .../aircar_airTemperature_133.yaml | 164 ++++++++----- .../aircar_specificHumidity_133.yaml | 191 +++++++++------ .../obtype_config/aircar_uv_233.yaml | 229 ------------------ .../obtype_config/aircar_winds_233.yaml | 223 +++++++++++++++++ 4 files changed, 449 insertions(+), 358 deletions(-) delete mode 100644 rrfs-test/validated_yamls/templates/obtype_config/aircar_uv_233.yaml create mode 100644 rrfs-test/validated_yamls/templates/obtype_config/aircar_winds_233.yaml diff --git a/rrfs-test/validated_yamls/templates/obtype_config/aircar_airTemperature_133.yaml b/rrfs-test/validated_yamls/templates/obtype_config/aircar_airTemperature_133.yaml index fc04909a..4f4b2ad3 100644 --- a/rrfs-test/validated_yamls/templates/obtype_config/aircar_airTemperature_133.yaml +++ b/rrfs-test/validated_yamls/templates/obtype_config/aircar_airTemperature_133.yaml @@ -1,5 +1,5 @@ - obs space: - name: aircar + name: aircar_airTemperature_133 distribution: name: "@DISTRIBUTION@" halo size: 100e3 @@ -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 @@ -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 @@ -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 @@ -93,11 +99,9 @@ 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: @@ -105,44 +109,94 @@ 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 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/aircar_specificHumidity_133.yaml b/rrfs-test/validated_yamls/templates/obtype_config/aircar_specificHumidity_133.yaml index d9a78393..3782dfb9 100644 --- a/rrfs-test/validated_yamls/templates/obtype_config/aircar_specificHumidity_133.yaml +++ b/rrfs-test/validated_yamls/templates/obtype_config/aircar_specificHumidity_133.yaml @@ -1,5 +1,5 @@ - obs space: - name: aircar + name: aircar_specificHumidity_133 distribution: name: "@DISTRIBUTION@" halo size: 100e3 @@ -10,7 +10,7 @@ obsdataout: engine: type: H5File - obsfile: jdiag_AIRCAR_specificHumidity_133.nc4 + obsfile: jdiag_aircar_specificHumidity_133.nc4 allow overwrite: true io pool: max pool size: 1 @@ -40,10 +40,36 @@ obs filters: # ------------------ - # specificHumidity + # specificHumidity (133) # ------------------ + # Reject all obs with QualityMarker > 3 + - filter: RejectList + apply at iterations: 0,1 + where: + - variable: ObsType/specificHumidity + is_in: 133 + - variable: QualityMarker/specificHumidity + 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: specificHumidity + test variables: + - name: GeoVaLs/observable_domain_mask + minvalue: 0.0 + maxvalue: 0.5 + # Initial error assignment - # 133 - filter: Perform Action filter variables: - name: specificHumidity @@ -58,58 +84,25 @@ 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: [0.19455, 0.19064, 0.18488, 0.17877, 0.17342, 0.16976, 0.16777, 0.16696, 0.16605, 0.16522, 0.16637, 0.17086, 0.17791, 0.18492, 0.18996, 0.19294, 0.19447, 0.19597, 0.19748, 0.19866, 0.19941, 0.19979, 0.19994, 0.19999, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2] - defer to post: true + errors: [0.19455, 0.19064, 0.18488, 0.17877, 0.17342, 0.16976, 0.16777, 0.16696, 0.16605, 0.16522, 0.16637, 0.17086, 0.17791, 0.18492, 0.18996, 0.19294, 0.19447, 0.19597, 0.19748, 0.19866, 0.19941, 0.19979, 0.19994, 0.19999, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2] - ## Ajusted error after initial assignment (qcmod.f90) - #- filter: Perform Action - # filter variables: - # - name: specificHumidity - # where: - # - variable: ObsType/specificHumidity - # is_in: 133 - # action: - # name: inflate error - # inflation variable: - # name: ObsFunction/ObsErrorFactorConventional - # options: - # test QCflag: PreQC - # test QCthreshold: 3 - # inflate variables: [specificHumidity] - # pressure: MetaData/pressure - # distance threshold: -1. - # defer to post: true - - ## error inflation based on pressure check (setupq.f90) - #- filter: Perform Action - # filter variables: - # - name: specificHumidity - # where: - # - variable: ObsType/specificHumidity - # is_in: 133 - # action: - # name: inflate error - # inflation variable: - # name: ObsFunction/ObsErrorFactorPressureCheck - # options: - # variable: specificHumidity - # inflation factor: 0.0 - # #geovar_sfc_geomz: surface_geometric_height #FV3 - # #geovar_sfc_geomz: surface_altitude #MPAS - # request_saturation_specific_humidity_geovals: true - # defer to post: true - - # Reject specificHumidity with ObsType=130,131,135 + # Error inflation based on pressure check (setupq.f90) - filter: Perform Action filter variables: - name: specificHumidity where: - variable: ObsType/specificHumidity - is_in: 130,131,135 + is_in: 133 action: - name: reject - defer to post: true + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: specificHumidity + inflation factor: 8.0 + request_saturation_specific_humidity_geovals: true + # Bounds Check - filter: Bounds Check apply at iterations: 0,1 filter variables: @@ -117,44 +110,94 @@ minvalue: 0.0 maxvalue: 1.0 + # Create temporary ObsErrorData + - filter: Variable Assignment + apply at iterations: 0,1 + assignments: + - name: TempObsErrorData/specificHumidity + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/specificHumidity + defer to post: true + + # Set ObsError set "error parameter" if < "max value" + - filter: Perform Action + apply at iterations: 0,1 + filter variables: + - name: specificHumidity + action: + name: assign error + error parameter: 5.0 + where: + - variable: + name: ObsErrorData/specificHumidity + maxvalue: 5.0 + - variable: + name: ObsErrorData/specificHumidity + 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: specificHumidity + action: + name: assign error + error parameter: 50.0 + where: + - variable: + name: ObsErrorData/specificHumidity + minvalue: 50.0 + - variable: + name: ObsErrorData/specificHumidity + value: is_valid + defer to post: true + + # Gross Error Check - filter: Background Check apply at iterations: 0,1 filter variables: - name: specificHumidity - absolute threshold: 7.0 threshold: 7.0 - where: - - variable: ObsType/specificHumidity - is_in: 133 action: name: reject + where: + - variable: ObsType/specificHumidity + - variable: QualityMarker/specificHumidity + 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: specificHumidity + threshold: 4.9 + action: + name: reject where: - - variable: - name: MetaData/timeOffset - minvalue: -0.75 - maxvalue: 0.75 + - variable: ObsType/specificHumidity + - variable: QualityMarker/specificHumidity + 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/specificHumidity - # - variable: ObsValue/specificHumidity - # - variable: QCflagsData/specificHumidity + filter variables: + - name: specificHumidity + action: + name: assign error + error function: TempObsErrorData/specificHumidity + where: + - variable: + name: TempObsErrorData/specificHumidity + value: is_valid + defer to post: true #- filter: GOMsaver # filename: ./data/geovals/aircar_geovals_rrfs.nc4 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/aircar_uv_233.yaml b/rrfs-test/validated_yamls/templates/obtype_config/aircar_uv_233.yaml deleted file mode 100644 index 9d7b4f8b..00000000 --- a/rrfs-test/validated_yamls/templates/obtype_config/aircar_uv_233.yaml +++ /dev/null @@ -1,229 +0,0 @@ - - obs space: - name: aircar - distribution: - name: "@DISTRIBUTION@" - halo size: 100e3 - obsdatain: - engine: - type: H5File - obsfile: "@OBSFILE@" - obsdataout: - engine: - type: H5File - obsfile: jdiag_AIRCAR_uv_233.nc4 - allow overwrite: true - io pool: - max pool size: 1 - observed variables: [windEastward, windNorthward] - simulated variables: [windEastward, windNorthward] - - obs operator: - name: Composite - components: - - name: VertInterp - hofx_scaling: true - hofx scaling field: wind_reduction_factor_at_10m - hofx scaling field group: GeoVaLs - vertical coordinate: air_pressure - observation vertical coordinate: pressure - observation vertical coordinate group: MetaData - interpolation method: log-linear - #gsi geovals: - # filename: "obsout/aircraft_uv_geoval_2022052619.nc4" - # levels_are_top_down: False - variables: - - name: windEastward - - name: windNorthward - - linear obs operator: - name: Identity - - obs error: - covariance model: diagonal - - obs localizations: - - localization method: Horizontal Gaspari-Cohn - lengthscale: 300e3 # orig - - obs filters: - # ------------------ - # windEastward - # ------------------ - # Initial error assignment - # 233 - - filter: Perform Action - filter variables: - - name: windEastward - where: - - variable: ObsType/windEastward - is_in: 233 - 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: [2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214] - defer to post: true - - ## Ajusted error after initial assignment (qcmod.f90) - #- filter: Perform Action - # filter variables: - # - name: windEastward - # where: - # - variable: ObsType/windEastward - # is_in: 233 - # action: - # name: inflate error - # inflation variable: - # name: ObsFunction/ObsErrorFactorConventional - # options: - # test QCflag: PreQC - # test QCthreshold: 3 - # inflate variables: [windEastward] - # pressure: MetaData/pressure - # distance threshold: -1. - # defer to post: true - - # error inflation based on pressure check (setupw.f90) - - filter: Perform Action - filter variables: - - name: windEastward - where: - - variable: ObsType/windEastward - is_in: 233 - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorPressureCheck - options: - variable: windEastward - inflation factor: 0.0 - #geovar_sfc_geomz: surface_geometric_height #FV3 - #geovar_sfc_geomz: surface_altitude #MPAS - defer to post: true - - # ------------------ - # windNorthward - # ------------------ - # 233 - # Initial error assignment - - filter: Perform Action - filter variables: - - name: windNorthward - where: - - variable: ObsType/windNorthward - is_in: 233 - 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: [2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214] - defer to post: true - - ## Ajusted error after initial assignment (qcmod.f90) - #- filter: Perform Action - # filter variables: - # - name: windNorthward - # where: - # - variable: ObsType/windNorthward - # is_in: 233 - # action: - # name: inflate error - # inflation variable: - # name: ObsFunction/ObsErrorFactorConventional - # options: - # test QCflag: PreQC - # test QCthreshold: 3 - # inflate variables: [windNorthward] - # pressure: MetaData/pressure - # distance threshold: -1. - # defer to post: true - - # error inflation based on pressure check (setupw.f90) - - filter: Perform Action - filter variables: - - name: windNorthward - where: - - variable: ObsType/windNorthward - is_in: 233 - action: - name: inflate error - inflation variable: - name: ObsFunction/ObsErrorFactorPressureCheck - options: - variable: windNorthward - inflation factor: 0.0 - #geovar_sfc_geomz: surface_geometric_height #FV3 - #geovar_sfc_geomz: surface_altitude #MPAS - defer to post: true - - - filter: Bounds Check - apply at iterations: 0,1 - filter variables: - - name: windEastward - - name: windNorthward - minvalue: -200 - maxvalue: 200 - where: - - variable: ObsType/windEastward - is_in: 233 - action: - name: reject - - - filter: Background Check - apply at iterations: 0,1 - filter variables: - - name: windEastward - - name: windNorthward - absolute threshold: 10.0 - threshold: 10.0 - where: - - variable: ObsType/windEastward - is_in: 233 - action: - name: reject - - - filter: Domain Check - apply at iterations: 0,1 - where: - - variable: - name: MetaData/timeOffset - minvalue: -0.75 - maxvalue: 0.75 - where: - - variable: ObsType/windEastward - is_in: 233 - action: - name: reject - - - filter: Temporal Thinning - 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/windEastward - # - variable: ObsValue/windEastward - # - variable: ObsType/windNorthward - # - variable: ObsValue/windNorthward - # - variable: QCflagsData/windEastward - # - variable: QCflagsData/windNorthward - - #- filter: GOMsaver - # filename: ./data/geovals/aircar_geovals_rrfs.nc4 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/aircar_winds_233.yaml b/rrfs-test/validated_yamls/templates/obtype_config/aircar_winds_233.yaml new file mode 100644 index 00000000..cc171858 --- /dev/null +++ b/rrfs-test/validated_yamls/templates/obtype_config/aircar_winds_233.yaml @@ -0,0 +1,223 @@ + - obs space: + name: aircar_winds_233 + distribution: + name: "@DISTRIBUTION@" + halo size: 100e3 + obsdatain: + engine: + type: H5File + obsfile: "@OBSFILE@" + obsdataout: + engine: + type: H5File + obsfile: jdiag_aircar_winds_233.nc4 + allow overwrite: true + io pool: + max pool size: 1 + observed variables: [windEastward, windNorthward] + simulated variables: [windEastward, windNorthward] + + obs operator: + name: Composite + components: + - name: VertInterp + #hofx_scaling: true + #hofx scaling field: wind_reduction_factor_at_10m + #hofx scaling field group: GeoVaLs + vertical coordinate: air_pressure + observation vertical coordinate: pressure + observation vertical coordinate group: MetaData + interpolation method: log-linear + #gsi geovals: + # filename: "obsout/aircraft_uv_geoval_2022052619.nc4" + # levels_are_top_down: False + variables: + - name: windEastward + - name: windNorthward + + linear obs operator: + name: Identity + + obs error: + covariance model: diagonal + + obs localizations: + - localization method: Horizontal Gaspari-Cohn + lengthscale: 300e3 # orig + + obs filters: + # ------------------ + # wind (233) + # ------------------ + # Reject all obs with QualityMarker > 3 + - filter: Perform Action + apply at iterations: 0,1 + filter variables: + - name: windEastward + - name: windNorthward + where: + - variable: QualityMarker/windEastward + is_in: 4-15 + action: + name: reject + + # 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: windEastward + - name: windNorthward + test variables: + - name: GeoVaLs/observable_domain_mask + minvalue: 0.0 + maxvalue: 0.5 + + # Initial error assignment + - filter: Perform Action + filter variables: + - name: windEastward + - name: windNorthward + where: + - variable: ObsType/windEastward + is_in: 233 + 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: [2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214, 2.3214] + + # Error inflation (windEastward) based on pressure check (setupw.f90) + - filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_in: 233 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windEastward + inflation factor: 4.0 + + # Error inflation (windNorthward) based on pressure check (setupw.f90) + - filter: Perform Action + filter variables: + - name: windNorthward + where: + - variable: ObsType/windNorthward + is_in: 233 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windNorthward + inflation factor: 4.0 + + # Bounds Check + - filter: Bounds Check + apply at iterations: 0,1 + filter variables: + - name: windEastward + - name: windNorthward + minvalue: -200 + maxvalue: 200 + action: + name: reject + + # Gross Error Check (windEastward) + - filter: Background Check + apply at iterations: 0,1 + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 233 ] + cgross: [ 7.5 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windEastward + where: + - variable: QualityMarker/windEastward + is_not_in: 3 + action: + name: reject + defer to post: true + + # Gross Error Check (windNorthward) + - filter: Background Check + apply at iterations: 0,1 + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 233 ] + cgross: [ 7.5 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windNorthward + where: + - variable: QualityMarker/windNorthward + is_not_in: 3 + action: + name: reject + defer to post: true + + # Gross Error Check (windEastward): cgross*0.7 if QualityMarker=3 + - filter: Background Check + apply at iterations: 0,1 + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 233 ] + cgross: [ 5.25 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windEastward + where: + - variable: QualityMarker/windEastward + is_in: 3 + action: + name: reject + defer to post: true + + # Gross Error Check (windNorthward): cgross*0.7 if QualityMarker=3 + - filter: Background Check + apply at iterations: 0,1 + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 233 ] + cgross: [ 5.25 ] + error_min: [ 1.4 ] + error_max: [ 6.1 ] + variable: windNorthward + where: + - variable: QualityMarker/windNorthward + is_in: 3 + action: + name: reject + defer to post: true + + #- filter: GOMsaver + # filename: ./data/geovals/aircar_geovals_rrfs.nc4