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.