Changes between Version 5 and Version 6 of ImplementAnalysislseik


Ignore:
Timestamp:
Sep 1, 2010, 4:27:16 PM (14 years ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ImplementAnalysislseik

    v5 v6  
    3838
    3939The 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].
    40 The interface for the routine `PDAF_put_state_lseik` contains routine names for routines that operate on the local analysis domains (marked by `_l` at then end of the routine name), as well as routines that consider all available observations required to perform local analyses with LSEIK within some sub-domain of a domain-decomposed model (marked by `_f` ('full') at then end of the routine name).  In case of a serial execution of the assimilation program, this will be all globally available observation. However, if the program is executed with parallelization, this might be a smaller set of observations. For simplicity, we assume for now that 'full' equals global.
     40The 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.
     41 
    4142
    4243The interface when using the LSEIK filter is the following:
    4344{{{
    44   SUBROUTINE PDAF_put_state_lseik(U_collect_state, U_init_dim_obs_f, U_obs_op_f, &
    45                                   U_init_obs_f, U_init_obs_l, U_prepoststep, U_prodRinvA_l, U_init_n_domains, &
     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, &
    4647                                  U_init_dim_l, U_init_dim_obs_l, U_g2l_state, U_l2g_state, U_g2l_obs, &
    4748                                  U_init_obsvar, U_init_obsvar_l, status)
     
    7677
    7778
    78 == `U_init_dim_obs` (init_dim_obs.F90) ==
     79== `U_init_dim_obs_full` (init_dim_obs_full.F90) ==
    7980
    80 This routine is used by all global filter algorithms (SEEK, SEIK, EnKF, ETKF).
     81This routine is used by all local filter algorithms (LSEIK, LETKF).
    8182
    8283The interface for this routine is:
    8384{{{
    84 SUBROUTINE init_dim_obs(step, dim_obs_p)
     85SUBROUTINE init_dim_obs_f(step, dim_obs_f)
    8586
    8687  INTEGER, INTENT(in)  :: step       ! Current time step
    87   INTEGER, INTENT(out) :: dim_obs_p  ! Dimension of observation vector
     88  INTEGER, INTENT(out) :: dim_obs_f  ! Dimension of full observation vector
    8889}}}
    8990
    90 The routine is called at the beginning of each analysis step.  It has to initialize the size `dim_obs_p` of the observation vector according to the current time step. Without parallelization `dim_obs_p` will be the size for the full model domain. When a domain-decomposed model is used, `dim_obs_p` will be the size of the observation vector for the sub-domain of the calling process.
     91The routine is called at the beginning of each analysis step, before the loop over all local analysis domains is entered.  It has to initialize the size `dim_obs_f` of the full observation vector according to the current time step. For simplicity, `dim_obs_f` can be the size for the global model domain.
     92When a domain-decomposed model is used, `dim_obs_f` will be the size of the observation vector for the sub-domain of the calling process plus .
    9193
    9294Some hints: