Changes between Version 1 and Version 2 of OMI_Callback_obs_pdafomi_PDAF3


Ignore:
Timestamp:
May 27, 2025, 3:25:09 PM (5 days ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OMI_Callback_obs_pdafomi_PDAF3

    v1 v2  
    1212<li><a href="OMI_debugging_PDAF3">Debugging functionality</a></li>
    1313<li><a href="ImplementationofAnalysisStep">Implementing the analysis step</a></li>
    14 <li><a href="OMI_nondiagonal_observation_error_covariance_matrices">Using nondiagonal R-matrices</a></li>
    1514<li><a href="Porting_to_OMI_PDAF3">Porting an existing implemention to OMI</a></li>
    1615<li><a href="nondiagonal_observation_error_covariance_matrices_PDAF3">Using nondiagonal R-matrices</a></</ol>
     
    150149== localize_covar_pdafomi ==
    151150
    152 In this routine one calls `localize_covar_TYPE` for each observation type. The routine is only required for the localized EnKF and performs covariance localization.
    153 
    154 The '''implementation steps''' are:
    155 1. Include the observation-specific routine `localize_covar_TYPE` from the observation-module with 'use'
    156 1. Initialize the array `coords` which holds the coordinates of all elements of the state vector for the current process domain
    157 1. Add a call to the observation-specific routine localize_covar_TYPE
    158 
    159 As an '''example''', in `tutorial/online_2D_serialmodel/` we have
    160 {{{
    161 SUBROUTINE localize_covar_pdafomi(dim_p, dim_obs, HP_p, HPH)
    162 
    163   USE obs_A_pdafomi, ONLY: localize_covar_A
    164   USE obs_B_pdafomi, ONLY: localize_covar_B
    165   USE obs_C_pdafomi, ONLY: localize_covar_C
    166 
    167   ... argument declarations omitted ...
    168 
    169   REAL, ALLOCATABLE :: coords_p(:,:) ! Coordinates of PE-local state vector entries
    170 
    171   ALLOCATE(coords_p(2, dim_p))
    172   coords_p = ...                     ! Initialize coords_p
    173 
    174   CALL localize_covar_A(dim_p, dim_obs, HP_p, HPH, coords_p)
    175   CALL localize_covar_B(dim_p, dim_obs, HP_p, HPH, coords_p)
    176   CALL localize_covar_C(dim_p, dim_obs, HP_p, HPH, coords_p)
    177 
    178   DEALLOCATE(coords_p)
    179 }}}
    180 
    181 '''Notes:'''
    182  - Instead of allocating and filling the coordinate array `coords_p` in this routine one could also do it once in `init_pdaf` and declare the array in the module `mod_assimilation`.
    183  - 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.
    184 
     151This was a routine that was used in the PDAF-OMI variant in PDAF2. In PDAF3 this was replaced by [wiki:PDAFomi_set_localize_covar], which is called in the main routine `init_dim_obs` of an observation module.
     152
     153For PDAF2, see the [wiki:OMI_Callback_obs_pdafomi description of the callobs_obs_pdafomi.F90 in PDAF2].
    185154
    186155
     
    203172The '''implementation steps''' are the same as for `obs_op_pdafomi`.
    204173
    205 An '''example''' is provided in `tutorial/variational/online_2D_serialmodel/`.
     174An '''example''' is provided in `tutorial/3dvar/online_2D_serialmodel/`.
    206175
    207176'''Notes:'''
     
    230199The '''implementation steps''' are the same as for `obs_op_pdafomi`.
    231200
    232 An '''example''' is provided in `tutorial/variational/online_2D_serialmodel/`.
     201An '''example''' is provided in `tutorial/3dvar/online_2D_serialmodel/`.
    233202
    234203'''Notes:'''
     
    241210
    242211
    243 == deallocate_obs_pdafomi ==
    244 
    245 The 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.
    246 
    247 || [[span(style=color: #FF0000, '''Note:''' Calling `deallocate_obs_pdafomi` is only required in PDAF V1.16. It is no longer required to call it in PDAF V2.0 and later)]] ||
    248 
    249 The '''implementation steps''' are:
    250 1. Include the observation-specific type `thisobs` from the observation-module with 'use' apply a name conversion like `obs_TYPE => thisobs`
    251 1. add a call to `PDAFomi_deallocate_obs` giving the observation-specific `obs_TYPE` as argument.
    252 1. To perform the deallocation, insert a call to deallocate_obs_pdafomi at the end of the routine `prepoststep_pdaf`.
    253 
    254 As an '''example''', in `tutorial/online_2D_serialmodel/` we have
    255 {{{
    256 SUBROUTINE deallocate_obs_pdafomi(step)
    257 
    258   USE PDAFomi, ONLY: PDAFomi_deallocate_obs
    259   USE obs_A_pdafomi, ONLY: obs_A => thisobs
    260   USE obs_B_pdafomi, ONLY: obs_B => thisobs
    261   USE obs_C_pdafomi, ONLY: obs_C => thisobs
    262 
    263   ... argument declarations omitted ...
    264 
    265   CALL PDAFomi_deallocate_obs(obs_A)
    266   CALL PDAFomi_deallocate_obs(obs_B)
    267   CALL PDAFomi_deallocate_obs(obs_C)
    268 }}}