Skip to content

Releases: LLNL/sundials

SUNDIALS v7.4.0

23 Jun 17:14
c3ff466
Compare
Choose a tag to compare

New Features and Enhancements

ARKodeSetCFLFraction now allows cfl_frac to be greater than or equal to one.

Added an option to enable compensated summation of the time accumulator for all of ARKODE. This was previously only an option for the SPRKStep module. The new function to call to enable this is ARKodeSetUseCompensatedSums.

Bug Fixes

Fixed segfaults in CVodeAdjInit and IDAAdjInit when called after adjoint memory has been freed.

Fixed a CMake bug that would cause the Caliper compile test to fail at configure time.

Fixed a bug in the CVODE/CVODES CVodeSetEtaFixedStepBounds function which disallowed setting eta_min_fx or eta_max_fx to 1.

SUNAdjointStepper_PrintAllStats was reporting the wrong quantity for the number of "recompute passes" and has been fixed.

Deprecation Notices

The SPRKStepSetUseCompensatedSums function has been deprecated. Use the ARKodeSetUseCompensatedSums function instead.

SUNDIALS v7.3.0

07 Apr 17:32
v7.3.0
e941546
Compare
Choose a tag to compare

Major Features

A new discrete adjoint capability for explicit Runge-Kutta methods has been added to the ARKODE ERKStep and ARKStep stepper modules. This is based on a new set of shared classes, SUNAdjointStepper and SUNAdjointCheckpointScheme. A new example demonstrating this capability can be found in examples/arkode/C_serial/ark_lotka_volterra_ASA.c.

New Features and Enhancements

ARKODE

The following changes have been made to the default ERK, DIRK, and ARK methods in ARKODE to utilize more efficient methods:

Type Old Default New Default
2nd Order Explicit ARKODE_HEUN_EULER_2_1_2 ARKODE_RALSTON_3_1_2
4th Order Explicit ARKODE_ZONNEVELD_5_3_4 ARKODE_SOFRONIOU_SPALETTA_5_3_4
5th Order Explicit ARKODE_CASH_KARP_6_4_5 ARKODE_TSITOURAS_7_4_5
6th Order Explicit ARKODE_VERNER_8_5_6 ARKODE_VERNER_9_5_6
8th Order Explicit ARKODE_FEHLBERG_13_7_8 ARKODE_VERNER_13_7_8
2nd Order Implicit ARKODE_SDIRK_2_1_2 ARKODE_ARK2_DIRK_3_1_2
3rd Order Implicit ARKODE_ARK324L2SA_DIRK_4_2_3 ARKODE_ESDIRK325L2SA_5_2_3
4th Order Implicit ARKODE_SDIRK_5_3_4 ARKODE_ESDIRK436L2SA_6_3_4
5th Order Implicit ARKODE_ARK548L2SA_DIRK_8_4_5 ARKODE_ESDIRK547L2SA2_7_4_5
4th Order ARK ARKODE_ARK436L2SA_ERK_6_3_4 and ARKODE_ARK436L2SA_DIRK_6_3_4 ARKODE_ARK437L2SA_ERK_7_3_4 and ARKODE_ARK437L2SA_DIRK_7_3_4
5th Order ARK ARKODE_ARK548L2SA_ERK_8_4_5 and ARKODE_ARK548L2SA_DIRK_8_4_5 ARKODE_ARK548L2SAb_ERK_8_4_5 and ARKODE_ARK548L2SAb_DIRK_8_4_5

The old default methods can be loaded using the functions ERKStepSetTableName or ERKStepSetTableNum with ERKStep and ARKStepSetTableName or ARKStepSetTableNum with ARKStep and passing the desired method name string or constant, respectively. For example, the following call can be used to load the old default fourth order method with ERKStep:

/* Load the old 4th order ERK method using the table name */
ierr = ERKStepSetTableName(arkode_mem, "ARKODE_ZONNEVELD_5_3_4");

Similarly with ARKStep, the following calls can be used for ERK, DIRK, or ARK
methods, respectively:

/* Load the old 4th order ERK method by name */
ierr = ARKStepSetTableName(arkode_mem, "ARKODE_DIRK_NONE", "ARKODE_ZONNEVELD_5_3_4");

/* Load the old 4th order DIRK method by name */
ierr = ARKStepSetTableName(arkode_mem, "ARKODE_SDIRK_5_3_4", "ARKODE_ERK_NONE");

