Skip to content

SUNDIALS v7.2.0

Compare
Choose a tag to compare
@gardner48 gardner48 released this 11 Dec 19:33
· 8 commits to main since this release
0eff396

Major Features

Added a time-stepping module to ARKODE for low storage Runge--Kutta methods, LSRKStep. This currently supports five explicit low-storage methods: the second-order Runge--Kutta--Chebyshev and Runge--Kutta--Legendre methods, and the second- through fourth-order optimal strong stability preserving Runge--Kutta methods. All methods include embeddings for temporal adaptivity.

Added an operator splitting module, SplittingStep, and forcing method module, ForcingStep, to ARKODE. These modules support a broad range of operator-split time integration methods for multiphysics applications.

Added support for multirate time step adaptivity controllers, based on the recently introduced SUNAdaptController base class, to ARKODE's MRIStep module. As a part of this, we added embeddings for existing MRI-GARK methods, as well as support for embedded MERK and IMEX-MRI-SR methods. Added new default MRI methods for temporally adaptive versus fixed-step runs.

New Features and Enhancements

Logging

The information level logging output in ARKODE, CVODE(S), and IDA(S) has been updated to be more uniform across the packages and a new tools directory has been added with a Python module, suntools, containing utilities for parsing logging output. The Python utilities for parsing CSV output have been relocated from the scripts directory to the Python module.

SUNStepper

Added the SUNStepper base class to represent a generic solution procedure for IVPs. This is used by the SplittingStep and ForcingStep modules of ARKODE. A SUNStepper can be created from an ARKODE memory block with the new function ARKodeCreateSUNStepper. To enable interoperability with MRIStepInnerStepper, the function MRIStepInnerStepper_CreateFromSUNStepper was added.

ARKODE

Added functionality to ARKODE to accumulate a temporal error estimate over multiple time steps. See the routines ARKodeSetAccumulatedErrorType, ARKodeResetAccumulatedError, and ARKodeGetAccumulatedError for details.

Added the ARKodeSetStepDirection and ARKodeGetStepDirection functions to change and query the direction of integration.

Added the function MRIStepGetNumInnerStepperFails to retrieve the number of recoverable failures reported by the MRIStepInnerStepper.

Added a utility routine to wrap any valid ARKODE integrator for use as an MRIStep inner stepper object, ARKodeCreateMRIStepInnerStepper.

The following DIRK schemes now have coefficients accurate to quad precision:

  • ARKODE_BILLINGTON_3_3_2
  • ARKODE_KVAERNO_4_2_3
  • ARKODE_CASH_5_2_4
  • ARKODE_CASH_5_3_4
  • ARKODE_KVAERNO_5_3_4
  • ARKODE_KVAERNO_7_4_5

CMake

The default value of CMAKE_CUDA_ARCHITECTURES is no longer set to 70 and is now determined automatically by CMake. The previous default was only valid for Volta GPUs while the automatically selected value will vary across compilers and compiler versions. As such, users are encouraged to override this value with the architecture for their system.

The build system has been updated to utilize the CMake LAPACK imported target which should ease building SUNDIALS with LAPACK libraries that require setting specific linker flags e.g., MKL.

Third Party Libraries

The Trilinos Teptra NVector interface has been updated to utilize CMake imported targets added in Trilinos 14 to improve support for different Kokkos backends with Trilinos. As such, Trilinos 14 or newer is required and the Trilinos_INTERFACE_* CMake options have been removed.

Example programs using hypre have been updated to support v2.20 and newer.

Bug Fixes

CMake

Fixed a CMake bug regarding usage of missing "print_warning" macro that was only triggered when the deprecated CUDA_ARCH option was used.

Fixed a CMake configuration issue related to aliasing an ALIAS target when using ENABLE_KLU=ON in combination with a static-only build of SuiteSparse.

Fixed a CMake issue which caused third-party CMake variables to be unset. Users may see more options in the CMake GUI now as a result of the fix. See details in GitHub Issue #538.

NVector

Fixed a build failure with the SYCL NVector when using Intel oneAPI 2025.0 compilers. See GitHub Issue #596.

Fixed compilation errors when building the Trilinos Teptra NVector with CUDA support.

SUNMatrix

Fixed a bug in the sparse matrix implementation of SUNMatScaleAddI which caused out of bounds writes unless indexvals were in ascending order for each row/column.

SUNLinearSolver

Fixed a bug in the SPTFQMR linear solver where recoverable preconditioner errors were reported as unrecoverable.

ARKODE

Fixed ARKodeResize not using the default hscale when an argument of 0 was provided.

Fixed a memory leak that could occur if ARKodeSetDefaults is called repeatedly.

Fixed the loading of ARKStep's default first order explicit method.

Fixed loading the default IMEX-MRI method if ARKodeSetOrder is used to specify a third or fourth order method. Previously, the default second order method was loaded in both cases.

Fixed potential memory leaks and out of bounds array accesses that could occur in the ARKODE Lagrange interpolation module when changing the method order or polynomial degree after re-initializing an integrator.

Fixed a bug in ARKODE when enabling rootfinding with fixed step sizes and the initial value of the rootfinding function is zero. In this case, uninitialized right-hand side data was used to compute a state value near the initial condition to determine if any rootfinding functions are initially active.

Fixed a bug in MRIStep where the data supplied to the Hermite interpolation module did not include contributions from the fast right-hand side function. With this fix, users will see one additional fast right-hand side function evaluation per slow step with the Hermite interpolation option.

Fixed a bug in SPRKStep when using compensated summations where the error vector was not initialized to zero.

CVODE(S)

Fixed a bug where CVodeSetProjFailEta would ignore the eta parameter.

Fortran Interfaces

Fixed a bug in the 32-bit sunindextype Fortran interfaces to N_VGetSubvectorArrayPointer_ManyVector, N_VGetSubvectorArrayPointer_MPIManyVector, SUNBandMatrix_Column and SUNDenseMatrix_Column where 64-bit sunindextype interface functions were used.

Deprecation Notices

Deprecated the ARKStep-specific utility routine for wrapping an ARKStep instance as an MRIStep inner stepper object, ARKStepCreateMRIStepInnerStepper. Use ARKodeCreateMRIStepInnerStepper instead.

The ARKODE stepper specific functions to retrieve the number of right-hand side function evaluations have been deprecated. Use ARKodeGetNumRhsEvals instead.