= U_obs_op_f = The page document the user-supplied call-back routine `U_obs_op_f`. The routine `U_obs_op_f` is a call-back routine that has to be provided by the user. In the simplified interface the predefined name of the routine is `obs_op_f_pdaf`, but in the full interface, the user can choose the name of the routine. 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 U_obs_op_f(step, dim_p, dim_obs_f, state_p, m_state_f) }}} with * `step` : `integer, intent(in)`[[BR]] Current time step * `dim_p` : `integer, intent(in)`[[BR]] Size of state vector (local part in case of parallel decomposed state) * `dim_obs_f` : `integer, intent(in)`[[BR]] Size of full observation vector * `state_p` : `real, intent(in), dimension(dim_p)`[[BR]] Model state vector * `m_state_f` : `real, intent(out), dimension(dim_obs_f)`[[BR]] Full observed state (i.e. the result after applying the observation operator to `state_p`) Hints: * The routine is similar to `init_dim_obs` used for the global filters. However, with a domain-decomposed model `m_state_f` will need to contain parts of the state vector from neighboring model sub-domains. Thus, one needs to collect this information which resides in the memory of other processes. PDAF provides the routine [wiki:PDAF_gather_obs_f PDAF_gather_obs_f] for this task. The example implementation in `tutorial/classical/online_2D_parallelmodel` shows the use of `PDAF_gather_obs_f`. * In case of a parallelized analysis step one has to take care that the order of observation in m_state_f is consistent with the order in the full observation vector `obs_f` generated by `init_obs_f_pdaf`. * In case of a parallelized analysis step the full vector `m_state_f` can be obtained by first computing the process-local vector m_state_p from the state vector `state_p` and then calling the routine [wiki:PDAF_gather_obs_f] (introduced with PDAF V1.13). When `PDAF_gather_obs_f` is used in both `init_dim_obs_f_pdaf` and `obs_op_f_pdaf` it is ensured that the order of the entries in the full observation vector and `m_state_f` is consistent.