Changes between Version 287 and Version 288 of LnDevel


Ignore:
Timestamp:
May 16, 2025, 8:55:39 PM (41 hours ago)
Author:
lnerger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LnDevel

    v287 v288  
    157157
    158158Important:
    159 1. PDAF V3.0 is not fully backward compatible, due to changes in the code. Thus, with this release it is not possible to just compile and link with existing implementations. The required adaptions are not large. (Please see https://pdaf.awi.de/trac/wiki/PortingToPDAF3 for a description of how to adapt your existing code for PDAF V3.0). Below the code changes affecting backward-compatibility are also described.
     1591. PDAF V3.0 is not fully backward compatible, due to changes in the code. Thus, with this release, it is not possible to just compile and link with existing implementations. The required adaptions are not large. (Please see https://pdaf.awi.de/trac/wiki/PortingToPDAF3 for a description of how to adapt your existing code for PDAF V3.0). Below the code changes affecting backward-compatibility are also described.
    160160
    1611612. We have marked this release as a beta-release. While we have tested this release with different applications, we cannot exclude that there might be some hidden issues due to the extensive changes in the code. 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 hopefully be released in 2-3 months. During this time, we will also finalize the documentation to reflect all changes.
     
    164164* 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'.
    165165* Change for offline mode: It is no longer possible to specify the offline mode as 'subtype=5'. The offline mode can now only be activated with a call to 'PDAF_set_offline_mode'.
    166 * The subtypes have been renumbered: subtypes 0 and 1 are unchanged, the other dynamic subtypes are changed as 4=>2, 6=>3, 7=>4; the variant with fixed ensmeble are changed as 2=>10, 3=>11.
    167 * Changes in the index value a some parameters: The index of some of the parameters set in PDAF_init has changed for better overall consistency. (See .... for an overview of the parameters)
     166* The subtypes have been renumbered: 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.
     167* 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)
    168168* The SEEK filter (filtertype=0) was finally removed after it was marked deprecated for a longer period.
    169 * Removed 'src/Makefile'. Now only the new Makefile in the main directory exists. However, if one has a workflow basing on src/Makefile and can copy the Makefile and adapt it according to the description within the file.
     169* 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.
    170170* The 'simplified interface' (routine names ending with `_si`) has been removed.
    171 * For information on how to adapt a program for PDAF V3.0 see https://pdaf.awi.de/trac/wiki/PortingToPDAF3
     171* For information on how to adapt a program for PDAF V3.0, see https://pdaf.awi.de/trac/wiki/PortingToPDAF3
    172172
    173173Major changes and additions (see also https://pdaf.awi.de/trac/wiki/PDAF3_new_functionality):
    174174* Incremental Analysis Updates (IAU): The previous IAU of PDAF was recoded. Now there is a fully featured IAU implementation.
    175 * 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 with a serial processing of single observations.
    176 * 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) and higher order moments (PDAF_diag_compute_moments).
    177 * 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 beetween the observations and the observed ensemble mean.
    178 * New routines to set parameters for PDAF: Before the parameters were all set in the call to PDAF_init. Now there are 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.
     175* 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.
     176* 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), and higher order moments (PDAF_diag_compute_moments).
     177* 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.
     178* 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.
    179179* 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.
    180 * Revision of the initialization of observations: Now the observations are initialized before the actual analysis step is computed. Also the observation operator is called before the actual analysis step. This chane 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 displayed at a different place from before.
    181 * New PDAF3 interface: The selection of possible calls to PDAF*_put_state and PDAF*_assimilate has grown over the years since new functionality, in particular PDAF-OMI and PDAFlocal, required a new interfaces. We now defined a new standard interface in which a single routine (PDAF3_assimilate) can execute all available 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_put_state, which is now mainly recommended when the offline mode is used.
     180* Revision of the initialization of observations: 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.
     181* 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 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_put_state, which is now mainly recommended when the offline mode is used.
    182182* 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.
    183 * Change for flexible parallelization variant: It is now possible to use PDAF_assimilate 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 to easy use of the IAU functionality.
     183* Change for flexible parallelization variant: It is now possible to use PDAF_assimilate 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.
    184184* New routine PDAFomi_set_localize_covar: This routine is called in the OMI observation module in init_dim_obs_pdafomi. It sets the information for localization in the LEnKF and ENSRF/EAKF methods. (optional for LEnKF)
    185 * Calling LEnKF with the universal routine PDAF3_assimilate: In PDAF 2.3 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 that is called in the OMI observation module in init_dim_obs_pdafomi the additional user-supplied subroutine localize_covar_pdafomi is no longer required which lowers the amount of implementation work for the user.
     185* Calling LEnKF with the universal routine PDAF3_assimilate: In PDAF 2.3 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 that is called in the OMI observation module in init_dim_obs_pdafomi, the additional user-supplied subroutine localize_covar_pdafomi is no longer required, lowering the implementation work for the user.
    186186* New routine `PDAF_set_seedset`: This routine can be used to seed the random number seed for PDAF's random number generating routine.
    187 * 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.
     187* 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.
    188188* Added routine 'PDAF_print_DA_types': This routine writes a list of the available types of DA methods and named parameters PDAF_DA_X.
    189 * Added Fortran function PDAF_localfilter as alternative to subroutine PDAF_get_localfilter to make code more compact
    190 * Added subroutine PDAF_get_local_type and Fortran function PDAF_local_type. These return information which of the different localization variants a filter uses (no localization, local analysis, covariance localization, covariance localization with serial observation processing)
    191 * The screen output of the configration of the DA method was revised and provides now a complete configuration overview
    192 * The new module 'PDAF' now also includes the routines from 'PDAFomi' and 'PDAFlocal'. Thus, one only needs to use-include 'PDAF' and does no longer need to distinguish the modules.
     189* Added Fortran function PDAF_localfilter as an alternative to subroutine PDAF_get_localfilter to make the code more compact
     190* Added subroutine PDAF_get_local_type and Fortran function PDAF_local_type. These return information which of the different localization variants is used by the active assimilation method (no localization, local analysis, covariance localization, covariance localization with serial observation processing)
     191* The screen output for the configration overview of the DA method was revised and provides now a complete overview
     192* 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.
    193193* New routine 'PDAF_init_forecast'. This is an alias to 'PDAF_get_state'. The new naming should indicate its purpose better.
    194194
     
    196196Other changes:
    197197* The tutoral input files have been regenerated using Python scripts instead of the previous Matlab scripts. This changed their numbers.
    198 * Changed statistics for locally omitted observations: Now these are only counted for analysis domains with observations.
     198* Changed statistics for locally omitted observations: Now, these are only counted for analysis domains with observations.
    199199* Added information output on allocated memory in PDAF-OMI
    200200* Revised the internal structure of the code for DA method using modularization
    201 * Revised timers inside DA methods to account for changed placement of observation-related routines.
     201* Revised timers inside the DA methods to account for the changed placement of observation-related routines.
    202202* 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
    203203* Revision of PDAF file headers: It is now possible to use 'Doxygen' to generate a documentation and structure overview of PDAF.
     
    207207* Corrected convergence check for the CG+ solver in the 3D-Var methods in case of parallelized control vector.
    208208* 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.
    209 * 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 also a possible race condition when using OpenMP was fixed.
    210 * Corrected call to U_obs_op_adj. Here inside PDAF a rank-1 array was provided as argument, while it needed to be a rank-2 array with only one column.
     209* 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.
     210* 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.
    211211
    212212