| | 1 | = PDAFomi_set_localize_covar = |
| | 2 | |
| | 3 | This page documents the routine `PDAFomi_set_localize_covar`` of PDAF-OMI, which are introduced with PDAF3.0. |
| | 4 | |
| | 5 | 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. |
| | 6 | |
| | 7 | ||See the [wiki:OMI_observation_modules page describing PDAF-OMI observation modules] for the full documentation of OMI observation modules and the [wiki:ImplementAnalysislenkfOmi page on implementing the analysis step of the LEnKF] or the [wiki:ImplementAnalysisENSRFOmi page on implementing the analysis step of the ENSRF/EAKF] . || |
| | 8 | |
| | 9 | The interface is for isotropic localization: |
| | 10 | {{{ |
| | 11 | SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, & |
| | 12 | locweight, cradius, sradius) |
| | 13 | }}} |
| | 14 | with arguments: |
| | 15 | {{{ |
| | 16 | TYPE(obs_f), INTENT(inout) :: thisobs ! Data type with full observation |
| | 17 | INTEGER, INTENT(in) :: dim ! State dimension |
| | 18 | INTEGER, INTENT(in) :: ncoords ! Number of coordinate directions |
| | 19 | REAL, INTENT(in) :: coords(dim,ncoords) ! Coordinates of state vector elements |
| | 20 | INTEGER, INTENT(in) :: locweight ! Localization weight type |
| | 21 | REAL, INTENT(in) :: cradius ! localization radius |
| | 22 | REAL, INTENT(in) :: sradius ! Support radius for weight functions |
| | 23 | }}} |
| | 24 | |
| | 25 | '''Notes:''' |
| | 26 | * The routine allows to specify the localization radius and support radius (`lradius`, `sradius`) and localization function (`locweight`) individually for each observation type. |
| | 27 | * The coordinate array `coords` specified the coordinates of each element in the state vector. The units have to be consistent with those used to specify the coordinates of observations. |
| | 28 | * The routine only supports a fixed localization radius throughout the domain. |
| | 29 | * One can also directly call the routine `PDAFomi_set_localize_covar_iso`, e.g. when calling from a program coded in C. |
| | 30 | |
| | 31 | |
| | 32 | == `PDAFomi_set_localize_covar` for non-isotropic localization == |
| | 33 | |
| | 34 | There is an alternative interface for non-isotropic localization. In this variant `cradius` and `sradius` are specified as vectors holding a value of localization radius for each coordinate direction. This permits for non-isotropic localization. |
| | 35 | |
| | 36 | {{{ |
| | 37 | SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, & |
| | 38 | locweight, cradius, sradius) |
| | 39 | }}} |
| | 40 | with arguments: |
| | 41 | {{{ |
| | 42 | TYPE(obs_f), INTENT(inout) :: thisobs ! Data type with full observation |
| | 43 | INTEGER, INTENT(in) :: dim ! State dimension |
| | 44 | INTEGER, INTENT(in) :: ncoords ! Number of coordinate directions |
| | 45 | REAL, INTENT(in) :: coords(dim,ncoords) ! Coordinates of state vector elements |
| | 46 | INTEGER, INTENT(in) :: locweight ! Localization weight type |
| | 47 | REAL, INTENT(in) :: cradius(ncoords) ! directional localization radii |
| | 48 | REAL, INTENT(in) :: sradius(ncoords) ! directional support radii for weight functions |
| | 49 | }}} |
| | 50 | |
| | 51 | **Note:** |
| | 52 | * One can also directly call the routine `PDAFomi_set_localize_covar_noniso`, e.g. when calling from a program coded in C. |
| | 53 | |
| | 54 | |
| | 55 | |
| | 56 | |
| | 57 | == `PDAFomi_set_localize_covar` for non-isotropic localization with different weight functions == |
| | 58 | |
| | 59 | There is 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 smoother decaying weight in the horizontal directions. In this variant `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. |
| | 60 | |
| | 61 | {{{ |
| | 62 | SUBROUTINE PDAFomi_set_localize_covar(thisobs, dim, ncoords, coords, & |
| | 63 | locweight, cradius, sradius) |
| | 64 | }}} |
| | 65 | with arguments: |
| | 66 | {{{ |
| | 67 | TYPE(obs_f), INTENT(inout) :: thisobs ! Data type with full observation |
| | 68 | INTEGER, INTENT(in) :: dim ! State dimension |
| | 69 | INTEGER, INTENT(in) :: ncoords ! Number of coordinate directions |
| | 70 | REAL, INTENT(in) :: coords(dim,ncoords) ! Coordinates of state vector elements |
| | 71 | INTEGER, INTENT(in) :: locweight(ncoords) ! directional localization weight types |
| | 72 | REAL, INTENT(in) :: cradius(ncoords) ! directional localization radii |
| | 73 | REAL, INTENT(in) :: sradius(ncoords) ! directional support radii for weight functions |
| | 74 | }}} |
| | 75 | |
| | 76 | **Note:** |
| | 77 | * One can also directly call the routine `PDAFomi_set_localize_covar_noniso_locweights`, e.g. when calling from a program coded in C. |