Observation Operators in UFO

Vertical Interpolation

Description:

Vertical interpolation observation operator implements linear interpolation in vertical coordinate. If vertical coordinate is air_pressure, interpolation is done in logarithm of air pressure. For all other vertical coordinates interpolation is done in specified coordinate (no logarithm applied)

Configuration options:

  • vertical coordinate [optional] : specifies which vertical coordinate to use in interpolation. If air_pressure is used, the interpolation is done in log(air pressure). Default value is air pressure.

Examples of yaml:

obs operator:
  name: VertInterp

Observation operator in the above example does vertical interpolation in log(air pressure).

obs operator:
  name: VertInterp
  vertical coordinate: height

Observation operator in the above example does vertical interpolation in height.

Atmosphere Vertical Layer Interpolation

Description:

Observational operator for vertical summation of model layers within an observational atmospheric layer where the top and bottom pressure levels are specified in cbars.

Examples of yaml:

obs operator:
  name: AtmVertInterpLay

Community Radiative Transfer Model (CRTM)

Description:

Interface to the Community Radiative Transfer Model (CRTM) as an observational operator.

Configuration options:

The CRTM operator has some required geovals (see varin_default in ufo/crtm/ufo_radiancecrtm_mod.F90). The configurable geovals are as follows:

  • Absorbers : CRTM atmospheric absorber species that will be requested as geovals. H2O and O3 are always required. So far H2O, O3, CO2 are implemented. More species can be added readily by extending UFO_Absorbers and CRTM_Absorber_Units in ufo/crtm/ufo_crtm_utils_mod.F90.

  • Clouds [optional] : CRTM cloud constituents that will be requested as geovals; can include any of Water, Ice, Rain, Snow, Graupel, Hail

  • Cloud_Fraction [optional] : sets the CRTM Cloud_Fraction to a constant value across all profiles (e.g., 1.0). Omit this option in order to request cloud_area_fraction_in_atmosphere_layer as a geoval from the model.

  • linear obs operator [optional] : used to indicate a different configuration for K-Matrix multiplication of tangent linear and adjoint operators from the configuration used for the Forward operator. The same profile is used in the CRTM Forward and K_Matrix calculations. Only the interface to the model will be altered. Omit linear obs operator in order to use the same settings across Forward, Tangent Linear, and Adjoint operators.

  • linear obs operator.Absorbers [optional] : controls which of the selected Absorbers will be acted upon in K-Matrix multiplication

  • linear obs operator.Clouds [optional] : controls which of the selected Clouds will be acted upon in K-Matrix multiplication

obs options configures the tabulated coefficient files that are used by CRTM

  • obs options.Sensor_ID : {sensor}_{platform} prefix of the sensor-specific coefficient files, e.g., amsua_n19

  • obs options.EndianType : Endianness of the coefficient files. Either little_endian or big_endian.

  • obs options.CoefficientPath : location of all coefficient files

  • obs options.IRwaterCoeff [optional] : options: [Nalli (D), WuSmith]

  • obs options.VISwaterCoeff [optional] : options: [NPOESS (D)]

  • obs options.IRVISlandCoeff [optional] : options: [NPOESS (D), USGS, IGBP]

  • obs options.IRVISsnowCoeff [optional] : options: [NPOESS (D)]

  • obs options.IRVISiceCoeff [optional] : options: [NPOESS (D)]

  • obs options.MWwaterCoeff [optional] : options: [FASTEM6 (D), FASTEM5, FASTEM4]

Examples of yaml:

obs operator:
  name: CRTM
  Absorbers: [H2O, O3]
  Clouds: [Water, Ice, Rain, Snow, Graupel, Hail]
  linear obs operator:
    Absorbers: [H2O]
    Clouds: [Water, Ice]
  obs options:
    Sensor_ID: amsua_n19
    EndianType: little_endian
    CoefficientPath: Data/
obs operator:
  name: CRTM
  Absorbers: [H2O, O3, CO2]
  Clouds: [Water, Ice]
  Cloud_Fraction: 1.0
  obs options:
    Sensor_ID: iasi_metop-a
    EndianType: little_endian
    CoefficientPath: Data/
    IRVISlandCoeff: USGS
