From 80b54b48d7df1201812a18dec835120632ca6c4f Mon Sep 17 00:00:00 2001 From: Sijie Pan Date: Mon, 4 Nov 2024 18:38:21 -0600 Subject: [PATCH] Add 187/287 METAR config templates --- .../adpsfc_airTemperature_187.yaml | 194 +++++++++++++++++ .../adpsfc_specificHumidity_187.yaml | 205 ++++++++++++++++++ .../adpsfc_stationPressure_187.yaml | 202 +++++++++++++++++ .../obtype_config/adpsfc_winds_287.yaml | 202 +++++++++++++++++ 4 files changed, 803 insertions(+) create mode 100644 rrfs-test/validated_yamls/templates/obtype_config/adpsfc_airTemperature_187.yaml create mode 100644 rrfs-test/validated_yamls/templates/obtype_config/adpsfc_specificHumidity_187.yaml create mode 100644 rrfs-test/validated_yamls/templates/obtype_config/adpsfc_stationPressure_187.yaml create mode 100644 rrfs-test/validated_yamls/templates/obtype_config/adpsfc_winds_287.yaml diff --git a/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_airTemperature_187.yaml b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_airTemperature_187.yaml new file mode 100644 index 0000000..a872b7f --- /dev/null +++ b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_airTemperature_187.yaml @@ -0,0 +1,194 @@ + - obs space: + name: adpsfc_airTemperature_187 + distribution: + name: "@DISTRIBUTION@" + halo size: 100e3 + obsdatain: + engine: + type: H5File + obsfile: "@OBSFILE@" + obsdataout: + engine: + type: H5File + obsfile: hofx_adpsfc_airTemperature_187.nc4 + allow overwrite: true + io pool: + max pool size: 1 + observed variables: [airTemperature] + simulated variables: [airTemperature] + + obs operator: + name: Composite + components: + - name: VertInterp + variables: + - name: airTemperature + vertical coordinate: air_pressure + observation vertical coordinate: pressure + observation vertical coordinate group: MetaData + interpolation method: log-linear + + obs error: + covariance model: diagonal + + obs localizations: + - localization method: Horizontal Gaspari-Cohn + lengthscale: 300e3 # orig + + obs filters: + # ------------------ + # airTemperature (187) + # ------------------ + # Reject all obs with ObsType /= 187, QualityMarker = 4 -15 + - filter: RejectList + where: + - variable: ObsType/airTemperature + is_in: 187 + - variable: QualityMarker/airTemperature + is_in: 4-15 + + # Time window filter + - filter: Domain Check + where: + - variable: + name: MetaData/timeOffset + minvalue: -900 + maxvalue: 900 + + # Temporal thinning filter + - filter: Temporal Thinning + min_spacing: PT30M + seed_time: *analysisDate + category_variable: + name: MetaData/stationIdentification + + # Initial error assignment + - filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: + name: ObsType/airTemperature + is_in: 187 + 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.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585, 2.2585] + + # error inflation based on pressure check (setupt.f90) + - filter: Perform Action + filter variables: + - name: airTemperature + where: + - variable: ObsType/airTemperature + is_in: 187 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: airTemperature + inflation factor: 8.0 + # The new feature "surface observation error ramp" + # needs to be added to UFO to align with the ramp + # options for temperature and humidity in GSI. + #surface observation error ramp: true + + # Create temporary ObsErrorData + - filter: Variable Assignment + assignments: + - name: TempObsErrorData/airTemperature + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/airTemperature + + # Set ObsError set "error parameter" if < "max value" + - filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error parameter: 1.0 + where: + - variable: + name: ObsErrorData/airTemperature + maxvalue: 1.0 + - variable: + name: ObsErrorData/airTemperature + value: is_valid + + # Set ObsError set "error parameter" if > "min value" + - filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error parameter: 3.0 + where: + - variable: + name: ObsErrorData/airTemperature + minvalue: 3.0 + - variable: + name: ObsErrorData/airTemperature + value: is_valid + + # Gross Error Check + - filter: Background Check + filter variables: + - name: airTemperature + threshold: 5.0 + where: + - variable: ObsType/airTemperature + is_in: 187 + - variable: QualityMarker/airTemperature + is_not_in: 3 + action: + name: reject + + # Gross Error Check + - filter: Background Check + filter variables: + - name: airTemperature + threshold: 3.5 + where: + - variable: ObsType/airTemperature + is_in: 187 + - variable: QualityMarker/airTemperature + is_in: 3 + action: + name: reject + + # Re-assign err ObsErrorData <--- TempObsErrorData + # after gross error check. + - filter: Perform Action + filter variables: + - name: airTemperature + action: + name: assign error + error function: TempObsErrorData/airTemperature + where: + - variable: + name: TempObsErrorData/airTemperature + value: is_valid + + #- 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: GOMsaver + # filename: ./data/geovals/msonet_geovals_rrfs.nc4 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_specificHumidity_187.yaml b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_specificHumidity_187.yaml new file mode 100644 index 0000000..e83b389 --- /dev/null +++ b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_specificHumidity_187.yaml @@ -0,0 +1,205 @@ + - obs space: + name: adpsfc_specificHumidity_187 + distribution: + name: "@DISTRIBUTION@" + halo size: 100e3 + obsdatain: + engine: + type: H5File + obsfile: "@OBSFILE@" + obsdataout: + engine: + type: H5File + obsfile: hofx_adpsfc_specificHumidity_187.nc4 + allow overwrite: true + io pool: + max pool size: 1 + observed variables: [specificHumidity] + simulated variables: [specificHumidity] + + obs operator: + name: Composite + components: + - name: VertInterp + variables: + - name: specificHumidity + vertical coordinate: air_pressure + observation vertical coordinate: pressure + observation vertical coordinate group: MetaData + interpolation method: log-linear + + obs error: + covariance model: diagonal + + obs localizations: + - localization method: Horizontal Gaspari-Cohn + lengthscale: 300e3 # orig + + obs filters: + # ------------------ + # specificHumidity (187) + # ------------------ + # Reject all obs with ObsType /= 187, QualityMarker = 4 -15 + - filter: RejectList + where: + - variable: ObsType/specificHumidity + is_in: 187 + - variable: QualityMarker/specificHumidity + is_in: 4-15 + + # Time window filter + - filter: Domain Check + where: + - variable: + name: MetaData/timeOffset + minvalue: -900 + maxvalue: 900 + + # Temporal thinning filter + - filter: Temporal Thinning + min_spacing: PT30M + seed_time: *analysisDate + category_variable: + name: MetaData/stationIdentification + + ## 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 + - filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: + name: ObsType/specificHumidity + is_in: 187 + 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: [0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912, 0.05912] + + # error inflation based on pressure check (setupt.f90) + - filter: Perform Action + filter variables: + - name: specificHumidity + where: + - variable: ObsType/specificHumidity + is_in: 187 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: specificHumidity + inflation factor: 8.0 + request_saturation_specific_humidity_geovals: true + # The new feature "surface observation error ramp" + # needs to be added to UFO to align with the ramp + # options for temperature and humidity in GSI. + #surface observation error ramp: true + + # Create temporary ObsErrorData + - filter: Variable Assignment + assignments: + - name: TempObsErrorData/specificHumidity + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/specificHumidity + + # Set ObsError set "error parameter" if < "max value" + - filter: Perform Action + 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 + + # Set ObsError set "error parameter" if > "min value" + - filter: Perform Action + 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 + + # Gross Error Check + - filter: Background Check + filter variables: + - name: specificHumidity + threshold: 7.0 + where: + - variable: ObsType/specificHumidity + is_in: 187 + - variable: QualityMarker/specificHumidity + is_not_in: 3 + action: + name: reject + + # Gross Error Check + - filter: Background Check + filter variables: + - name: specificHumidity + threshold: 4.9 + where: + - variable: ObsType/specificHumidity + is_in: 187 + - variable: QualityMarker/specificHumidity + is_in: 3 + action: + name: reject + + # Re-assign err ObsErrorData <--- TempObsErrorData + # after gross error check. + - filter: Perform Action + filter variables: + - name: specificHumidity + action: + name: assign error + error function: TempObsErrorData/specificHumidity + where: + - variable: + name: TempObsErrorData/specificHumidity + value: is_valid + + ## 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: GOMsaver + # filename: ./data/geovals/msonet_geovals_rrfs.nc4 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_stationPressure_187.yaml b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_stationPressure_187.yaml new file mode 100644 index 0000000..007b4d4 --- /dev/null +++ b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_stationPressure_187.yaml @@ -0,0 +1,202 @@ + - obs space: + name: adpsfc_stationPressure_187 + distribution: + name: "@DISTRIBUTION@" + halo size: 100e3 + obsdatain: + engine: + type: H5File + obsfile: "@OBSFILE@" + obsdataout: + engine: + type: H5File + obsfile: hofx_adpsfc_stationPressure_187.nc4 + allow overwrite: true + io pool: + max pool size: 1 + observed variables: [stationPressure] + simulated variables: [stationPressure] + + obs operator: + name: SfcPCorrected + da_psfc_scheme: GSI + geovar_sfc_geomz: surface_geopotential_height + geovar_geomz: geopotential_height + linear obs operator: + name: Identity + + obs error: + covariance model: diagonal + + obs localizations: + - localization method: Horizontal Gaspari-Cohn + lengthscale: 300e3 # orig + + obs filters: + # ------------------ + # stationPressure (187) + # ------------------ + # Reject all obs with ObsType /= 187, QualityMarker = 4 -15 + - filter: RejectList + where: + - variable: ObsType/stationPressure + is_in: 187 + - variable: QualityMarker/stationPressure + is_in: 4-15 + + # Time window filter + - filter: Domain Check + where: + - variable: + name: MetaData/timeOffset + minvalue: -900 + maxvalue: 900 + + # Temporal thinning filter + - filter: Temporal Thinning + min_spacing: PT30M + seed_time: *analysisDate + category_variable: + name: MetaData/stationIdentification + + # Initial error assignment + - filter: Perform Action + filter variables: + - name: stationPressure + where: + - variable: + name: ObsType/stationPressure + is_in: 187 + 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: [53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 53.89, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9, 1E9] + + # Ajusted error after initial assignment + - filter: Perform Action + filter variables: + - name: stationPressure + action: + name: inflate error + inflation factor: 1.2 + where: + - variable: ObsType/stationPressure + is_in: 187 + - variable: QualityMarker/stationPressure + is_in: 3 + + # Error inflation based on setupps.f90 + - filter: Perform Action + filter variables: + - name: stationPressure + where: + - variable: ObsType/stationPressure + is_in: 187 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSfcPressure + options: + geovar_geomz: geopotential_height + #geovar_sfc_geomz: surface_geometric_height + station_altitude: height + + # Create temporary ObsErrorData + - filter: Variable Assignment + assignments: + - name: TempObsErrorData/stationPressure + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsErrorData/stationPressure + + # Set ObsError set "error parameter" if < "max value" + - filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error parameter: 100.0 + where: + - variable: + name: ObsErrorData/stationPressure + maxvalue: 100.0 + - variable: + name: ObsErrorData/stationPressure + value: is_valid + + # Set ObsError set "error parameter" if > "min value" + - filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error parameter: 300.0 + where: + - variable: + name: ObsErrorData/stationPressure + minvalue: 300.0 + - variable: + name: ObsErrorData/stationPressure + value: is_valid + + # Gross Error Check + - filter: Background Check + filter variables: + - name: stationPressure + threshold: 5.0 + where: + - variable: ObsType/stationPressure + is_in: 187 + - variable: QualityMarker/stationPressure + is_not_in: 3 + action: + name: reject + + # Gross Error Check + - filter: Background Check + filter variables: + - name: stationPressure + threshold: 3.5 + where: + - variable: ObsType/stationPressure + is_in: 187 + - variable: QualityMarker/stationPressure + is_in: 3 + action: + name: reject + + ## Re-assign err ObsErrorData <--- TempObsErrorData + # after gross error check. + - filter: Perform Action + filter variables: + - name: stationPressure + action: + name: assign error + error function: TempObsErrorData/stationPressure + where: + - variable: + name: TempObsErrorData/stationPressure + value: is_valid + + ## 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/stationPressure + # - variable: ObsValue/stationPressure + # - variable: QCflagsData/stationPressure + + #- filter: GOMsaver + # filename: ./data/geovals/msonet_geovals_rrfs.nc4 diff --git a/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_winds_287.yaml b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_winds_287.yaml new file mode 100644 index 0000000..f33ea3e --- /dev/null +++ b/rrfs-test/validated_yamls/templates/obtype_config/adpsfc_winds_287.yaml @@ -0,0 +1,202 @@ + - obs space: + name: adpsfc_winds_287 + distribution: + name: "@DISTRIBUTION@" + halo size: 100e3 + obsdatain: + engine: + type: H5File + obsfile: "@OBSFILE@" + obsdataout: + engine: + type: H5File + obsfile: hofx_adpsfc_winds_287.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 + variables: + - name: windEastward + - name: windNorthward + 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 + + linear obs operator: + name: Identity + + obs error: + covariance model: diagonal + + obs localizations: + - localization method: Horizontal Gaspari-Cohn + lengthscale: 300e3 # orig + + obs filters: + # ------------------ + # wind (287) + # ------------------ + # Reject all obs with ObsType /= 287, QualityMarker = 4 -15 + - filter: RejectList + where: + - variable: ObsType/windEastward + is_not_in: 287 + - filter: RejectList + where: + - variable: QualityMarker/windEastward + is_in: 4-15 + + # Time window filter + - filter: Domain Check + where: + - variable: + name: MetaData/timeOffset + minvalue: -900 + maxvalue: 900 + + # Temporal thinning filter + - filter: Temporal Thinning + min_spacing: PT30M + seed_time: *analysisDate + category_variable: + name: MetaData/stationIdentification + + ## 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 + - filter: Perform Action + filter variables: + - name: windEastward + - name: windNorthward + where: + - variable: + name: ObsType/windEastward + is_in: 287 + 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.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874, 1.5874] + + # error inflation based on pressure check (setupw.f90) + - filter: Perform Action + filter variables: + - name: windEastward + where: + - variable: ObsType/windEastward + is_in: 287 + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorPressureCheck + options: + variable: windEastward + inflation factor: 4.0 + + # Gross Error Check + - filter: Background Check + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 287 ] + cgross: [ 5.0 ] + error_min: [ 1.0 ] + error_max: [ 5.0 ] + variable: windEastward + where: + - variable: QualityMarker/windEastward + is_not_in: 3 + action: + name: reject + + - filter: Background Check + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 287 ] + cgross: [ 5.0 ] + error_min: [ 1.0 ] + error_max: [ 5.0 ] + variable: windNorthward + where: + - variable: QualityMarker/windNorthward + is_not_in: 3 + action: + name: reject + + - filter: Background Check + filter variables: + - name: windEastward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 287 ] + cgross: [ 3.5 ] + error_min: [ 1.0 ] + error_max: [ 5.0 ] + variable: windEastward + where: + - variable: QualityMarker/windEastward + is_in: 3 + action: + name: reject + + - filter: Background Check + filter variables: + - name: windNorthward + function absolute threshold: + - name: ObsFunction/WindsSPDBCheck + options: + wndtype: [ 287 ] + cgross: [ 3.5 ] + error_min: [ 1.0 ] + error_max: [ 5.0 ] + variable: windNorthward + where: + - variable: QualityMarker/windNorthward + is_in: 3 + action: + name: reject + + ## 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/msonet_geovals_rrfs.nc4