Version 1 (modified by lnerger, 6 years ago) (diff)



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)


  • dim_p : integer, intent(in)
    Size of the provided state vector
  • state_p: real, intent(inout), dimension(dim_p)
    State vector for process-local model sub-domain


  • When the routine is called a state vector state_p and its size dim_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 and U_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.