/* Load the old 4th order ARK method by name */
ierr = ARKStepSetTableName(arkode_mem, "ARKODE_ARK436L2SA_DIRK_6_3_4", "ARKODE_ARK436L2SA_ERK_6_3_4");

Additionally, the following changes have been made to the default time step adaptivity parameters in ARKODE:

Parameter Old Default New Default
Controller PID (PI for ERKStep) I
Safety Factor 0.96 0.9
Bias 1.5 (1.2 for ERKStep) 1.0
Fixed Step Bounds [1.0, 1.5] [1.0, 1.0]
Adaptivity Adjustment -1 0

The following calls can be used to restore the old defaults for ERKStep:

SUNAdaptController controller = SUNAdaptController_Soderlind(ctx);
SUNAdaptController_SetParams_PI(controller, 0.8, -0.31);
ARKodeSetAdaptController(arkode_mem, controller);
SUNAdaptController_SetErrorBias(controller, 1.2);
ARKodeSetSafetyFactor(arkode_mem, 0.96);
ARKodeSetFixedStepBounds(arkode_mem, 1, 1.5);
ARKodeSetAdaptivityAdjustment(arkode_mem, -1);

The following calls can be used to restore the old defaults for other ARKODE integrators:

SUNAdaptController controller = SUNAdaptController_PID(ctx);
ARKodeSetAdaptController(arkode_mem, controller);
SUNAdaptController_SetErrorBias(controller, 1.5);
ARKodeSetSafetyFactor(arkode_mem, 0.96);
ARKodeSetFixedStepBounds(arkode_mem, 1, 1.5);
ARKodeSetAdaptivityAdjustment(arkode_mem, -1);

In both cases above, destroy the controller at the end of the run with SUNAdaptController_Destroy(controller);.

The Soderlind time step adaptivity controller now starts with an I controller until there is sufficient history of past time steps and errors.

Added ARKodeSetAdaptControllerByName to set a time step adaptivity controller with a string. There are also four new controllers: SUNAdaptController_H0211, SUNAdaptController_H0321, SUNAdaptController_H211, and SUNAdaptController_H312.

Added the ARKODE_RALSTON_3_1_2 and ARKODE_TSITOURAS_7_4_5 explicit Runge-Kutta Butcher tables.

Improved the precision of the coefficients for ARKODE_ARK324L2SA_ERK_4_2_3, ARKODE_VERNER_9_5_6, ARKODE_VERNER_10_6_7, ARKODE_VERNER_13_7_8, ARKODE_ARK324L2SA_DIRK_4_2_3, and ARKODE_ESDIRK324L2SA_4_2_3.

CVODE / CVODES

Added support for resizing CVODE and CVODES when solving initial value problems where the number of equations and unknowns changes over time. Resizing requires a user supplied history of solution and right-hand side values at the new problem size, see CVodeResizeHistory for more information.

KINSOL

Added support in KINSOL for setting user-supplied functions to compute the damping factor and, when using Anderson acceleration, the depth in fixed-point or Picard iterations. See KINSetDampingFn and KINSetDepthFn, respectively, for more information.

SUNDIALS Types

A new type, suncountertype, was added for the integer type used for counter variables. It is currently an alias for long int.

Bug Fixes

ARKODE

Fixed bug in ARKodeResize which caused it return an error for MRI methods.

Removed error floors from the SUNAdaptController implementations which could unnecessarily limit the time size growth, particularly after the first step.

Fixed bug in ARKodeSetFixedStep where it could return ARK_SUCCESS despite an error occurring.

Fixed bug in the ARKODE SPRKStep SPRKStepReInit function and ARKodeReset function with SPRKStep that could cause a segmentation fault when compensated summation is not used.

KINSOL

Fixed a bug in KINSOL where an incorrect damping parameter is applied on the initial iteration with Anderson acceleration unless KINSetDamping and KINSetDampingAA are both called with the same value when enabling damping.

Fixed a bug in KINSOL where errors that occurred when computing Anderson acceleration were not captured.

Added missing return values to KINGetReturnFlagName.

CMake

Fixed the behavior of SUNDIALS_ENABLE_ERROR_CHECKS so additional runtime error checks are disabled by default with all release build types. Previously, MinSizeRel builds enabled additional error checking by default.

Deprecation Notices

