Changes between Version 7 and Version 8 of ImplementAnalysislseik


Ignore:
Timestamp:
Sep 1, 2010, 4:53:56 PM (10 years ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ImplementAnalysislseik

    v7 v8  
    4444{{{
    4545  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)
    4949}}}
    5050with the following arguments:
     
    5353 * `U_obs_op_full`: The name of the user-supplied routine that acts as the observation operator on some state vector
    5454 * `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 domain
     55 * `U_init_obs_local`: The name of the user-supplied routine that initializes the vector of observations for a local analysis domain
    5656 * `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.
    5858 * `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 domain
    60  * `U_init_dim_obs_l`: The name of the routine that initializes the size of the observation vector for a local analysis domain
     59 * `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
    6161 * `U_g2l_state`: The name of the routine that initializes a local state vector from the global state vector
    6262 * `U_l2g_state`: The name of the routine that initializes the part of the global state vector corresponding to the provided local state vector
    6363 * `U_g2l_obs`: The name of the routine that initialized a local observation vector from a full observation vector
    6464 * `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)
    6666 * `status`: The integer status flag. It is zero, if PDAF_get_state is exited without errors.
    6767
     
    7777
    7878
    79 == `U_init_dim_obs_full` (init_dim_obs_full.F90) ==
     79=== `U_init_dim_obs_full` (init_dim_obs_full.F90) ===
    8080
    8181This routine is used by all local filter algorithms (LSEIK, LETKF).
     
    9595 * 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`.
    9696
    97 == `U_obs_op_full` (obs_op_full.F90) ==
     97=== `U_obs_op_full` (obs_op_full.F90) ===
    9898
    9999This routine is used by all local filter algorithms (LSEIK, LETKF).
     
    115115 * 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.
    116116
    117 == `U_init_obs_full` (init_obs_full.F90) ==
     117=== `U_init_obs_full` (init_obs_full.F90) ===
    118118
    119119This routine is used by all local filter algorithms (LSEIK, LETKF).
     
    134134 * 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.
    135135
    136 == `U_prodRinvA` (prodrinva.F90) ==
     136
     137=== `U_init_obs_local` (init_obs_local.F90) ===
     138
     139This routine is used by all local filter algorithms (LSEIK, LETKF).
     140
     141The interface for this routine is:
     142{{{
     143SUBROUTINE 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
     151The routine is called during the analysis step during the loop over the local analysis domain.
     152It 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
     154Hints:
     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) ===
    137160
    138161This routine is used by all filters whose algorithm uses the inverse of the observation error covariance matrix (SEEK, SEIK, and ETKF).
     
    160183
    161184
    162 == `U_init_obsvar` (init_obsvar.F90) ==
     185=== `U_init_obsvar` (init_obsvar.F90) ===
    163186
    164187This 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).