Changes between Version 7 and Version 8 of ImplementAnalysislseik
- Timestamp:
- Sep 1, 2010, 4:53:56 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
ImplementAnalysislseik
v7 v8 44 44 {{{ 45 45 SUBROUTINE PDAF_put_state_lseik(U_collect_state, U_init_dim_obs_full, U_obs_op_full, U_init_obs_full, & 46 U_init_obs_l , U_prepoststep, U_prodRinvA_l, U_init_n_domains, &47 U_init_dim_l , U_init_dim_obs_l, U_g2l_state, U_l2g_state, U_g2l_obs, &48 U_init_obsvar, U_init_obsvar_l , status)46 U_init_obs_local, U_prepoststep, U_prodRinvA_local, U_init_n_domains, & 47 U_init_dim_local, U_init_dim_obs_local, U_g2l_state, U_l2g_state, U_g2l_obs, & 48 U_init_obsvar, U_init_obsvar_local, status) 49 49 }}} 50 50 with the following arguments: … … 53 53 * `U_obs_op_full`: The name of the user-supplied routine that acts as the observation operator on some state vector 54 54 * `U_init_obs_full`: The name of the user-supplied routine that initializes the vector of observations 55 * `U_init_obs_l `: The name of the user-supplied routine that initializes the vector of observations for a local analysis domain55 * `U_init_obs_local`: The name of the user-supplied routine that initializes the vector of observations for a local analysis domain 56 56 * `U_prepoststep`: The name of the pre/poststep routine as in `PDAF_get_state` 57 * `U_prodRinvA_l `: The name of the user-supplied routine that computes the product of the inverse of the observation error covariance matrix with some matrix provided to the routine by PDAF. This operation occurs during the analysis step of the SEIK filter.57 * `U_prodRinvA_local`: The name of the user-supplied routine that computes the product of the inverse of the observation error covariance matrix with some matrix provided to the routine by PDAF. This operation occurs during the analysis step of the SEIK filter. 58 58 * `U_init_n_domains`: The name of the routine that provides the number of local analysis domains 59 * `U_init_dim_l `: The name of the routine that provides the state domains for a local analysis domain60 * `U_init_dim_obs_l `: The name of the routine that initializes the size of the observation vector for a local analysis domain59 * `U_init_dim_local`: The name of the routine that provides the state domains for a local analysis domain 60 * `U_init_dim_obs_local`: The name of the routine that initializes the size of the observation vector for a local analysis domain 61 61 * `U_g2l_state`: The name of the routine that initializes a local state vector from the global state vector 62 62 * `U_l2g_state`: The name of the routine that initializes the part of the global state vector corresponding to the provided local state vector 63 63 * `U_g2l_obs`: The name of the routine that initialized a local observation vector from a full observation vector 64 64 * `U_init_obsvar`: The name of the user-supplied routine that provides a global mean observation error variance to PDAF (This routine will only be executed, if an adaptive forgetting factor is used) 65 * `U_init_obsvar_l `: The name of the user-supplied routine that provides a mean observation error variance for the local analysis domain to PDAF (This routine will only be executed, if an adaptive forgetting factor is used)65 * `U_init_obsvar_local`: The name of the user-supplied routine that provides a mean observation error variance for the local analysis domain to PDAF (This routine will only be executed, if an adaptive forgetting factor is used) 66 66 * `status`: The integer status flag. It is zero, if PDAF_get_state is exited without errors. 67 67 … … 77 77 78 78 79 == `U_init_dim_obs_full` (init_dim_obs_full.F90)==79 === `U_init_dim_obs_full` (init_dim_obs_full.F90) === 80 80 81 81 This routine is used by all local filter algorithms (LSEIK, LETKF). … … 95 95 * The routine is similar to `init_dim_obs` used in the global filters. However, if the global filter is used with a domain-decomposed model, it only initializes the size of the observation vector for the local model sub-domain. This is different for the local filters, as the local analysis also requires observational data from neighboring model sub-domains. Anyway, one can base on an implemented routine `init_dim_obs` to implement `init_dim_obs_full`. 96 96 97 == `U_obs_op_full` (obs_op_full.F90)==97 === `U_obs_op_full` (obs_op_full.F90) === 98 98 99 99 This routine is used by all local filter algorithms (LSEIK, LETKF). … … 115 115 * Analogously to the situation with `init_dim_obs_full`, the routine is similar to `init_dim_obs` used for the global filters. However, with a domain-decompoared model also here `m_state_f` will contain parts of the state vector from neighboring model sub-domains. To make these parts accessible, some parallel communication will be necessary (The state information for a neighboring model sub-domain, will be in the memory of the process that handles that sub-domain). The example implementation in `testsuite/dummymodel_1d` uses the function `MPI_AllGatherV` for this communication. 116 116 117 == `U_init_obs_full` (init_obs_full.F90)==117 === `U_init_obs_full` (init_obs_full.F90) === 118 118 119 119 This routine is used by all local filter algorithms (LSEIK, LETKF). … … 134 134 * As for the other 'full' routines: While the global counterpart of this routine (`init_obs`) has to initialize the observation vector for the local model sub-domain, the 'full' routine has to include observations that spatially belong to neighboring model sub-domains. As an easy choice one can simply initialize a vector of all globally available observations. 135 135 136 == `U_prodRinvA` (prodrinva.F90) == 136 137 === `U_init_obs_local` (init_obs_local.F90) === 138 139 This routine is used by all local filter algorithms (LSEIK, LETKF). 140 141 The interface for this routine is: 142 {{{ 143 SUBROUTINE init_obs_local(domain_p, step, dim_obs_l, observation_l) 144 145 INTEGER, INTENT(in) :: domain_p ! Current local analysis domain 146 INTEGER, INTENT(in) :: step ! Current time step 147 INTEGER, INTENT(in) :: dim_obs_l ! Local dimension of observation vector 148 REAL, INTENT(out) :: observation_l(dim_obs_l) ! Local observation vector 149 }}} 150 151 The routine is called during the analysis step during the loop over the local analysis domain. 152 It has to provide the vector of observations for analysis of the local analysis domain of index `domain_p` in `observation_l` for the current time step. 153 154 Hints: 155 * For parallel efficiency the LSEIK is implemented in a way that first the full vectors are initialized. Thus, as `observation_f` has been initialized before `init_obs_local` is executed, the operations performed in this routine will be to select the part of the full observation vector that is relevant for the current local analysis domain. 156 157 158 159 === `U_prodRinvA` (prodrinva.F90) === 137 160 138 161 This routine is used by all filters whose algorithm uses the inverse of the observation error covariance matrix (SEEK, SEIK, and ETKF). … … 160 183 161 184 162 == `U_init_obsvar` (init_obsvar.F90)==185 === `U_init_obsvar` (init_obsvar.F90) === 163 186 164 187 This routine is used by the global filter algorithms SEIK and ETKF as well as the local filters LSEIK and LETKF. The routine is only called if the adaptive forgetting factor is used (`type_forget=1` in the example impementation).