obs operator:
  name: CRTM
  Absorbers: [H2O, O3]
  linear obs operator:
    Absorbers: [H2O]
  obs options:
    Sensor_ID: abi_g16
    EndianType: little_endian
    CoefficientPath: Data/

Aerosol Optical Depth (AOD)

Description:

The operator to calculate Aerosol Optical Depth for GOCART aerosol parameterization. It relies on the implementation of GOCART in the CRTM. This implementation includes hydorphillic and hydrophobic black and organic carbonaceous species, sulphate, five dust bins (radii: 0.1-1, 1.4-1.8, 1.8-3.0, 3.0-6.0, 6.0-10. um), and four sea-salt bins (dry aerosol radii: 0.1-0.5, 0.5-1.5, 1.5-5.0, 5.0-10.0 um). AOD is calculated using CRTM’s tables of optical properties for these aerosols. Some modules are shared with CRTM radiance UFO. On input, the operator requires aerosol mixing ratios, interface and mid-layer pressure, air temperature and specific / relative humidity for each model layer.

Configuration options:

Absorbers: (Both are required; No clouds since AOD retrievals are not obtained in cloudy regions): * H2O to determine radii of hygrophillic aerosols particles * O3 not strictly affecting aerosol radiative properties but required to be entered by the CRTM (here mixing ratio assigned a default value)

obs options: * Sensor_ID: v.viirs-m_npp * Other possibilities: v.modis_aqua, v.modis_terra AerosolOption: aerosols_gocart_default (Currently, that’s the only one that works)

Example of a yaml:

obs operator:
  name: AodCRTM
  Absorbers: [H2O,O3]
  obs options:
    Sensor_ID: v.viirs-m_npp
    EndianType: little_endian
    CoefficientPath: Data/
    AerosolOption: aerosols_gocart_default

GNSS RO bending angle (NCEP)

Description:

A one-dimensional observation operator for calculating the Global Navigation Satellite System (GNSS) Radio Occultation (RO) bending angle data based on the NBAM (NCEP’s Bending Angle Method)

Configuration options:

  1. configurables in “ObsOperator” section:

  1. vertlayer: if air pressure and geopotential height are read on the interface layer or the middle layer

  • options: “mass” or “full” (default is full)

  1. super_ref_qc: if use the “NBAM” or “ECMWF” method to do super refraction check.

  • options: “NBAM” or “ECMWF” (“NBAM” is default)

  1. sr_steps: when using the “NBAM” suepr refraction, if apply one or two step QC.

  • options: default is two-step QC following NBAM implementation in GSI.

  1. use_compress: compressibility factors in geopotential heights. Only for NBAM.

  • options: 1 to turn on; 0 to turn off. Default is 1.

  1. configurables in “ObsSpace” section:

  1. obsgrouping: applying record_number as group_variable can get RO profiles in ufo. Otherwise RO data would be treated as single observations.

  1. configurables in “ObsFilters” section:

  1. Domain Check: a generic filter used to control the maximum height one wants to assimilate RO observation.Default value is 50 km.

  2. ROobserror: A RO specific filter. use generic filter class to apply observation error method.

    options: NBAM, NRL,ECMWF, and more to come. (NBAM is default)

  3. Background Check: the background check for RO can use either the generic one (see the filter documents) or the RO specific one based on the NBAM implementation in GSI.

    options: “Background Check” for the JEDI generic one or “Background Check RONBAM” for the NBAM method.

Examples of yaml:

ufo/test/testinput/gnssrobndnbam.yaml

observations:
- obs space:
     name: GnssroBnd
     obsdatain:
       obsfile: Data/ioda/testinput_tier_1/gnssro_obs_2018041500_3prof.nc4
       obsgrouping:
         group variable: "record_number"
         sort variable: "impact_height"
         sort order: "ascending"
     obsdataout:
       obsfile: Data/gnssro_bndnbam_2018041500_3prof_output.nc4
     simulate variables: [bending_angle]
   obs operator:
     name: GnssroBndNBAM
     obs options:
       use_compress: 1
       vertlayer: full
       super_ref_qc: NBAM
       sr_steps: 2
   obs filters:
   - filter: Domain Check
     filter variables:
     - name: [bending_angle]
     where:
     - variable:
         name: impact_height@MetaData
       minvalue: 0
       maxvalue: 50000
   - filter: ROobserror
     filter variables:
     - name: bending_angle
     errmodel: NRL
   - filter: Background Check
     filter variables:
     - name: [bending_angle]
     threshold: 3