All work space functions, e.g., CVodeGetWorkSpace and ARKodeGetLinWorkSpace, have been deprecated and will be removed in version 8.0.0.

SUNDIALS v7.2.1

20 Dec 19:08
5c53be8
Compare
Choose a tag to compare

New Features and Enhancements

Unit tests were separated from examples. To that end, the following directories were moved out of the examples/ directory to the test/unit_tests directory: nvector, sunmatrix, sunlinsol, and sunnonlinsol.

Bug Fixes

Fixed a bug in ARKStep where an extra right-hand side evaluation would occur each time step when enabling the ARKodeSetAutonomous option and using an IMEX method where the DIRK table has an implicit first stage and is not stiffly accurate.

SUNDIALS v7.2.0

11 Dec 19:33
0eff396
Compare
Choose a tag to compare

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.

SUNDIALS v7.1.1

26 Jun 19:28
c28eaa3
Compare
Choose a tag to compare

Fixed a bug in v7.1.0 with the SYCL N_Vector N_VSpace function.

SUNDIALS v7.1.0

20 Jun 19:32
v7.1.0
bacf6ac
Compare
Choose a tag to compare

Major Features

Created shared user interface functions for ARKODE to allow more uniform control over time-stepping algorithms, improved extensibility, and simplified code maintenance. The corresponding stepper-specific user-callable functions are now deprecated and will be removed in a future major release.

Added CMake infrastructure that enables externally maintained addons/plugins to be optionally built with SUNDIALS. See the Contributing Guide for more details.

New Features and Enhancements

Added support for Kokkos Kernels v4.

Added the following Runge-Kutta Butcher tables

  • ARKODE_FORWARD_EULER_1_1
  • ARKODE_RALSTON_EULER_2_1_2
  • ARKODE_EXPLICIT_MIDPOINT_EULER_2_1_2
  • ARKODE_BACKWARD_EULER_1_1
  • ARKODE_IMPLICIT_MIDPOINT_1_2
  • ARKODE_IMPLICIT_TRAPEZOIDAL_2_2

Added the following MRI coupling tables

  • ARKODE_MRI_GARK_FORWARD_EULER
  • ARKODE_MRI_GARK_RALSTON2
  • ARKODE_MRI_GARK_RALSTON3
  • ARKODE_MRI_GARK_BACKWARD_EULER
  • ARKODE_MRI_GARK_IMPLICIT_MIDPOINT
  • ARKODE_IMEX_MRI_GARK_EULER
  • ARKODE_IMEX_MRI_GARK_TRAPEZOIDAL
  • ARKODE_IMEX_MRI_GARK_MIDPOINT

Added ARKodeButcherTable_ERKIDToName and ARKodeButcherTable_DIRKIDToName to convert a Butcher table ID to a string representation.

Added the function ARKodeSetAutonomous in ARKODE to indicate that the implicit right-hand side function does not explicitly depend on time. When using the trivial predictor, an autonomous problem may reuse implicit function evaluations across stage solves to reduce the total number of function evaluations.

Users may now disable interpolated output in ARKODE by passing ARK_INTERP_NONE to ARKodeSetInterpolantType. When interpolation is disabled, rootfinding is not supported, implicit methods must use the trivial predictor (the default option), and interpolation at stop times cannot be used (interpolating at stop times is disabled by default). With interpolation disabled, calling ARKodeEvolve in ARK_NORMAL mode will return at or past the requested output time (setting a stop time may still be used to halt the integrator at a specific time). Disabling interpolation will reduce the memory footprint of an integrator by two or more state vectors (depending on the interpolant type and degree) which can be beneficial when interpolation is not needed e.g., when integrating to a final time without output in between or using an explicit fast time scale integrator with an MRI method.

Added "Resize" capability to ARKODE's SPRKStep time-stepping module.

Enabled the Fortran interfaces to build with 32-bit sunindextype.

Bug Fixes

Updated the CMake variable HIP_PLATFORM default to amd as the previous default, hcc, is no longer recognized in ROCm 5.7.0 or newer. The new default is also valid in older version of ROCm (at least back to version 4.3.1).

Renamed the DPCPP value for the SUNDIALS_GINKGO_BACKENDS CMake option to SYCL to match Ginkgo's updated naming convention.

Changed the CMake version compatibility mode for SUNDIALS to AnyNewerVersion instead of SameMajorVersion. This fixes the issue seen here.

