Changes between Version 10 and Version 11 of PDAF_OMI_Overview
- Timestamp:
- Nov 18, 2020, 4:31:22 PM (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
PDAF_OMI_Overview
v10 v11 49 49 Since the actual opernations are done in the obs-modules obs_*_pdafomi, the remaining three call-back routines (init_dim_obs, obs_op, init_dim_obs_l) are reduced to pass-through routines. Thus, each of these routines contains only calls to one observation-specific routine from each obs-module. There is, in addition, one routine for deallocating the observation-related arrays which calls a generic PDAF-OMI routine for each observation type. As the call-back routines become very compact by this change, they are collected into the file callback_obs_pdafomi.F90. This is mainly for convenience, because all these routines are now ‘in one place’. This simplifies the addition of a new data type by adding a subroutine call to each of the routines in this file. (Note, that callback_obs_pdafomi.F90 does not define a Fortran module. This is because the call-back routines of PDAF are not contained in a module as this would require to compile the module together with the PDAF core so that the PDAF core would no longer be generic.) When adding a new observation type only a new subroutine call has to be added to each of the routines in callback_obs_pdafomi.F90. 50 50 51 Each obs-module contains threeroutines:51 Each obs-module contains four routines: 52 52 1. `init_dim_obs` initializes all variables holding the information about one observation type. The information about the observation type is stored in a data structure (Fortran type). 53 53 1. `obs_op` applies the observation operator to a state vector. For the latter routine one can select an observation operator from the list of operators provided by OMI, or one can to implement a new operator. 54 1. `init_dim_obs_l` calls a PDAF-OMI routine to initialize the observation information corresponding to a local analysis domain. Here for can set a different localization radius for each observation type. 54 1. `init_dim_obs_l` calls a PDAF-OMI routine to initialize the observation information corresponding to a local analysis domain. Here for can set a different localization radius for each observation type. 55 1. `localize_covar` calls a PDAF-OMI routine to apply covariance localization. 55 56 56 For each observation type, PDAF-OMI uses a data structure that was initialized in the obs-module. The set of routines in `callback_obs_pdafomi.F90` provide the observation handling for all filters and smoothers provided by PDAF. Thus once, `init_dim_obs` and `obs_op` are implemented for a particular observation and the subroutine calls in `callback_obs_pdafomi.F90` for this observation type are inserted, one can use each of the provided assimilation methods. (An exception is the local EnKF, which needs one additional routine to localize the covariance matrix. The actual operation is, however, also performed by a routine provided by PDAF-OMI).57 For each observation type, PDAF-OMI uses a data structure that was initialized in the obs-module. The set of routines in `callback_obs_pdafomi.F90` provide the observation handling for all filters and smoothers provided by PDAF. Thus once, the routines are implemented for a particular observation and the subroutine calls in `callback_obs_pdafomi.F90` for this observation type are inserted, one can use each of the provided assimilation methods. Here `init_dim_obs_l` is only required if one plans to use domain-localized filters like LESTKF, LETKF or LNETF. Likewise, `localize_covar` is only required if on likes to use the loalized EnKF (LEnKF). 57 58 58 59 == Further documentation of PDAF-OMI == … … 61 62 62 63 - [wiki:OMI_Callback_obs_pdafomi The file callback_obs_pdafomi.F90] 64 - OMI routines to call the analysis step: 65 - [wiki:ImplementAnalysislLocal Implementation for Local Filters] 66 - [wiki:ImplementAnalysislGlocal Implementation for Global Filters] 67 - [wiki:ImplementAnalysislenkfOmi Implementation for localized EnKF] 63 68 64 69 == Implementation examples ==