GNSS RO bending angle (ROPP 1D)

Description:

The JEDI UFO interface of the Eumetsat ROPP package that implements a one-dimensional observation operator for calculating the Global Navigation Satellite System (GNSS) Radio Occultation (RO) bending angle data

Configuration options:

  1. configurables in “obs space” section:

    1. obsgrouping: applying record_number as a group_variable can get RO profiles in ufo. Otherwise RO data would be treated as single observations.

  2. configurables in “obs filters” section:

    1. Domain Check: a generic filter used to control the maximum height one wants to assimilate RO observation. Default value is 50 km.

    2. ROobserror: A RO specific filter. Use generic filter class to apply observation error method.

      options: NBAM, NRL,ECMWF, and more to come. (NBAM is default, but not recommended for ROPP operators). One has to specific a error model.

    3. Background Check: can only use the generic one (see the filter documents).

Examples of yaml:

ufo/test/testinput/gnssrobndropp1d.yaml

observations:
- obs space:
    name: GnssroBndROPP1D
    obsdatain:
      obsfile: Data/ioda/testinput_tier_1/gnssro_obs_2018041500_m.nc4
      obsgrouping:
        group variable: "record_number"
        sort variable: "impact_height"
    obsdataout:
      obsfile: Data/gnssro_bndropp1d_2018041500_m_output.nc4
    simulate variables: [bending_angle]
  obs operator:
     name:  GnssroBndROPP1D
     obs options:
  obs filters:
  - filter: Domain Check
    filter variables:
    - name: [bending_angle]
    where:
    - variable:
        name: impact_height@MetaData
      minvalue: 0
      maxvalue: 50000
  - filter: ROobserror
    filter variables:
    - name: bending_angle
    errmodel: NRL
  - filter: Background Check
    filter variables:
    - name: [bending_angle]
    threshold: 3

GNSS RO bending angle (ROPP 2D)

Description:

The JEDI UFO interface of the Eumetsat ROPP package that implements a two-dimensional observation operator for calculating the Global Navigation Satellite System (GNSS) Radio Occultation (RO) bending angle data

Configuration options:

  1. configurables in “obs operator” section:

  1. n_horiz: The horizontal points the operator integrates along the 2d plane. Default is 31. Has to be a even number.

  2. res: The horizontal resolution of the 2d plance. Default is 40 km.

  3. top_2d: the highest height to apply the 2d operator. Default is 20 km.

  1. configurables in “obs space” section:

  1. obsgrouping: applying record_number as group_variable can get RO profiles in ufo. Otherwise RO data would be treated as single observations.

  1. configurables in “obs filters” section:

  1. Domain Check: a generic filter used to control the maximum height one wants to assimilate RO observation. Default value is 50 km.

  2. ROobserror: A RO specific filter. Use generic filter class to apply observation error method.

  • options: NBAM, NRL,ECMWF, and more to come. (NBAM is default, but not recommended for ROPP operators). One has to specific a error model.

  1. Background Check: can only use the generic one (see the filter documents).

Examples of yaml:

observations:
- obs space:
    name: GnssroBndROPP2D
    obsdatain:
      obsfile: Data/ioda/testinput_tier_1/gnssro_obs_2018041500_m.nc4
      obsgrouping:
        group_variable: "record_number"
        sort_variable: "impact_height"
    obsdataout:
      obsfile: Data/gnssro_bndropp2d_2018041500_m_output.nc4
    simulate variables: [bending_angle]
  obs operator:
     name: GnssroBndROPP2D
     obs options:
       n_horiz: 31
       res: 40.0
       top_2d: 1O.0
  obs filters:
  - filter: Domain Check
    filter variables:
    - name: [bending_angle]
    where:
    - variable:
        name: impact_height@MetaData
      minvalue: 0
      maxvalue: 50000
  - filter: ROobserror
    filter variables:
    - name: bending_angle
    errmodel: NRL
  - filter: Background Check
    filter variables:
    - name: [bending_angle]
    threshold: 3

GNSS RO bending angle (MetOffice)

Description:

The JEDI UFO interface of the Met Office’s one-dimensional observation operator for calculating the Global Navigation Satellite System (GNSS) Radio Occultation (RO) bending angle data