Fixed a CMake bug that caused an MPI linking error for our C++ examples in some instances. Fixes GitHub Issue #464.

Fixed the runtime library installation path for windows systems. This fix changes the default library installation path from
CMAKE_INSTALL_PREFIX/CMAKE_INSTALL_LIBDIR to CMAKE_INSTALL_PREFIX/CMAKE_INSTALL_BINDIR.

Fixed conflicting .lib files between shared and static libs when using MSVC on Windows.

Fixed invalid SUNDIALS_EXPORT generated macro when building both shared and static libs.

Fixed a bug in some Fortran examples where c_null_ptr was passed as an argument to a function pointer instead of c_null_funptr. This caused compilation issues with the Cray Fortran compiler.

Fixed a bug in the HIP execution policies where WARP_SIZE would not be set with ROCm 6.0.0 or newer.

Fixed a bug that caused error messages to be cut off in some cases. Fixes GitHub Issue #461.

Fixed a memory leak when an error handler was added to a SUNContext. Fixes GitHub Issue #466.

Fixed a bug where MRIStepEvolve would not handle a recoverable error produced from evolving the inner stepper.

Added missing SetRootDirection and SetNoInactiveRootWarn functions to ARKODE's SPRKStep time-stepping module.

Fixed a bug in ARKodeSPRKTable_Create where the coefficient arrays were not allocated.

Fix bug on LLP64 platforms (like Windows 64-bit) where KLU_INDEXTYPE could be 32 bits wide even if SUNDIALS_INT64_T is defined.

Check if size of SuiteSparse_long is 8 if the size of sunindextype is 8 when using KLU.

Fixed several build errors with the Fortran interfaces on Windows systems.

Deprecation Notices

Numerous ARKODE stepper-specific functions are now deprecated in favor of ARKODE-wide functions.

Deprecated the ARKStepSetOptimalParams function. Since this function does not have an ARKODE-wide equivalent, instructions have been added to the user guide for how to retain the current functionality using other user-callable functions.

The unsupported implementations of N_VGetArrayPointer and N_VSetArrayPointer for the hypre and PETSc vectors are now deprecated. Users should access the underlying wrapped external library vector objects instead with N_VGetVector_ParHyp and N_VGetVector_Petsc, respectively.

SUNDIALS v7.0.0

29 Feb 23:01
2abd63b
Compare
Choose a tag to compare

Major Feature

SUNDIALS now has more robust and uniform error handling. Non-release builds will be built with additional error checking by default. See the Error Checking section in the user guide for details.

Breaking Changes

Minimum C Standard

SUNDIALS now requires using a compiler that supports a subset of the C99 standard. Note with the Microsoft C/C++ compiler the subset of C99 features utilized by SUNDIALS are available starting with Visual Studio 2015.

Deprecated Types and Functions Removed

The previously deprecated types realtype and booleantype were removed from sundials_types.h and replaced with sunrealtype and sunbooleantype. The deprecated names for these types can be used by including the header file sundials_types_deprecated.h but will be fully removed in the next major release. Functions, types and header files that were previously deprecated have also been removed.

Error Handling Changes

With the addition of the new error handling capability, the *SetErrHandlerFn and *SetErrFile functions in CVODE(S), IDA(S), ARKODE, and KINSOL have been removed. Users of these functions can use the functions SUNContext_PushErrHandler, and SUNLogger_SetErrorFilename instead. For further details see the Error Checking and Logging sections in the documentation.

In addition the following names/symbols were replaced by SUN_ERR_* codes:

Removed Replaced with SUNErrCode
SUNLS_SUCCESS SUN_SUCCESS
SUNLS_UNRECOV_FAILURE no replacement (value was unused)
SUNLS_MEM_NULL SUN_ERR_ARG_CORRUPT
SUNLS_ILL_INPUT SUN_ERR_ARG_*
SUNLS_MEM_FAIL SUN_ERR_MEM_FAIL
SUNLS_PACKAGE_FAIL_UNREC SUN_ERR_EXT_FAIL
SUNLS_VECTOROP_ERR SUN_ERR_OP_FAIL
SUN_NLS_SUCCESS SUN_SUCCESS
SUN_NLS_MEM_NULL SUN_ERR_ARG_CORRUPT
SUN_NLS_MEM_FAIL SUN_ERR_MEM_FAIL
SUN_NLS_ILL_INPUT SUN_ERR_ARG_*
SUN_NLS_VECTOROP_ERR SUN_ERR_OP_FAIL
SUN_NLS_EXT_FAIL SUN_ERR_EXT_FAIL
SUNMAT_SUCCESS SUN_SUCCESS
SUNMAT_ILL_INPUT SUN_ERR_ARG_*
SUNMAT_MEM_FAIL SUN_ERR_MEM_FAIL
SUNMAT_OPERATION_FAIL SUN_ERR_OP_FAIL
SUNMAT_MATVEC_SETUP_REQUIRED SUN_ERR_OP_FAIL

