CloudCostFunction

This ObsFunction calculates a Bayesian cost function for detecting cloud-affected radiances. Its heritage is the Met Office OPS.

A cloud cost, \(J_{c}\), is calculated from observation-H(x) departures, \(\mathbf{y}\), via

\(J_{c} = (0.5/N_{chan}) * \mathbf{y} \mathbf{W} \mathbf{y}^{T}\)

where \(N_{chan}\) is the number of channels in the calculation and \(\mathbf{W}\) is the inverse of \((\mathbf{H}\mathbf{B}\mathbf{H}^{T}+\mathbf{R})\):

  • \(\mathbf{H}\) is the Jacobian matrix;

  • \(\mathbf{B}\) is a background error covariance matrix;

  • \(\mathbf{R}\) is an observation error covariance matrix.

Implementation here follows Met Office usage, with a static (latitude-varying) \(\mathbf{B}\)-matrix and a fixed, diagonal \(\mathbf{R}\)-matrix.

Required parameters:

cost channels list

List of channels used in the calculation of the cost function

RMatrix

Path to location of file describing the \(\mathbf{R}\)-matrix

BMatrix

Path to location of file describing the \(\mathbf{B}\)-matrix

background fields

List of geovals names describing fields required from the \(\mathbf{B}\)-matrix

Optional parameters:

qtotal

Boolean flag indicating that the \(\mathbf{B}\)-matrix file contains error covariances for \(ln(\) qtotal in units g/kg \()\). Setting this flag requires that the following are all present in the parameter list “background fields”:

  • specific_humidity

  • mass_content_of_cloud_liquid_water_in_atmosphere_layer

  • mass_content_of_cloud_ice_in_atmosphere_layer

Default: false

qtotal split rain

Include treatment of rain when splitting total humidity into constituent phases

Default: false

scattering radiative transfer

Include gradient due to ice in brightness temperature total humidity Jacobian

Default: false

minimum specific humidity

Limit specific humidity to minimum value (kg/kg)

Default: 3.0e-6f

reverse Jacobian order

Jacobian vertical ordering is reverse of geovals

Default: false

minimum ObsValue

Minimum bound for ObsValue brightness temperature (K)

Default: 70.0

maximum ObsValue

Maximum bound for ObsValue brightness temperature

Default: 340.0

maximum final cost

Maximum value for final cost returned by the ObsFunction

Default: 1600.0

HofX group

Name of the H(x) group used in the cost function calculation

Default: “HofX”

Reference:

S.J. English, J.R. Eyre and J.A. Smith. A cloud‐detection scheme for use with satellite sounding radiances in the context of data assimilation for numerical weather prediction support of nowcasting applications. Quart. J. Royal Meterol. Soc., Vol. 125, pp. 2359-2378 (1999). https://doi.org/10.1002/qj.49712555902

Example yaml:

Here is an example using this ObsFunction inside the Bounds Check filter. The brightness_temperature filter variables are rejected if the output value of this ObsFunction is larger than the example maxvalue = 69.8.

- filter: Bounds Check
  filter variables:
  - name: brightness_temperature
    channels: 18-20
  where:
  - variable:
      name: land_sea@MetaData
    is_in: 0  # land=0, sea=1, ice=2
  test variables:
  - name: CloudCostFunction@ObsFunction
    options:
      cost channels list: 18, 20, 22
      RMatrix: ../resources/rmatrix/rttov/atms_noaa_20_rmatrix_test.nc4
      BMatrix: ../resources/bmatrix/rttov/atms_bmatrix_70_test.dat
      background fields:
      - air_temperature
      - specific_humidity
      - mass_content_of_cloud_liquid_water_in_atmosphere_layer
      - mass_content_of_cloud_ice_in_atmosphere_layer
      - surface_temperature
      - specific_humidity_at_two_meters_above_surface
      - skin_temperature
      - air_pressure_at_two_meters_above_surface
      qtotal: true
      qtotal split rain: true
      reverse Jacobian order: true
      HofX group: HofX  # default
  maxvalue: 69.8        # example value
  action:
    name: reject