wiki:PDAFomi_set_localize_covar

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 implementing the analysis step of the LEnKF or the page on implementing the analysis step of the ENSRF/EAKF .

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.
Last modified 5 days ago Last modified on Mar 25, 2025, 7:45:39 PM
Note: See TracWiki for help on using the wiki.