The following functions have had their signature updated to ensure they can leverage the new SUNDIALS error handling capabilities.

// From sundials_futils.h
SUNDIALSFileOpen
SUNDIALSFileClose

// From sundials_memory.h
SUNMemorNewEmpty
SUNMemoryHelper_Alias
SUNMemoryHelper_Wrap

// From sundials_nvector.h
N_VNewVectorArray

SUNComm Type Added

We have replaced the use of a type-erased (i.e., void*) pointer to a communicator in place of MPI_Comm throughout the SUNDIALS API with a SUNComm, which is just a typedef to an int in builds without MPI and a typedef to a MPI_Comm in builds with MPI. As a result:

  • All users will need to update their codes because the call to SUNContext_Create now takes a SUNComm instead of type-erased pointer to a communicator. For non-MPI codes, pass SUN_COMM_NULL to the comm argument instead of NULL. For MPI codes, pass the MPI_Comm directly.

  • The same change must be made for calls to SUNLogger_Create or SUNProfiler_Create.

  • Some users will need to update their calls to N_VGetCommunicator, and update any custom N_Vector implementations that provide N_VGetCommunicator, since it now returns a SUNComm.

The change away from type-erased pointers for SUNComm fixes problems like the one described in GitHub Issue #275.

The SUNLogger is now always MPI-aware if MPI is enabled in SUNDIALS and the SUNDIALS_LOGGING_ENABLE_MPI CMake option and macro definition were removed accordingly.

SUNDIALS Core Library

Users now need to link to sundials_core in addition to the libraries already linked to. This will be picked up automatically in projects that use the SUNDIALS CMake target. The library sundials_generic has been superseded by sundials_core and is no longer available. This fixes some duplicate symbol errors on Windows when linking to multiple SUNDIALS libraries.

Fortran Interface Modules Streamlined

We have streamlined the Fortran modules that need to be included by users by combining the SUNDIALS core into one Fortran module, fsundials_core_mod. Modules for implementations of the core APIs still exist (e.g., for the Dense linear solver there is fsunlinsol_dense_mod) as do the modules for the SUNDIALS packages (e.g., fcvode_mod). The following modules are the ones that have been consolidated into fsundials_core_mod:

fsundials_adaptcontroller_mod
fsundials_context_mod
fsundials_futils_mod
fsundials_linearsolver_mod
fsundials_logger_mod
fsundials_matrix_mod
fsundials_nonlinearsolver_mod
fsundials_nvector_mod
fsundials_profiler_mod
fsundials_types_mod

Deprecation notice

The functions in sundials_math.h will be deprecated in the next release.

  sunrealtype SUNRpowerI(sunrealtype base, int exponent);
  sunrealtype SUNRpowerR(sunrealtype base, sunrealtype exponent);
  sunbooleantype SUNRCompare(sunrealtype a, sunrealtype b);
  sunbooleantype SUNRCompareTol(sunrealtype a, sunrealtype b, sunrealtype tol);
  sunrealtype SUNStrToReal(const char* str);

Additionally, the following header files (and everything in them) will be
deprecated -- users who rely on these are recommended to transition to the
corresponding SUNMatrix and SUNLinearSolver modules:

sundials_direct.h
sundials_dense.h
sundials_band.h

Minor Changes

Fixed #329 so that C++20 aggregate initialization can be used.

Fixed integer overflow in the internal SUNDIALS hashmap. This resolves #409 and #249.

The CMAKE_BUILD_TYPE defaults to RelWithDebInfo mode now i.e., SUNDIALS will be built with optimizations and debugging symbols enabled by default. Previously the build type was unset by default so no optimization or debugging flags were set.

The advanced CMake options to override the inferred LAPACK name-mangling scheme have been updated from SUNDIALS_F77_FUNC_CASE and SUNDIALS_F77_FUNC_UNDERSCORES to SUNDIALS_LAPACK_CASE and SUNDIALS_LAPACK_UNDERSCORES, respectively.

