Changes between Version 37 and Version 38 of AddFilterAlgorithm


Ignore:
Timestamp:
Feb 21, 2012, 7:27:50 PM (12 years ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AddFilterAlgorithm

    v37 v38  
    33[[PageOutline(2-3,Contents of this page)]]
    44
    5 This text describes the implementation strategy and internal structure of PDAF valid for version 1.8.0 and later. If you use an earlier version of PDAF, we recommend to update to the most recent version. In this text, we assume that the reader is already familiar with PDAF to the extend of experience with the implementation of a model with PDAF that is described in the [ImplementationGuide Implementation Guide].
     5This text describes the implementation strategy and internal structure of PDAF valid for version 1.8.0 and later. If you use an earlier version of PDAF, we recommend to update to the most recent version. In this text, we assume that the reader is already familiar with PDAF to the extend that it is known how PDAF is connected to a model as is described in the [ImplementationGuide Implementation Guide].
    66
    77The internal structure of PDAF is organized into a generic part providing the infrastructure to perform ensemble forecasts and filter analysis steps. This generic part is independent of the particular filter algorithm and only distinguishes between ensemble based filters (all filters except SEEK) and mode based filters (currently only SEEK). The filter-specific routines are called through an internal interface.
    88
    9 Each filter algorithm consists of 3 mandatory routines plus 2 optional routines. All routines are described below. They are called through the internal interface of PDAF, except for the "put state" routine (`PDAF_put_state_X` where X is the name of the selected filter).
     9Each filter algorithm consists of 3 mandatory routines plus 2 optional routines. All routines are described below. They are called through the internal interface of PDAF, except for the "put state" routine (`PDAF_put_state_X` where X is the name of the selected filter), which is cirectly called in the model code.
    1010
    1111== PDAF's Internal Interface ==
    1212
    13 Before explaining the filter-specific routines and the calling interface of each routine, we provide an overview of the internal interface routines of PDAF. The structure of the internal interface of PDAF is depicted in Figure 1 (For the filter-specific routines, 'X' is the name of the filter algorithm). Shown are only the routines that are relevant for the implementation of a new filter method. Only the internal interface routines in the middle column of Fig. 1 and the filter-specific routines need to be considered when a ne filter is implmented.
     13Before explaining the filter-specific routines and the calling interface of each routine, we provide an overview of the internal interface routines of PDAF. The structure of the internal interface of PDAF is depicted in Figure 1 (For the filter-specific routines, 'X' is the name of the filter algorithm). Shown are only the routines that are relevant for the implementation of a new filter method. Only the internal interface routines in the middle column of Fig. 1 and the filter-specific routines in the right column of Fig. 1 need to be considered when a new filter is implemented.
    1414
    1515[[Image(//pics/internal_interface.png)]]
     
    4343|| `dim_eof` || For mode based filters (currently only SEEK), this is the number of modes used in the state covariance matrix. ||
    4444
     45== Internal arrays ==
     46
     47Several internal arrays are allocated when PDAF is initialized. These arrays are decraed in `PDAF_mod_filter`. hey are allocated in `PDAF_X_alloc` (see below for details) and remain allocated throughout the assimilation process.
     48For the processes that compute the analysis (those with `filterpe=.true.`) the following arrays are defined:
     49|| Array || Dimension || Comment ||
     50||`state`|| `dim_p`   || State vector. Used in all filters. ||
     51||`eofV` || `dim_p` x `dim_ens` || Ensemble array. Used in all filters. ||
     52||`eofU` || `dim_ens-1` x `dim_ens-1` (SEEK, SEIK, ESTKF)[[BR]] `dim_ens` x `dim_ens` (ETKF) || Eigenvalue matrix '''U''' from '''P'''='''VUV'''^T^ (SEEK, SEIK) or transform matrix '''A''' (ETKF, ESTKF). Not used in EnKF. ||
     53||`state_inc` || `dim_p` || state increment vector. Only allocated if incremental analysis updates are used ||
     54
     55For the processes that only compute model forecasts but are not involved in the analysis step (i.e. `filterpe=.false.`), only one array is defined:
     56|| Array || Dimension || Comment ||
     57||`eofV` || `dim_p` x `dim_ens_l` || Ensemble array on non-filter processes. Used in all filters. ||
    4558
    4659== Filter-specific routines ==
     
    100113 * `outflag`: Error flag [integer, input/output]
    101114
    102 All arrays that need to be allocated are declared in the Fortran module `PDAF_mod_filter`. Here, also the dimensions of the arrays are declared. For the allocation of arrays, one has to distinguish between processes that compute the analysis step and those that only participate in the ensemble forecast. For the processes that compute the analysis (those with `filterpe=.true.`) it is mandatory to allocate the following two arrays:
     115All arrays that need to be allocated are declared in the Fortran module `PDAF_mod_filter`. Here, also the dimensions of the arrays are declared. For the allocation of arrays, one has to distinguish between processes that compute the analysis step and those that only participate in the ensemble forecast.
     116
     117For the processes that compute the analysis (those with `filterpe=.true.`) it is mandatory to allocate the following two arrays:
    103118 * `state`: The state vector of size `dim_p`.
    104119 * `eofV`: This is the ensemble matrix in all ensemble-based filters. For SEEK it is the matrix holding eigenvectors. `eofV` has size (`dim_p`, `dim_ens`).