| Version 3 (modified by , 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
coordsspecifies 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.
