There is a newer version of the record available.

Published February 21, 2023 | Version PDAF_V2.1
Software Open


  • 1. Alfred-Wegener-Institut Helmholtz-Zentrum für Polar und Meeresforschung


Release 2.1 of the Parallel Data Assimilation Framework - PDAF

Note on change influencing the compatibility with previous versions of PDAF

  • We moved the memory output option in PDAF_print_info from value 2 to 10 to avoid mixing timing and memory outputs

Major additions:

  • Added the hybrid Kalman-Nonlinear Ensemble Transform Filter (LKNETF), see L. Nerger (2022) Data assimilation for nonlinear systems with a hybrid nonlinear-Kalman ensemble transform filter. Q. J. Meteorol. Soc., 148, 620-640 doi:10.1002/qj.4221
  • Added debug outputs for PDAF. Using the routine PDAF_set_debug_flag one can activate debug output printed by the PDAF code routines. This should help to find issues in the user-supplied call-back routines when implementing PDAF with some model or extending an implementation. The debug option is described at


  • Added output option for globally allocated memory. This can be printed by calling PDAF_print_info(11)
  • Modes output option for process-local allocated memory from PDAF_print_info(2) to PDAF_print_info(10)
  • Added option for NETF and LNETF to add random noise perturbations to the analysis ensemble analogous to the PF
  • Extend available configuration parameters for 3D-Var methods. Now parameters controlling the solver methods can be chosen
  • Change of behavior for NETF/LNETF/PF in the case that all weights are zero. Now, the weights are reset to 1/ensemble size and a warning is shown (before PDAF exited with an error message)
  • Add tutorial models without PDAF to allow users perform the implementation themselves following the tutorial description.

Code revisions:

  • Renamed the localization variables in example codes from local_range to cradius (c='cut-off') and srange to sradius (s='support')
  • Changed time stepping code of Lorenz model cases to avoid creation of temporary array by the compiler Bug corrections (the bugs concern rather unusual use cases, so most users wil not encounter these)
  • Correction of NETF and PF for the case when running with parallelization: For each process domain, only the domain-local observations were assimilated
  • PDAF-OMI related:
    • Correction in Lorenz96 with OMI: In obs_gp_pdafomi.F90 an incorrect observation dimension was used in call to PDAFomi_gather_obs if incomplete observations are used.
    • Correction using global filters with PDAF-OMI and running with parallelization: The program could get stuck if there were observations available but a process domain exists without observations (dim_obs_p=0).
    • Correction of likelihood computation in the global NETF and the PF for multiple observations types when using OMI. Here, the distinction between the total number of observations and the number of observations per observation type was missing
    • Correction of EnKF/LEnKF with OMI running with parallelization: For the case that for a process domain dim_obs_p=0, but globally dim_obs_g>0 the array thisobs%ivar_obs_f was allocated with incorrect size



Files (7.7 MB)

Name Size Download all
7.7 MB Preview Download

Additional details

Related works