Changes between Version 319 and Version 320 of LnDevel


Ignore:
Timestamp:
Sep 1, 2025, 12:06:16 PM (15 hours ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LnDevel

    v319 v320  
    2020[wiki:PDAF_iau_set_ens_pointer]
    2121
    22 [wiki:OnlineImplementationGuide_PDAF3] - update figure
    2322
    24 [wiki:OfflineImplementationGuide_PDAF3] - update figure
     23== Version 3.0 - September 1, 2025 ==
    2524
    26 [wiki:PDAF3_new_functionality] - update new added features in V3.0final
    27 
    28 [wiki:PDAF3_interface] - add PDAF3_set_parallel and PDAF3_init
    29 
    30 [wiki:OMI_observation_operators_PDAF3] - add PDADFomi_obs_op_extern (no lin and adj)
    31 
    32 [wiki:ImplementationConceptOnline] - add note on PDAF3_set_parallel
    33 
    34 [wiki:ImplementationConceptOffline] - add note on PDAF3_set_parallel
    35 
    36 [wiki:OfflineAdaptParallelization_PDAF3] - note: call to init_parallel_pdaf not required for serial program
    37 
    38 [wiki:OfflineInitPdaf_PDAF3] - update for PDAF3_init
    39 
    40 [wiki:OnlineInitPdaf_PDAF3] - update for PDAF3_init
    41 
    42 
    43 
    44 
    45 == Version 3.0 - August XX, 2025 ==
    46 
    47 This is a major release and completes Version 3.0 based on the pre-release 3.0beta. As this includes the changes of V3.0beta, we repeat here the full changes after pointing to the changes added in the final release of V3.0.
     25This 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.
    4826
    4927The final release of PDAF V3.0 contains bug-fixes and also some additional features
     28
     29PDAF 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.
    5030
    5131Major additions
     
    6848
    6949
    70 PDAF V3.0 includes the large set of changes from the pre-release PDAF V3.0beta:
     50PDAF 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
    7151
    72 The whole PDAF code was revised and modernized. Further, a new universal calling interface for the analysis step  and other new functionality was added.
    73 
    74 Important:
    75 1. We have marked this release as a beta-release mainly because of the large amount of changes in the code. While we have tested this release carefully with different applications, we cannot exclude that there are issues that we didn't find. We like to motivate all users to test PDAF V3.0 and to let us know possible issues (using the Issues-function in Github or by email to pdaf\@awi.de). This will help us to fix such issues so that the final release for PDAF V3.0 can be done in 2-3 months. During this time, we will also finalize the documentation to reflect all changes.
    76 
    77 2. PDAF V3.0 is not fully backward compatible, 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. Below the code changes affecting backward-compatibility are also described.
    78 
    79 3. Information for using PDAF3 and about new features can be found at:
    80 * Porting to PDAF3: https://pdaf.awi.de/trac/wiki/PortingToPDAF3
    81 * New features: https://pdaf.awi.de/trac/wiki/PDAF3_new_functionality
    82 
    83 Major changes with effect on backward-compatibility
    84 * New general module 'PDAF' replacing the optional module 'PDAF_interfaces_module'. In Fortran code, it is now required to include this module with 'USE PDAF'.
    85 * Change for offline mode: It is no longer possible to specify the offline mode as 'subtype=5'. We have introduced a new interface 'PDAF_assim_offline' for the offline mode, which simplified the implementation.
    86 * Renumbered subtypes: subtypes 0 and 1 are unchanged, the other dynamic subtypes are changed as 4=>2, 6=>3, 7=>4; the variant with fixed ensemble are changed as 2=>10, 3=>11.
    87 * Changes in the index value of some parameters: The index of some of the parameters set in PDAF_init has been changed for better overall consistency. (See https://pdaf.awi.de/trac/wiki/AvailableOptionsforInitPDAFinPDAF3 for an overview of the parameters)
    88 * The SEEK filter (filtertype=0) was finally removed after it was marked deprecated for a longer period.
    89 * Removed 'src/Makefile'. Now, only the new Makefile in the main directory exists. However, if one has a workflow based on src/Makefile one can copy the Makefile and adapt it according to the description within the file.
    90 * The 'simplified interface' (routine names ending with `_si`) has been removed.
    91 * For information on how to adapt a program for PDAF V3.0, see https://pdaf.awi.de/trac/wiki/PortingToPDAF3
    92 
    93 Major changes and additions (see also https://pdaf.awi.de/trac/wiki/PDAF3_new_functionality):
    9452* Incremental Analysis Updates (IAU): The previous IAU of PDAF was recoded. Now there is a fully featured IAU implementation.
    9553* 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.
    96 * 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).
     54* 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`).
    9755* 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.
    98 * 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 and PDAF_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.
     56* 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` and `PDAF_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.
    9957* 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)
    100 * Simplification for initializing the ensemble forecasting using the new routine `PDAF_init_forecast` as simpler alternative to `PDAF_get_state`.
    101 * Revision for initializing of observations inside PDAF: Observations are now initialized before the actual analysis step is computed. Also, the observation operator is called before the actual analysis step. This change allows for the option to initialize observations before `prepoststep_pdaf` is called for the forecast ensemble. Related to this, the screen output for the observations was revised and is now displayed in a different location.
    10258* 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 routine `PDAF3_assim_offline` for the offline mode.
    103 * Change for flexible parallelization variant: It is now possible to use PDAF3_assimilate (or any other 'assimilate' routine) for the flexible parallelization, while PDAF_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.
    104 * New routine `PDAF_get_fcst_info`: This routine allows to retrieve the return values of PDAF_get_state (nsteps, time, doexit) for the case that PDAF_assimilate routines, which do not return these values, are used. This is used in the revised flexible parallelization variant.
     59* Change for flexible parallelization variant: It is now possible to use `PDAF3_assimilate` (or any other 'assimilate' routine) for the flexible parallelization, while `PDAF_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.
    10560* 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)
    10661* 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.
    107 * New routine `PDAF_set_seedset`: This routine can be used to seed the random number seed for PDAF's random number generating routine.
    108 * Introduced named variables for choosing the filter type: The filter type can now also be specified by a named parameter of the form PDAF_DA_X, where 'X' is the DA method, thus, e.g., 'PDAF_DA_ESTKF'. With this, one does not need to look up the number of the filter type.
    109 * Added routine `PDAF_print_DA_types`: This routine writes a list of the available types of DA methods and named parameters PDAF_DA_X.
    110 * Added Fortran function `PDAF_localfilter` as an alternative to subroutine `PDAF_get_localfilter` to make the code more compact
    111 * Added Fortran function `PDAF_local_type` and subroutine `PDAF_get_local_type`. These return information which of the different localization variants is used by a DA method (no localization, local analysis, covariance localization, covariance localization with serial observation processing)
    112 * The screen output for the configuration overview of the DA method was revised and provides now a complete overview
    113 * The new module `PDAF` 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.
     62* Mandatory module `PDAF`. Because PDAF V3 is fully modularized, rhe module `PDAF` has to be use-included by all routines that call PDAF routines. The new module `PDAF` 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.
    11463
    115 
    116 Other changes:
    117 * The tutorial input files have been regenerated using Python scripts instead of the previous Matlab scripts. This changed their values.
    118 * Changed statistics for locally omitted observations: Now, these are only counted for analysis domains with observations.
    119 * Added information output on allocated memory in PDAF-OMI
    120 * Revised timers inside the DA methods to account for the changed placement of observation-related routines.
    121 * The internal code structure of assimilation algorithms was revised and modularized. This yields a better approach to add further assimilation methods. We also added templates for implementing global or local ensemble filters in `templates/analysis/`. Information on how to add an assimilation algorithm to PDAF can be found at https://pdaf.awi.de/trac/wiki/AddFilterAlgorithm
    122 * Revision of PDAF file headers: It is now possible to use 'Doxygen' to generate a documentation and structure overview of PDAF.
    123 
    124 Bug corrections:
    125 * Corrected a parallel race condition in the LKNETF NHK variant (subtype=0) in case of OpenMP parallelization
    126 * Corrected convergence check for the CG+ solver in the 3D-Var methods in case of parallelized control vector.
    127 * Corrected computation of likelihood for the case that dim_obs_l=0 for some observation type, but overall dim_obs_l>0. This could lead to a segmentation fault in the LKNETF.
    128 * Correction of type_forget=2: For the case that the adaptive forgetting factor would compute a negative value, the forgetting factor of the previous domain was used. Now, the prescribed default value is used. Here, a possible race condition when using OpenMP was also fixed.
    129 * Corrected call to U_obs_op_adj. Inside PDAF, a rank-1 array was provided as argument, while it needed to be a rank-2 array with only one column.
    13064
    13165