obsOperators_mod

link to source code

Dependency Diagrams:

obsOperators_mod.svg

Direct Dependency Diagram

obsOperators_mod_rev.svg

Reverse Dependency Diagram

Description

MODULE obsOperators_mod (prefix=’oop’ category=’5. Observation operators’)

Purpose

All observation operators, including nonlinear, tangent-linear and adjoint versions.

Quick access

Routines

hutoes(), hutoes_ad(), hutoes_tl(), oop_calcgpsgbjacobian(), oop_calcgpsrojacobian(), oop_chm_nl(), oop_gpsgb_nl(), oop_gpsro_nl(), oop_had(), oop_htl(), oop_hydro_nl(), oop_ice_nl(), oop_icescaling(), oop_ppp_nl(), oop_radvel_nl(), oop_sfc_nl(), oop_sst_nl(), oop_tovs_nl(), oop_vobslyrs(), oop_zzz_nl()

Needed modules

  • codeprecision_mod: MODULE codePrecision_mod (prefix=’pre’ category=’8. Low-level utilities and constants’)

  • earthconstants_mod: MODULE earthConstants_mod (prefix=’ec’ category=’8. Low-level utilities and constants’)

  • mathphysconstants_mod: MODULE mathPhysConstants_mod (prefix=’mpc’ category=’8. Low-level utilities and constants’)

  • obsspacedata_mod: MODULE obsSpaceData_mod (prefix=’obs’ category=’6. High-level data objects’)

  • columndata_mod: MODULE columnData_mod (prefix=’col’ category=’6. High-level data objects’)

  • bufr_mod: MODULE bufr_mod (prefix=’bufr’ category=’8. Low-level utilities and constants’)

  • physicsfunctions_mod: MODULE physicsFunctions_mod (prefix=’phf’ category=’8. Low-level utilities and constants’)

  • gps_mod: MODULE gps_mod (prefix=’gps’ category=’5. Observation operators’)

  • midasmpi_mod: MODULE midasMpi_mod (prefix=’mmpi’ category=’8. Low-level utilities and constants’)

  • timecoord_mod: MODULE timeCoord_mod (prefix=’tim’ category=’7. Low-level data objects’)

  • tovsnl_mod: MODULE tovsNL_mod (prefix=’tvs’ category=’5. Observation operators’)

  • utilities_mod: MODULE utilities_mod (prefix=’utl’ category=’8. Low-level utilities and constants’)

  • tovslin_mod: MODULE tovsLin_mod (prefix=’tvslin’ category=’5. Observation operators’)

  • verticalcoord_mod: MODULE verticalCoord_mod (prefix=’vco’ category=’7. Low-level data objects’)

  • varnamelist_mod: MODULE varNameList_mod (prefix=’vnl’ category=’7. Low-level data objects’)

  • obsoperatorschem_mod: MODULE obsOperatorsChem_mod (prefix=’oopc’ category=’5. Observation operators’)

  • obserrors_mod: MODULE obsErrors_mod (prefix=’oer’ category=’2. B and R matrices’)

Variables

Subroutines and functions

subroutine  obsoperators_mod/oop_vobslyrs(columntrl, obsspacedata, besilent)
Purpose

Find which model levels to use for the vertical interpolation of model fields to obs data.

