wiki:obs_op_f_pdaf

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

--

obs_op_f_pdaf

The page document the user-supplied call-back routine obs_op_f_pdaf.

The routine obs_op_f_pdaf (called U_obs_op_f inside the PDAF core routines) is a call-back routine that has to be provided by the user. The routine is used with all filter algorithms using domain-localization (LSEIK, LETKF, LESTKF) and is independent of the particular algorithm. The routine is called during the analysis step, before the loop over the local analysis domain is entered. It purpose is to perform the operation of the observation operator acting on a state vector, which is provided as input argument. The observed state corresponding to the 'full' observation vector has to be returned.

The interface is the following:

SUBROUTINE obs_op_f_pdaf(step, dim_p, dim_obs_f, state_p, m_state_f)

with

  • step : integer, intent(in)
    Current time step
  • dim_p : integer, intent(in)
    Size of state vector (local part in case of parallel decomposed state)
  • dim_obs_f : integer, intent(in)
    Size of full observation vector
  • state_p : real, intent(in), dimension(dim_p)
    Model state vector
  • m_state_f : real, intent(out), dimension(dim_obs_f)
    Full observed state (i.e. the result after applying the observation operator to state_p)

Hint:

  • The routine is similar to obs_op_pdaf used for the global filters. However, with a domain-decomposed model m_state_f will contain parts of the state vector from neighboring model sub-domains. To make these parts accessible, some parallel communication will be necessary (The state information for a neighboring model sub-domain will be in the memory of the process that handles that sub-domain). The example implementation in testsuite/dummymodel_1d uses the function MPI_AllGatherV for this communication.