Changes between Version 20 and Version 21 of OMI_Callback_obs_pdafomi


Ignore:
Timestamp:
Dec 9, 2021, 3:41:34 PM (12 months ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OMI_Callback_obs_pdafomi

    v20 v21  
    121121
    122122'''Notes:'''
    123  - The arguments in the calls to `obs_op_TYPE` are input argumnets to `obs_op_pdafomi`. They are just passed on.
     123 - The arguments in the calls to `obs_op_TYPE` are input arguments to `obs_op_pdafomi`. They are just passed on.
    124124 - The order of the calls to `obs_op_TYPE` is not relevant because the setup of the overall full observation vector is defined by the order of the calls in init_dim_obs_pdafomi. Anyway, it's good practice to keep the order of the calls consistent.
    125125 - We don't need an IF-statement with `assim_TYPE` here. The check is done within each obs-module.
     
    187187 - The order of the calls to `obs_op_TYPE` is not relevant because the setup of the overall full observation vector is defined by the order of the calls in init_dim_obs_pdafomi. Anyway, it's good practice to keep the order of the calls consistent.
    188188
     189
     190
     191== obs_op_lin_pdafomi ==
     192
     193The routine is called during the analysis step of the 3D-Var methods and it is only required in this case (3D-Var methods have been added with PDAF V2.0). It has to perform the operation of the linearized observation operator acting on a state vector that is provided as `state_p`. The observed state has to be returned in `m_state_p`. In this routine one just calls `obs_op_lin_TYPE` for each observation type.
     194
     195The '''interface''' for this routine is:
     196{{{
     197SUBROUTINE obs_op_lin_pdafomi(step, dim_p, dim_obs_p, state_p, m_state_p)
     198
     199  INTEGER, INTENT(in) :: step               ! Currrent time step
     200  INTEGER, INTENT(in) :: dim_p              ! PE-local dimension of state
     201  INTEGER, INTENT(in) :: dim_obs_p          ! Dimension of observed state
     202  REAL, INTENT(in)    :: state_p(dim_p)     ! PE-local model state
     203  REAL, INTENT(out) :: m_state_p(dim_obs_p) ! PE-local observed state
     204}}}
     205
     206
     207The '''implementation steps''' are the same as for `obs_op_pdafomi`.
     208
     209An '''example''' is provided in `tutorial/variational/online_2D_serialmodel/`.
     210
     211'''Notes:'''
     212 - The arguments in the calls to `obs_op_lin_TYPE` are input arguments to `obs_op_pdafomi`. They are just passed on.
     213 - The order of the calls to `obs_op_TYPE` is not relevant because the setup of the overall full observation vector is defined by the order of the calls in init_dim_obs_pdafomi. Anyway, it's good practice to keep the order of the calls consistent.
     214 - We don't need an IF-statement with `assim_TYPE` here. The check is done within each obs-module.
     215 - If the full observation operator for the observation type is linear by itself, one can just call `obs_op_TYPE`. Thus, no additional routine inside the observation module is required in this case.
     216
     217
     218== obs_op_lin_pdafomi ==
     219
     220The routine is called during the analysis step of the 3D-Var methods and it is only required in this case (3D-Var methods have been added with PDAF V2.0). It has to perform the operation of the adjoint observation operator acting on an observation vector that is provided as `m_state_p`. The resulting state vector has to be returned in `state_p`. In this routine one just calls `obs_op_adj_TYPE` for each observation type.
     221
     222The '''interface''' for this routine is:
     223{{{
     224SUBROUTINE obs_op_adj_pdafomi(step, dim_p, dim_obs_p, state_p, m_state_p)
     225
     226  INTEGER, INTENT(in) :: step               ! Currrent time step
     227  INTEGER, INTENT(in) :: dim_p              ! PE-local dimension of state
     228  INTEGER, INTENT(in) :: dim_obs_p          ! Dimension of observed state
     229  REAL, INTENT(in)    :: m_state_p(dim_obs_p) ! PE-local full observed state
     230  REAL, INTENT(inout) :: state_p(dim_p)     ! PE-local model state
     231}}}
     232
     233
     234The '''implementation steps''' are the same as for `obs_op_pdafomi`.
     235
     236An '''example''' is provided in `tutorial/variational/online_2D_serialmodel/`.
     237
     238'''Notes:'''
     239 - The arguments in the calls to `obs_op_adj_TYPE` are input arguments to `obs_op_adj_pdafomi`. They are just passed on.
     240 - The order of the calls to `obs_op_adj_TYPE` is not relevant because the setup of the overall full observation vector is defined by the order of the calls in init_dim_obs_pdafomi. Anyway, it's good practice to keep the order of the calls consistent.
     241 - We don't need an IF-statement with `assim_TYPE` here. The check is done within each obs-module.
     242
     243
     244
     245
     246
    189247== deallocate_obs_pdafomi ==
    190248
    191249The file callback_obs_pdafomi.F90 also contains a routine deallocate_obs_pdafomi. Each obs-module allocates arrays in the observation type `obs_f` and `deallocate_obs_pdafomi` is used to deallocate the different observation-specific arrays after the analysis step.
     250
     251[[span(style=color: #FF0000, '''Warning:''' Calling `deallocate_obs_pdafomi` is only required in PDAF V1.16. It is obsolete in PDAF V2.0 and later)]]
    192252
    193253The '''implementation steps''' are: