wiki:PDAFomi_set_localize_covar

Version 3 (modified by lnerger, 40 hours ago) ( diff )

--

PDAFomi_set_localize_covar

This page documents the routine PDAFomi_set_localize_covar of PDAF-OMI, which was introduced with PDAF V3.0.

The routine has to be called in init_dim_obs_OBSTYPE in each observation module if the localized EnKF or the ENSRF/EAKF with localization are used. It initializes the information for covariance localization.

See the page describing PDAF-OMI observation modules for the full documentation of OMI observation modules and the page on implemeting the analysis step with the universal PDAF 3 interface.

The interface is for isotropic localization:

  SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, &
       locweight, cradius, sradius)

    TYPE(obs_f), INTENT(inout) :: thisobs       ! Data type with full observation
    INTEGER, INTENT(in) :: dim                  ! State dimension
    INTEGER, INTENT(in) :: ncoords              ! Number of coordinate directions
    REAL, INTENT(in)    :: coords(dim,ncoords)  ! Coordinates of state vector elements
    INTEGER, INTENT(in) :: locweight            ! Localization weight type
    REAL, INTENT(in)    :: cradius              ! localization radius
    REAL, INTENT(in)    :: sradius              ! Support radius for weight functions

Notes:

  • The routine allows to specify the localization radius and support radius (lradius, sradius) and localization function (locweight) individually for each observation type.
  • The coordinate array coords specifies the coordinates of each element in the state vector. The coordinate units have to be consistent with those used to specify the coordinates of observations.
  • The routine only supports a fixed localization radius throughout the domain.
  • One can also directly call the routine PDAFomi_set_localize_covar_iso, e.g. when calling from a program coded in C.

PDAFomi_set_localize_covar for non-isotropic localization

There is an alternative interface for non-isotropic localization. In this variant cradius and sradius are specified as vectors holding a value of the localization radius for each coordinate direction. This permits for non-isotropic localization.

  SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, &
       locweight, cradius, sradius)

    TYPE(obs_f), INTENT(inout) :: thisobs       ! Data type with full observation
    INTEGER, INTENT(in) :: dim                  ! State dimension
    INTEGER, INTENT(in) :: ncoords              ! Number of coordinate directions
    REAL, INTENT(in)    :: coords(dim,ncoords)  ! Coordinates of state vector elements
    INTEGER, INTENT(in) :: locweight            ! Localization weight type
    REAL, INTENT(in)    :: cradius(ncoords)     ! directional localization radii
    REAL, INTENT(in)    :: sradius(ncoords)     ! directional support radii for weight functions

Note:

  • One can also directly call the routine PDAFomi_set_localize_covar_noniso, e.g. when calling from a program coded in C.

PDAFomi_set_localize_covar for non-isotropic localization with different weight functions

There is also an alternative interface for non-isotropic localization which further allows to specify different weight functions for each direction. This allows, for example, to use a constant weight in the vertical direction, but smooth decaying weight in the horizontal directions. In this variant of the interface cradius and sradius are specified as vectors holding a value of localization radius for each coordinate direction. In addition locweight is specified as a vector holding the localization function index for each coordinate direction.

  SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, &
       locweight, cradius, sradius)

    TYPE(obs_f), INTENT(inout) :: thisobs       ! Data type with full observation
    INTEGER, INTENT(in) :: dim                  ! State dimension
    INTEGER, INTENT(in) :: ncoords              ! Number of coordinate directions
    REAL, INTENT(in)    :: coords(dim,ncoords)  ! Coordinates of state vector elements
    INTEGER, INTENT(in) :: locweight(ncoords)   ! directional localization weight types
    REAL, INTENT(in)    :: cradius(ncoords)     ! directional localization radii
    REAL, INTENT(in)    :: sradius(ncoords)     ! directional support radii for weight functions

Note:

  • One can also directly call the routine PDAFomi_set_localize_covar_noniso_locweights, e.g. when calling from a program coded in C.
Note: See TracWiki for help on using the wiki.