Version 3 (modified by 7 years ago) (diff) | ,
---|
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)
Current time stepdim_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 vectorstate_p
:real, intent(in), dimension(dim_p)
Model state vectorm_state_f
:real, intent(out), dimension(dim_obs_f)
Full observed state (i.e. the result after applying the observation operator tostate_p
)
Hints:
- The routine is similar to
obs_op_pdaf
used for the global filters. However, with a domain-decomposed modelm_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 intestsuite/dummymodel_1d
uses the functionMPI_AllGatherV
for this communication. - 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 byinit_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 vectorstate_p
and then calling the routine PDAF_gather_obs_f (introduced with PDAF V1.13). WhenPDAF_gather_obs_f
is used in bothinit_dim_obs_f_pdaf
andobs_op_f_pdaf
it is ensured that the order of the entries in the full observation vector andm_state_f
is consistent.