Configuration options:

  1. configurables in “obs operator” section:

  1. none.

  1. configurables in “obs space” section:

  1. vert_interp_ops: if true, then use log(pressure) for vertical interpolation, if false then use exner function for vertical interpolation.

  2. pseudo_ops: if true then calculate data on intermediate “pseudo” levels between model levels, to minimise interpolation artifacts.

  1. configurables in “ObsFilters” section:

  1. Background Check: not currently well configured. More detail to follow.

Examples of yaml:

ufo/test/testinput/gnssrobendmetoffice.yaml

- obs operator:
    name: GnssroBendMetOffice
    obs options:
      vert_interp_ops: true
      pseudo_ops: true
  obs space:
    name: GnssroBnd
    obsdatain:
      obsfile: Data/ioda/testinput_tier_1/gnssro_obs_2019050700_1obs.nc4
    simulated variables: [bending_angle]
  geovals:
    filename: Data/gnssro_geoval_2019050700_1obs.nc4
  obs filters:
  - filter: Background Check
    filter variables:
    - name: bending_angle
    threshold: 3.0
  norm ref: MetOfficeHofX
  tolerance: 1.0e-5

References:

The scientific configuration of this operator has been documented in a number of publications:

  • Buontempo C, Jupp A, Rennie M, 2008. Operational NWP assimilation of GPS radio occultation data, Atmospheric Science Letters, 9: 129–133. doi: http://dx.doi.org/10.1002/asl.173

  • Burrows CP, 2014. Accounting for the tangent point drift in the assimilation of gpsro data at the Met Office, Satellite applications technical memo 14, Met Office.

  • Burrows CP, Healy SB, Culverwell ID, 2014. Improving the bias characteristics of the ROPP refractivity and bending angle operators, Atmospheric Measurement Techniques, 7: 3445–3458. doi: http://dx.doi.org/10.5194/amt-7-3445-2014

GNSS RO refractivity

Description:

A one-dimensional observation operator for calculating the Global Navigation Satellite System (GNSS) Radio Occultation (RO) refractivity data.

Configuration options:

  1. configurables in “obs filters” section:

  1. Domain Check: a generic filter used to control the maximum height one wants to assimilate RO observation. Recommended value is 30 km for GnssroRef.

  2. ROobserror: A RO specific filter. Use generic filter class to apply observation error method.

    options: Only NBAM (default) is implemented now.

  3. Background Check: can only use the generic one (see the filter documents).

Examples of yaml:

ufo/test/testinput/gnssroref.yaml

observations:
- obs space:
    name: GnssroRef
    obsdatain:
      obsfile: Data/ioda/testinput_tier_1/gnssro_obs_2018041500_s.nc4
    simulate variables: [refractivity]
  obs operator:
    name: GnssroRef
    obs options:
  obs filters:
  - filter: Domain Check
    filter variables:
    - name: [refractivity]
    where:
    - variable:
        name: altitude@MetaData
      minvalue: 0
      maxvalue: 30000
  - filter: ROobserror
    filter variables:
    - name: refractivity
    errmodel: NBAM
  - filter: Background Check
    filter variables:
    - name: [refractivity]
    threshold: 3

Identity observation operator

Description:

A simple identity observation operator, can be used for all cases where observation operator only does horizontal interpolation of model variables.

Examples of yaml:

obs operator:
  name: Identity

Radar Reflectivity

Description:

UFO radar operator for reflectivity. It is tested with radar observations dumped from a specific modified GSI program at NSSL for the Warn-on-Forecast project.

Examples of yaml:

observations:
- obs operator:
    name: RadarReflectivity
    VertCoord: geopotential_height
  obs space:
    name: Radar
    obsdatain:
      obsfile: Data/radar_dbz_obs_2019052222.nc4
    simulated variables: [equivalent_reflectivity_factor]

Radar Radial Velocity

Description:

Similar to RadarReflectivity, but for radial velocity. It is tested with radar observations dumped from a specific modified GSI program at NSSL for the Warn-on-Forecast project.

Examples of yaml:

observations:
- obs operator:
    name: RadarRadialVelocity
  obs space:
    name: Radar
    obsdatain:
      obsfile: Data/radar_rw_obs_2019052222.nc4
    simulated variables: [radial_velocity]