U_distribute_state
The page document the user-supplied call-back routine U_distribute_state
.
The routine U_distribute_state
is a call-back routine that has to be provided by the user. In the simplified interface the predefined name of the routine is distribute_state_pdaf
, but in the full interface, the user can choose the name of the routine.
U_distribute_state
is called by PDAF_get_state
and PDAF_assimilate_X
with 'X' being the name of a filter method. The routine is called at the beginning of a forecast phase once for each ensemble member and as many times as there are states to be integrated by a model task. The purpose of the routine is to fill the model fields from the state information contained in the provided state vector.
The interface is the following:
SUBROUTINE U_distribute_state(dim_p, state_p)
with
dim_p
:integer, intent(in)
Size of the provided state vectorstate_p
:real, intent(inout), dimension(dim_p)
State vector for process-local model sub-domain
Notes:
- When the routine is called a state vector
state_p
and its sizedim_p
are provided. As the user has defined how the model fields are stored in the state vector, one can initialize the model fields from this information. - If the model is not parallelized,
state_p
will contain a full state vector. If the model is parallelized using domain decomposition,state_p
will contain the part of the state vector that corresponds to the model sub-domain for the calling process. - The operations performed in
U_distribute_state
andU_collect_state
are the inverse operations of each other. - The routine is executed by all processes that belong to model tasks.
Some hints:
- If the state vector does not include all model fields, it can be useful to keep a separate array to store those additional fields. This array has to be kept separate from PDAF, but can be defined using a module like
mod_assimilation
.