Changes between Version 37 and Version 38 of AddFilterAlgorithm
- Timestamp:
- Feb 21, 2012, 7:27:50 PM (13 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AddFilterAlgorithm
v37 v38 3 3 [[PageOutline(2-3,Contents of this page)]] 4 4 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 thatis described in the [ImplementationGuide Implementation Guide].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 that it is known how PDAF is connected to a model as is described in the [ImplementationGuide Implementation Guide]. 6 6 7 7 The 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. 8 8 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) .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), which is cirectly called in the model code. 10 10 11 11 == PDAF's Internal Interface == 12 12 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.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 in the right column of Fig. 1 need to be considered when a new filter is implemented. 14 14 15 15 [[Image(//pics/internal_interface.png)]] … … 43 43 || `dim_eof` || For mode based filters (currently only SEEK), this is the number of modes used in the state covariance matrix. || 44 44 45 == Internal arrays == 46 47 Several 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. 48 For 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 55 For 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. || 45 58 46 59 == Filter-specific routines == … … 100 113 * `outflag`: Error flag [integer, input/output] 101 114 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: 115 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. 116 117 For the processes that compute the analysis (those with `filterpe=.true.`) it is mandatory to allocate the following two arrays: 103 118 * `state`: The state vector of size `dim_p`. 104 119 * `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`).