Converted most previous Fortran 77 and 90 examples to use SUNDIALS' Fortran 2003 interface.

SUNDIALS v7.0.0-rc.1

03 Jan 19:07
v7.0.0-rc.1
e5eec3d
Compare
Choose a tag to compare
SUNDIALS v7.0.0-rc.1 Pre-release
Pre-release

⚠️ This is a release candidate.

Major Feature

SUNDIALS now has more robust and uniform error handling. Non-release builds will be built with additional error checking by default. See the Error Checking section in the user guide for details.

Breaking Changes

Deprecated Types and Functions Removed

The previously deprecated types realtype and booleantype were removed from sundials_types.h and replaced with sunrealtype and sunbooleantype. The deprecated names for these types can be used by including the header file sundials_types_deprecated.h but will be fully removed in the next major release. Functions, types and header files that were previously deprecated have also been removed.

Error Handling Changes

With the addition of the new error handling capability, the *SetErrHandlerFn and *SetErrFile functions in CVODE(S), IDA(S), ARKODE, and KINSOL have been removed. Users of these functions can use the functions SUNContext_PushErrHandler, and SUNLogger_SetErrorFilename instead. For further details see the Error Checking and Logging sections in the documentation.

In addition the following names/symbols were replaced by SUN_ERR_* codes:

Removed Replaced with SUNErrCode
SUNLS_SUCCESS SUN_SUCCESS
SUNLS_UNRECOV_FAILURE no replacement (value was unused)
SUNLS_MEM_NULL SUN_ERR_ARG_CORRUPT
SUNLS_ILL_INPUT SUN_ERR_ARG_*
SUNLS_MEM_FAIL SUN_ERR_MEM_FAIL
SUNLS_PACKAGE_FAIL_UNREC SUN_ERR_EXT_FAIL
SUNLS_VECTOROP_ERR SUN_ERR_OP_FAIL
SUN_NLS_SUCCESS SUN_SUCCESS
SUN_NLS_MEM_NULL SUN_ERR_ARG_CORRUPT
SUN_NLS_MEM_FAIL SUN_ERR_MEM_FAIL
SUN_NLS_ILL_INPUT SUN_ERR_ARG_*
SUN_NLS_VECTOROP_ERR SUN_ERR_OP_FAIL
SUN_NLS_EXT_FAIL SUN_ERR_EXT_FAIL
SUNMAT_SUCCESS SUN_SUCCESS
SUNMAT_ILL_INPUT SUN_ERR_ARG_*
SUNMAT_MEM_FAIL SUN_ERR_MEM_FAIL
SUNMAT_OPERATION_FAIL SUN_ERR_OP_FAIL
SUNMAT_MATVEC_SETUP_REQUIRED SUN_ERR_OP_FAIL

The following functions have had their signature updated to ensure they can leverage the new SUNDIALS error handling capabilities.

// From sundials_futils.h
SUNDIALSFileOpen
SUNDIALSFileClose

// From sundials_memory.h
SUNMemorNewEmpty
SUNMemoryHelper_Alias
SUNMemoryHelper_Wrap

// From sundials_nvector.h
N_VNewVectorArray

SUNComm Type Added

We have replaced the use of a type-erased (i.e., void*) pointer to a communicator in place of MPI_Comm throughout the SUNDIALS API with a SUNComm, which is just a typedef to an int in builds without MPI and a typedef to a MPI_Comm in builds with MPI. As a result:

  • All users will need to update their codes because the call to SUNContext_Create now takes a SUNComm instead of type-erased pointer to a communicator. For non-MPI codes, pass SUN_COMM_NULL to the comm argument instead of NULL. For MPI codes, pass the MPI_Comm directly.

  • The same change must be made for calls to SUNLogger_Create or SUNProfiler_Create.

  • Some users will need to update their calls to N_VGetCommunicator, and update any custom N_Vector implementations that provide N_VGetCommunicator, since it now returns a SUNComm.

The change away from type-erased pointers for SUNComm fixes problems like the one described in GitHub Issue #275.

The SUNLogger is now always MPI-aware if MPI is enabled in SUNDIALS and the SUNDIALS_LOGGING_ENABLE_MPI CMake option and macro definition were removed accordingly.

SUNDIALS Core Library

