Development page
Please only use the pages that are directly linked from the start page and within the Implementation Guide
Pages linked here are under development
New for PDAF V3.0 final
Version 3.0 - September 1, 2025
This is a major release and completes Version 3.0 based on the pre-release 3.0beta. This includes all changes of V3.0beta, of which we list only new features below.
The final release of PDAF V3.0 contains bug-fixes and also some additional features
PDAF V3.0 is not fully backward compatible with PDAF 2.3.1 and before, due to the modernization of the code. Thus, with this release, it is not possible to just compile and link with existing implementations like in previous releases. The required adaptions are, however, small. They are described on the website https://pdaf.awi.de.
Major additions
- Separating the initialization of parallelization variables from the initialization of PDAF variables. This allows to simplify the code structure and keep the parallelization variables inside init_parallel_pdaf. There are new routines 'PDAF3_init' and 'PDAF3_set_parallel'. Their use is optional (see https://pdaf.awi.de/trac/wiki/PDAF3_interface):
- 'PDAF3_set_parallel' is called in init_parallel_pdaf to provide the parallelization variables to PDAF.
- 'PDAF3_init' has a shortened interface compared to 'PDAF_init' as it does not include the variables concerning parallelization.
- When using exclusively a single MPI-process with the offline mode, it is now possible to use PDAF without calling 'init_parallel_pdaf' or 'PDAF3_set_parallel'. For localized filters one can use the OpenMP parallelization, while the user code does not need any operations of MPI.
- Add EnOI-mode, in which only the state estimate is integrated, but the ensemble perturbations are fixed, to EnSRF and EAKF (filtertype=13 with subtype=10 for EnSRF; subtype=11 for EAKF)
- Add support for IAU with the EnOI modes (ensemble optimal interpolation in which only the state estimate, but not the ensemble state are integrated; subtypes 10 and 11 available for some filters).
- Linked to the above there are the new routines 'PDAF_iau_set_state_pointer' for use in EnOI mode and 'PDAF_iau_set_ens_pointer' (alias for 'PDAF_iau_set_pointer) for use in the regular mode integrating the ensemble.
- Add external observation operator routine 'PDAFomi_obs_op_extern'. This observation operator allows to directly provide an observed model state from the ensemble. It can be used, e.g. if the model itself performs the proejection of the observation operator.
Corrections
- Revised the setting of 'dim_lag': In V3.0beta 'dim_lag' had to be set in the call to PDAF_init. Now using PDAF_set_iparam works correctly.
- Corrected PDAF_diag_reliability_budget
- Correction of template code for the analysis step to use subtype 10 and 11 for the EnOI mode
- Corrected SEIK subtype=11 (fixed covariance matrix). It performed identical to subtype=10 (non-dynamic ensemble updated at analysis step).
- Corrected subtype=11 of ESTKF/LESTKF/ETKF/LESTKF, which procuded an incorrect analysis ensemble in V3.0beta due to the revision for IAU
- Corrected EnKF and LEnKF: The filters stopped when one of the process sub-domain did not hold any observations
PDAF V3.0 includes the large set of changes from the pre-release PDAF V3.0beta. Here, we only list the major new features. The full overview of the new features of PDAF V3.0 compared to PDAF V2.3.1 can be found at https://pdaf.awi.de/trac/wiki/PDAF3_new_functionality
- Incremental Analysis Updates (IAU): The previous IAU of PDAF was recoded. Now there is a fully featured IAU implementation.
- Added ENSRF/EAKF: The ensemble square-root filter (ENSRF, Whitaker & Hamill, 2002) and ensemble adjustment filter with local linear regression (EAKF, Anderson, 2003) were added. These filters perform the analysis step through serial processing of individual observations.
- Added more diagnostic routines, e.g., for computing ensemble mean (
PDAF_diag_ensmean
), ensemble mean standard deviation (PDAF_diag_stddev), variance state vector (PDAF_diag_variance
), RMS difference between two vectors (PDAF_diag_rmsd
), higher order moments (PDAF_diag_compute_moments
), and reliability budget (PDAF_diag_reliability_budget
). - Added observation diagnostics module for OMI: This is a set of routines that give the user access to the observation information, including the observed ensemble and the observed ensemble mean. In addition, there are routines computing statistics for the difference between the observations and the observed ensemble mean.
- New routines to set parameters for PDAF: Before, the parameters were all set in the call to PDAF_init. Now, there are the new routines
PDAF_set_iparam
andPDAF_set_rparam
to set selected parameters, without the need to specify all parameters. These routines make the specification of parameters for PDAF more flexible and can also be used during a run to change parameter values. - New interface for offline coupled assimilation: With the new routines
PDAF_assim_offline_X
the offline mode is now clearly separated from the online coupling. (see tutorial or implementation guide) - New PDAF3 interface: The selection of possible calls to PDAF*_put_state and PDAF*_assimilate has grown over the years because new functionality, particularly PDAF-OMI and PDAFlocal, has required a new interfaces. We defined a new standard interface in which a single routine (
PDAF3_assimilate
) can execute all available ensemble filter methods for the case of a diagonal observation error covariance matrix. The routine leverages the latest features that were introduced in previous PDAF releases to allow for a minimum number of arguments. There is also the routinePDAF3_assim_offline
for the offline mode. - Change for flexible parallelization variant: It is now possible to use
PDAF3_assimilate
(or any other 'assimilate' routine) for the flexible parallelization, whilePDAF_put_state routines
had to be called before. Since PDAF_assimilate is called at each time step during the forecast phase this allows easy use of the IAU functionality. This change also reduces teh required code changes for the flexible parallelization variant. - New routine
PDAFomi_set_localize_covar
: This routine can be called in the OMI observation modules in init_dim_obs_OBSTYPE. It sets the information for localization in the LEnKF and ENSRF/EAKF methods and simplifies the code compared to using localize_covar_pdafomi in PDAF2. (Using localize_covar_pdafomi is still possible) - Calling LEnKF with the universal routine PDAF3_assimilate: In PDAF 2.3.1 and before, the LEnKF had its own interface due to the additional call-back routine localize_covar_pdafomi required by this filter. With the new routine
PDAFomi_set_localize_covar
, the additional routine is no longer required and the LEnKF can be used with the unversal interface routine. - Mandatory module
PDAF
. Because PDAF V3 is fully modularized, rhe modulePDAF
has to be use-included by all routines that call PDAF routines. The new modulePDAF
now also includes the routines from 'PDAFomi' and 'PDAFlocal'. Thus, one only needs to use-include 'PDAF' and no longer needs to distinguish the modules.
New for PDAF V3.0 beta
Using Incremental Analysis Updates !
Implementation of the Analysis step for the ENSRF/EAKF !
PDAFomi_set_localize_covar ! (recommended alternative to using localize_covar_pdafomi)
New diagnostics routines
PDAF-OMI Observation diagnostics !
only for backward compatibility: | PDAF3_assimilate_lenkf ! | PDAF3_put_state_lenkf ! | PDAF3_assim_offline_lenkf ! |
Method | online coupled | offline coupled (backward-compatibility) | offline coupled |
---|---|---|---|
LESTKF LETKF LSEIK | PDAF3_assimilate_local_nondiagR ! | PDAF3_put_state_local_nondiagR ! | PDAF3_assim_offline_local_nondiagR ! |
LNETF | PDAF3_assimilate_lnetf_nondiagR ! | PDAF3_put_state_lnetf_nondiagR ! | PDAF3_assim_offline_lnetf_nondiagR ! |
LKNETF | PDAF3_assimilate_lknetf_nondiagR ! | PDAF3_put_state_lknetf_nondiagR ! | PDAF3_assim_offline_lknetf_nondiagR ! |
ESTKF ETKF SEIK | PDAF3_assimilate_global_nondiagR ! | PDAF3_put_state_global_nondiagR ! | PDAF3_assim_offline_global_nondiagR ! |
NETF PF | PDAF3_assimilate_nonlin_nondiagR ! | PDAF3_put_state_nonlin_nondiagR ! | PDAF3_assim_offline_nonlin_nondiagR ! |
EnKF LEnKF | PDAF3_assimilate_enkf_nondiagR ! | PDAF3_put_state_enkf_nondiagR ! | PDAF3_assim_offline_enkf_nondiagR ! |
Method | online coupled | offline coupled (backward-compatibility | offline coupled |
---|---|---|---|
3D-Var (parameterized) | PDAF3_assimilate_3dvar ! | PDAF3_put_state_3dvar ! | PDAF3_assim_offline_3dvar ! |
Universal Routine (all 3D-Var methods) | PDAF3_assimilate_3dvar_all ! | PDAF3_put_state_3dvar_all ! | PDAF3_assim_offline_3dvar_all ! |
En3DVar with ESTKF or LESTKF | PDAF3_assimilate_en3dvar ! | PDAF3_put_state_en3dvar ! | PDAF3_assim_offline_en3dvar ! |
single routines | |||
En3DVar with ESTKF | PDAF3_assimilate_en3dvar_estkf ! | PDAF3_put_state_en3dvar_estkf ! | PDAF3_assim_offline_en3dvar_estkf ! |
Hyb3DVar with ESTKF | PDAF3_assimilate_hyb3dvar_estkf ! | PDAF3_put_state_hyb3dvar_estkf ! | PDAF3_assim_offline_hyb3dvar_estkf ! |
En3DVar with LESTKF | PDAF3_assimilate_en3dvar_lestkf ! | PDAF3_put_state_en3dvar_lestkf ! | PDAF3_assim_offline_en3dvar_lestkf ! |
Hyb3DVar with ESTKF | PDAF3_assimilate_hyb3dvar_lestkf ! | PDAF3_put_state_hyb3dvar_lestkf ! | PDAF3_assim_offline_hyb3dvar_lestkf ! |
Method | fully parallel & flexible parallel | flexible parallel (backward-compatibility) | offline coupled |
---|---|---|---|
3DVar | PDAF3_assimilate_3dvar_nondiagR ! | PDAF3_put_state_3dvar_nondiagR ! | PDAF3_assim_offline_3dvar_nondiagR ! |
En3DVar with LESKTF | PDAF3_assimilate_en3dvar_lestkf_nondiagR ! | PDAF3_put_state_en3dvar_lestkf_nondiagR ! | PDAF3_assim_offline_en3dvar_lestkf_nondiagR ! |
En3DVar with ESTKF | PDAF3_assimilate_en3dvar_estkf_nondiagR ! | PDAF3_put_state_en3dvar_estkf_nondiagR ! | PDAF3_assim_offline_en3dvar_estkf_nondiagR ! |
Hyb3DVar with LESTKF | PDAF3_assimilate_hyb3dvar_lestkf_nondiagR ! | PDAF3_put_state_hyb3dvar_lestkf_nondiagR ! | PDAF3_assim_offline_hyb3dvar_lestkf_nondiagR ! |
Hyb3DVar with ESTKF | PDAF3_assimilate_hyb3dvar_estkf_nondiagR ! | PDAF3_put_state_hyb3dvar_estkf_nondiagR ! | PDAF3_assim_offline_hyb3dvar_estkf_nondiagR ! |