Changes between Version 16 and Version 17 of ImplementAnalysislseik


Ignore:
Timestamp:
Sep 3, 2010, 12:06:43 PM (14 years ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ImplementAnalysislseik

    v16 v17  
    3232The general espects of the filter specific routines `PDAF_put_state_*` have been described on the page [ModifyModelforEnsembleIntegration Modification of the model core for the ensemble integration].
    3333The interface for the routine `PDAF_put_state_lseik` contains several routine names for routines that operate on the local analysis domains (marked by `_l` at then end of the routine name). In addition, there are names for routines that consider all available observations required to perform local analyses with LSEIK within some sub-domain of a domain-decomposed model (marked by `_full` at then end of the routine name). In case of a serial execution of the assimilation program, this will be all globally available observations. However, if the program is executed with parallelization, this might be a smaller set of observations. To explain the  difference it is assumed for simplicity that a local analysis domain consists of a single vertical column of the model grid. In addition, we assume that the domain decomposition splits the global model domain by vertical boundaries as is typical for ocean models and that the observations are spatially distributed observations of model fields that are part of the state vector.  Under these assumptions, the situation is the following: When a model uses domain decomposition, the LSEIK filter is executed such that for each model sub-domain a loop over all local analysis domains (e.g. vertical columns) that belong to the model sub-domain is performed. For the update of each single vertical column observations from some larger domain surrounding the vertical column are considered. If the influence radius for the observations is sufficiently small there will be vertical columns for which all relevant observations reside inside the model sub-domain of the process. However, if a vertical column is considered that is located close to the boundary to the model sub-domain, there will be some observations that don't belong spatially to the local model sub-domain, but to a neighboring model sub-domain. These observations nonetheless are required on the local model sub-domain. Thus, a simple way to handle this situation is to initialize for each process all globally available observations, together with their coordinates. While this method is simple, it can also become inefficient if the assimilation program is executed using a large number of processes. As for an initial implementation, it is usually not the concern to obtain the highest parallel efficiency, the description below assumes that 'full' refers to the global model domain.
    34  
    3534
    3635The interface when using the LSEIK filter is the following:
     
    6059 * `status`: The integer status flag. It is zero, if PDAF_get_state is exited without errors.
    6160
     61Note:
     62 * The order of the routine names does not show the order in which these routines are executed. There is a section on the order of the execution at the bottom of this page.
     63
    6264== User-supplied routines ==
    6365
     
    8789
    8890Some hints:
    89  * It can be useful to not only determine the size of the observation vector at this point. One can also already gather information about the location of the observations, which will be used later, e.g. to implement the observation operator. An array for the locations can be defined in a module like `mod_assimilation`.
     91 * It can be useful to not only determine the size of the observation vector at this point. One can also already gather information about the location of the observations, which will be used later, e.g. to implement the observation operator. In addition, one can already prepare an array that holds the full observation vector. This can be used later by `U_init_obs_l` to initialize a local vector of observations by selecting the relevant parts of the full observation vector. Arrays for the locations can be defined in a module like `mod_assimilation`.
    9092 * 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`.
    9193
     
    148150
    149151Hints:
    150  * 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.
     152 * For parallel efficiency the LSEIK algorithm is implemented in a way that first the full vectors are initialized. Thus, if `observation_f` has been initialized before `U_init_obs_local` is executed (e.g. by `U_init_dim_obs_full`), 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.
    151153
    152154=== `U_prepoststep` (prepoststep_seik.F90) ===
     
    288290
    289291
     292=== `U_global2local_obs` (global2local_obs.F90) ===
     293
     294This routine is used by all local filter algorithms (LSEIK, LETKF).
     295
     296The interface for this routine is:
     297{{{
     298SUBROUTINE global2local_obs(domain_p, step, dim_obs_f, dim_obs_l, mstate_f, mstate_l)
     299
     300  INTEGER, INTENT(in) :: domain_p              ! Current local analysis domain
     301  INTEGER, INTENT(in) :: step                  ! Current time step
     302  INTEGER, INTENT(in) :: dim_obs_f             ! Dimension of full observation vector for model sub-domain
     303  INTEGER, INTENT(in) :: dim_obs_l             ! Dimension of observation vector for local analysis domain
     304  REAL, INTENT(in)    :: mstate_f(dim_obs_f)   ! Full observation vector for model sub-domain
     305  REAL, INTENT(out)   :: mstate_l(dim_obs_l)   ! Observation vector for local analysis domain
     306}}}
     307
     308The routine is called during the loop over the local analysis domains in the analysis step. It has to provide a local observation vector `mstate_l` for the observation domain that corresponds to the local analysis domain with index `domain_p`. Provided to the routine is the full observation vector `mstate_f` of which the local part has to be extracted.
     309
     310Hints:
     311 * The  vector `mstate_f` that is provided to the routine is one of the observed state vectors that are produced by `U_obs_op_full`.
     312 * Some operations performed here are analogous to those required to initialize a local vector of observations in `U_init_obs_l`. If that routine reads first a full vector of observations (e.g. in `U_init_dim_obs_full`), this vector has to be restricted to the relevant observations for the current local analysis domain. For it, one can e.g. initialize an index array when `U_init_dim_obs_local` is executed. (Which happens before `U_global2local_obs`)
     313
     314
     315
     316
    290317=== `U_init_obsvar` (init_obsvar.F90) ===
    291318