Arguments
  • columntrl [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

Called from

inn_computeinnovation(), oop_htl(), oop_had(), ose_compute_hbht_static()

Call to

col_getnumlev(), obs_numbody(), obs_bodyelem_i(), obs_bodyset_i(), obs_bodyelem_r(), utl_abort(), bufr_isatmosconstituent(), vnl_varlevelfromvarnum(), obs_headelem_i(), col_getpressure(), obs_headelem_r(), col_getheight()

subroutine  obsoperators_mod/oop_ppp_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of y - H(x) for pressure-level observations. Interpolate vertically columnTrlOnTrlLev to the pressure levels of the observations. A linear interpolation in ln(p) is performed.

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of obsservation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

col_getnumlev(), obs_bodyelem_i(), obs_bodyelem_r(), vnl_varnamefromvarnum(), vnl_varlevelfromvarnum(), col_getpressure(), obs_headelem_r(), col_getcolumn(), hutoes(), phf_height2geopotential(), col_getelem(), col_getheight()

subroutine  obsoperators_mod/oop_zzz_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of y - H(x) for geometric-height observations Interpolate vertically columnTrlOnTrlLev to the geometric heights (in meters) of the observations. A linear interpolation in z is performed.

Notes

As a first approximation, use the geopotential height. Once this is working, this should be changed for a calculation of the geometric height.

Note that, in the case of an aladin HLOS wind, the correction to zvar (OBS_VAR) is not written back to obsSpaceData. It is simply used to calculate OMP (which is written to obsSpaceData) and then is discarded. Thereafter, if one calculates OMP - O (this will be the uncorrected O), the result will be a corrected P.

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

utl_abort(), obs_bodyelem_i(), obs_bodyelem_r(), vnl_varlevelfromvarnum(), col_getheight(), obs_headelem_i(), obs_bodyset_i(), col_getelem(), col_getpressure(), col_getoffsetfromvarno()

subroutine  obsoperators_mod/oop_sfc_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of the residuals to the observations FOR SURFACE DATA (except ground-based GPS zenith delay).

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

utl_isnamelistpresent(), utl_abort(), obs_getheaderindex(), obs_bodyelem_i(), obs_bodyelem_r(), vnl_varlevelfromvarnum(), hutoes(), col_getelem(), col_getnumlev(), col_getpressure(), col_getoffsetfromvarno(), col_getheight()

subroutine  obsoperators_mod/oop_sst_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of Jo and the residuals to the observations for Sea Surface Temperature (SST) data.

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

obs_getheaderindex(), obs_bodyelem_i(), col_varexist(), obs_bodyelem_r(), col_getelem()

subroutine  obsoperators_mod/oop_hydro_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

To computate Jo and the residuals to the observations for hydrological data

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

obs_getheaderindex(), obs_bodyelem_i(), obs_bodyelem_r(), vnl_varnamefromvarnum(), col_getelem()

subroutine  obsoperators_mod/oop_ice_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of Jo and the residuals to the observations FOR SEA ICE CONCENTRATION DATA

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

obs_bodyelem_i(), vnl_varnamefromvarnum(), col_getelem(), obs_headelem_i(), obs_bodyelem_r()

subroutine  obsoperators_mod/oop_radvel_nl(columntrlontrllev, obsspacedata, besilent, cdfam, destobscolumn)
Purpose

Computation of Jo and OMP for Radar Doppler velocity observations

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • cdfam [character ,in] :: family of observation

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

obs_getheaderindex(), obs_headelem_r(), obs_bodyelem_i(), obs_bodyelem_r(), col_getheight(), col_getelem()

subroutine  obsoperators_mod/oop_gpsro_nl(columntrlontrllev, obsspacedata, besilent, destobscolumn)
Purpose

Computation of Jo and the residuals to the GPSRO observations

Note

gps_struct1sw_v2 allows calculation of partial derivatives of refractivity in gps_diff object w.r.t TT/HU/GZ/P0. The indirect dependency refractivity to TT/HU/P0 through GZ is now attributed to direct dependency of refractivity on GZ.

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

col_getvco(), col_getnumlev(), obs_getheaderindex(), obs_headelem_i(), obs_bodyelem_i(), gps_iprofile_from_index(), obs_headelem_r(), col_getheight(), col_getelem(), col_getpressure(), utl_abort(), gps_struct1sw_v2(), obs_bodyelem_r(), gps_bndopv1(), gps_refopv()

subroutine  obsoperators_mod/oop_gpsgb_nl(columntrlontrllev, obsspacedata, besilent, destobscolumn[, analysismode_opt])
Purpose

Computation of the residuals to the GB-GPS ZTD observations

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • besilent [logical ,in]

  • destobscolumn [integer ,in]

Options

analysismode_opt [logical ,in,]

Called from

inn_computeinnovation()

Call to

col_getnumlev(), obs_getheaderindex(), obs_headelem_i(), obs_elem_c(), obs_bodyelem_i(), obs_bodyelem_r(), obs_headelem_r(), col_getheight(), col_getelem(), col_getpressure(), gps_structztd_v2(), gps_ztdopv(), gps_pw(), obs_bodyset_i(), utl_abort()

subroutine  obsoperators_mod/oop_tovs_nl(columntrl, obsspacedata, datestamp, besilent[, bgckmode_opt[, option_opt[, sourceobs_opt[, destobs_opt]]]])
Purpose

Computation of the residuals to the tovs observations

Options
  • option_opt [character ,in,] :: only valid value is HR - ‘HR’: High Resolution background state, - ‘LR’: Low Resolution background state, (CURRENTLY NOT SUPPORTED) - ‘MO’: Model state. (CURRENTLY NOT SUPPORTED)

  • bgckmode_opt [logical ,in,]

  • sourceobs_opt [integer ,in,] :: usually set to OBS_VAR

  • destobs_opt [integer ,in,] :: usually set to OBS_OMP

Arguments
  • columntrl [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • datestamp [integer ,in]

  • besilent [logical ,in]

Called from

inn_computeinnovation()

Call to

obs_famexist(), utl_abort(), tvs_fillprofiles(), tvs_rttov(), obs_numbody(), obs_bodyelem_r(), obs_getheaderindex(), obs_headelem_i(), tvs_isidburptovs(), obs_bodyelem_i(), tvs_getchannelnumindexfromppp(), oer_inflateerrallsky(), tvs_printdetailledomfstatistics()

subroutine  obsoperators_mod/oop_chm_nl(columntrlontrllev, obsspacedata, destobscolumn)
Purpose

Computation of the residuals to the observations for all observations of the CH (chemical constituents) family. The array columnTrlOnTrlLev contains the input model array. Stores OmP in OBS_OMP in obsSpaceData.

Arguments
  • columntrlontrllev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

  • destobscolumn [integer ,in]

Called from

inn_computeinnovation()

Call to

obs_famexist()

subroutine  obsoperators_mod/oop_htl(columnanlinc, columntrlonanlinclev, obsspacedata, min_nsim[, initializelinearization_opt])
Purpose

Compute simulated observations from profiled model increments. It returns Hdx in OBS_WORK. Calls the several linear observation operators.

Arguments
  • columnanlinc [struct_columndata ,in]

  • columntrlonanlinclev [struct_columndata ,inout]

  • obsspacedata [struct_obs ,inout]

  • min_nsim [integer ,in]

Options

initializelinearization_opt [logical ,in,]

Called from

fso_ensemble(), simvar(), osd_calcinflation(), ose_compute_hbht_ensemble(), midas_diaghbht

Call to

col_getvco(), oop_vobslyrs(), col_getnumlev(), col_varexist(), utl_abort(), col_getnumcol(), col_getelem(), phf_fottva(), phf_folnqva()

subroutine  obsoperators_mod/oop_had(columnanlinc, columntrlonanlinclev, obsspacedata[, initializelinearization_opt])
Purpose

Call the several adjoint of observation operators

Arguments
  • columnanlinc [struct_columndata ,inout]

  • columntrlonanlinclev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

Options

initializelinearization_opt [logical ,in,]

Called from

simvar()

Call to

col_getvco(), oop_vobslyrs(), col_getnumlev(), obs_bodyelem_i(), obs_bodyelem_r(), vnl_varlevelfromvarnum(), col_getoffsetfromvarno(), col_getpressure(), col_getcolumn(), hutoes_ad(), col_getelem(), hutoes()

function  obsoperators_mod/hutoes(hu, tt, pressure)
Purpose

to calculate the dew point depression from specific humidity, temperature and pressure. No ice phase is permitted and the pressure vector is given.

Arguments
  • hu [real ,in]

  • tt [real ,in]

  • pressure [real ,in]

Return

es [real ]

Called from

oop_ppp_nl(), oop_sfc_nl(), oop_had()

Call to

phf_foefq8(), phf_fotw8()

function  obsoperators_mod/hutoes_tl(hu_inc, tt_inc, p_inc, hu_trl, pres_trl)
Purpose

TLM VERSION to calculate the dew point depression from specific humidity, temperature and pressure. No ice phase is permitted and the pressure vector is given.

Arguments
  • hu_inc [real ,in]

  • tt_inc [real ,in]

  • p_inc [real ,in]

  • hu_trl [real ,in]

  • pres_trl [real ,in]

Return

es_inc [real ]

Call to

phf_foefq8(), phf_fotw8(), phf_fodtw8(), phf_fqbranch(), phf_foefqa(), phf_foefqpsa()

subroutine  obsoperators_mod/hutoes_ad(hu_inc, tt_inc, p_inc, es_inc, hu_trl, pres_trl)
Purpose: ADJOINT VERSION

to calculate the dew point depression from specific humidity, temperature and pressure. No ice phase is permitted and the pressure vector is given.

Arguments
  • hu_inc [real ,inout]

  • tt_inc [real ,inout]

  • p_inc [real ,inout]

  • es_inc [real ,in]

  • hu_trl [real ,in]

  • pres_trl [real ,in]

Called from

oop_had()

Call to

phf_foefq8(), phf_fotw8(), phf_fodtw8(), phf_fqbranch(), phf_foefqa(), phf_foefqpsa()

subroutine  obsoperators_mod/oop_calcgpsrojacobian(columntrlonanlinclev, obsspacedata[, initializelinearization_opt])
Purpose

Calculating the Jacobians of refractivity for oop_Hro/oop_HTro

Arguments
  • columntrlonanlinclev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

Options

initializelinearization_opt [logical ,in,]

Call to

col_getnumlev(), obs_getheaderindex(), obs_headelem_i(), obs_bodyelem_i(), gps_iprofile_from_index(), obs_headelem_r(), col_getheight(), col_getelem(), col_getpressure(), gps_struct1sw_v2(), obs_bodyelem_r(), gps_bndopv1(), gps_refopv()

subroutine  obsoperators_mod/oop_calcgpsgbjacobian(columntrlonanlinclev, obsspacedata[, initializelinearization_opt])
Purpose

Calculating the Jacobians of ZTD for oop_Hgp/oop_HTgp

Arguments
  • columntrlonanlinclev [struct_columndata ,in]

  • obsspacedata [struct_obs ,inout]

Options

initializelinearization_opt [logical ,in,]

Call to

col_getvco(), col_getnumlev(), utl_abort(), obs_getheaderindex(), obs_headelem_i(), obs_bodyelem_i(), obs_bodyelem_r(), obs_headelem_r(), col_getelem(), col_getpressure(), col_getheight(), gps_structztd_v2(), gps_ztdopv(), gps_iztd_from_index(), obs_elem_c(), gps_pw()

function  obsoperators_mod/oop_icescaling(obsspacedata, bodyindex)
Purpose

Calculate the scaling factor for ice related observations to convert from model space to observation space, i.e. H(iceConc) = scaling*iceConc + constant

Arguments
  • obsspacedata [struct_obs ,in]

  • bodyindex [integer ,in]

Return

scaling [real ]

Called from

aer_computeanlerrorstd()

Call to

obs_bodyelem_i(), obs_headelem_i()