32 | 32 | The 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]. |
33 | 33 | The 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. |
| 292 | === `U_global2local_obs` (global2local_obs.F90) === |
| 293 | |
| 294 | This routine is used by all local filter algorithms (LSEIK, LETKF). |
| 295 | |
| 296 | The interface for this routine is: |
| 297 | {{{ |
| 298 | SUBROUTINE 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 | |
| 308 | The 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 | |
| 310 | Hints: |
| 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 | |