Users now need to link to sundials_core in addition to the libraries already linked to. This will be picked up automatically in projects that use the SUNDIALS CMake target. The library sundials_generic has been superseded by sundials_core and is no longer available. This fixes some duplicate symbol errors on Windows when linking to multiple SUNDIALS libraries.

Deprecation notice

The functions in sundials_math.h will be deprecated in the next release.

  sunrealtype SUNRpowerI(sunrealtype base, int exponent);
  sunrealtype SUNRpowerR(sunrealtype base, sunrealtype exponent);
  sunbooleantype SUNRCompare(sunrealtype a, sunrealtype b);
  sunbooleantype SUNRCompareTol(sunrealtype a, sunrealtype b, sunrealtype tol);
  sunrealtype SUNStrToReal(const char* str);

Additionally, the following header files (and everything in them) will be deprecated -- users who rely on these are recommended to transition to the corresponding SUNMatrix and SUNLinearSolver modules:

sundials_direct.h
sundials_dense.h
sundials_band.h

SUNDIALS v6.7.0

18 Dec 18:52
v6.7.0
aaeab8d
Compare
Choose a tag to compare

Added the SUNAdaptController base class, ported ARKODE's internal implementations of time step controllers into implementations of this class, and updated ARKODE to use these objects instead of its own implementations. Added ARKStepSetAdaptController and ERKStepSetAdaptController routines so that users can modify controller parameters, or even provide custom implementations.

Added the routines ARKStepSetAdaptivityAdjustment and ERKStepSetAdaptivityAdjustment, that allow users to adjust the value for the method order supplied to the temporal adaptivity controllers. The ARKODE default for this adjustment has been -1 since its initial release, but for some applications a value of 0 is more appropriate. Users who notice that their simulations encounter a large number of temporal error test failures may want to experiment with adjusting this value.

Added the third order ERK method ARKODE_SHU_OSHER_3_2_3, the fourth order ERK method ARKODE_SOFRONIOU_SPALETTA_5_3_4, the sixth order ERK method ARKODE_VERNER_9_5_6, the seventh order ERK method ARKODE_VERNER_10_6_7, the eighth order ERK method ARKODE_VERNER_13_7_8, and the ninth order ERK method ARKODE_VERNER_16_8_9.

ARKStep, ERKStep, MRIStep, and SPRKStep were updated to remove a potentially unnecessary right-hand side evaluation at the end of an integration. ARKStep was additionally updated to remove extra right-hand side evaluations when using an explicit method or an implicit method with an explicit first stage.

Improved computational complexity of SUNMatScaleAddI_Sparse from O(M*N) to O(NNZ).

Added Fortran support for the LAPACK dense SUNLinearSolver implementation.

Fixed a regression introduced by the stop time bug fix in v6.6.1 where ARKODE, CVODE, CVODES, IDA, and IDAS would return at the stop time rather than the requested output time if the stop time was reached in the same step in which the output time was passed.

Fixed a bug in ERKStep where methods with c[s-1] = 1 but a[s-1,j] != b[j] were incorrectly treated as having the first same as last (FSAL) property.

Fixed a bug in ARKODE where ARKStepSetInterpolateStopTime would return an interpolated solution at the stop time in some cases when interpolation was disabled.

Fixed a bug in ARKStepSetTableNum wherein it did not recognize ARKODE_ARK2_ERK_3_1_2 and ARKODE_ARK2_DIRK_3_1_2 as a valid additive Runge--Kutta Butcher table pair.

Fixed a bug in MRIStepCoupling_Write where explicit coupling tables were not written to the output file pointer.

The MRIStepInnerStepper class in MRIStep was updated to make supplying an MRIStepInnerFullRhsFn optional.

Fixed scaling bug in SUNMatScaleAddI_Sparse for non-square matrices.

Changed the SUNProfiler so that it does not rely on MPI_WTime in any case. This fixes GitHub Issue #312.

Fixed missing soversions in some SUNLinearSolver and SUNNonlinearSolver CMake targets.

Renamed some internal types in CVODES and IDAS to allow both packages to be built together in the same binary.

SUNDIALS patch release v6.6.2

06 Nov 22:44
v6.6.2
cf16ebf
Compare
Choose a tag to compare

Fixed the build system support for MAGMA when using a NVIDIA HPC SDK installation of CUDA and fixed the targets used for rocBLAS and rocSPARSE.