Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/oo adaptivity2 #358

Merged
merged 76 commits into from
Nov 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
e6bfc92
Propagated SUNAdaptController class and usage from feature/oo-adaptiv…
drreynolds Oct 18, 2023
f94e99b
Added no-op SUNAdaptController implementation, to be used with fixed …
drreynolds Oct 18, 2023
7f4c52c
Moved stepsize bound enforcement inside arkCheckTemporalError, follow…
drreynolds Oct 18, 2023
0e3433f
Minor update to fix a corner case arising from the previous commit
drreynolds Oct 18, 2023
d1e53f3
Fixed C90 errors
drreynolds Oct 18, 2023
47a7e88
Moved 'pq' flag out of individual controllers and back into ARKodeHAd…
drreynolds Oct 19, 2023
b10c7bc
Moved order of accuracy adjustment factor into ARKodeHAdaptMem, simpl…
drreynolds Oct 19, 2023
61b24fb
Updated lenrw and leniw in .out files
drreynolds Oct 19, 2023
7311e5c
Cleaned up documentation regarding time adaptivity controllers
drreynolds Oct 19, 2023
c63ac03
Cleaned up documentation regarding time adaptivity controllers
drreynolds Oct 19, 2023
6b30605
update workspace sizes in output files
gardner48 Oct 19, 2023
04dcf8f
Removed method order storage from SUNController implementations, and …
drreynolds Oct 20, 2023
75f1a1c
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Oct 20, 2023
7b31a0d
Added Soderlind SUNAdaptController implementation
drreynolds Oct 23, 2023
e78c7ee
Removed PID, PI and I SUNAdaptController implementations, and instead…
drreynolds Oct 23, 2023
2fca795
Fixed CMakeLists.txt for removed SUNAdaptController modules
drreynolds Oct 24, 2023
791170f
Fixed unused variable error
drreynolds Oct 24, 2023
833ef70
Removed ExpGus and ImpGus SUNAdaptController implementations, absorbi…
drreynolds Oct 25, 2023
0d35898
Updated real/integer workspace sizes in some .out files; updated test…
drreynolds Oct 26, 2023
4ac5928
Updated lenrw and leniw in some more .out files
drreynolds Oct 26, 2023
6866662
Merge ../develop into feature/oo-adaptivity2
drreynolds Oct 26, 2023
7577e5c
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Oct 26, 2023
494f8a8
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Oct 27, 2023
ac70b41
Fixed broken reference
drreynolds Oct 27, 2023
992f22d
Removed unicode character to satisfy Jenkins
drreynolds Oct 27, 2023
6030e18
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Oct 27, 2023
799efbe
Fixed too-short title underline
drreynolds Oct 27, 2023
4d9d966
Fixed errors in tar script
drreynolds Oct 27, 2023
7615a60
Minor comment fix
drreynolds Oct 27, 2023
addd539
Added include/sunadaptcontroller folder
drreynolds Oct 27, 2023
9092b58
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Oct 27, 2023
2b89157
add src/sunadaptcontroller to tarscript
gardner48 Oct 28, 2023
d959c28
add fmod CMakeLists.txt to tarscript
gardner48 Oct 28, 2023
f8b1fb9
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Oct 29, 2023
f84cf4f
Updates from code review
drreynolds Oct 31, 2023
a459463
Updates from code review
drreynolds Oct 31, 2023
e6a671f
Apply suggestions from code review
drreynolds Oct 31, 2023
fa97587
Updates from code review
drreynolds Oct 31, 2023
a054a61
Removed ops function pointers and SUNAdaptController types for yet-to…
drreynolds Oct 31, 2023
f143266
Fix for C90 compliance
drreynolds Oct 31, 2023
1d4a24f
Apply suggestions from code review
drreynolds Nov 1, 2023
5ae4b42
Documentation updates
drreynolds Nov 1, 2023
a554117
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Nov 1, 2023
5e099bf
Apply suggestions from code review
drreynolds Nov 1, 2023
a97dec6
Apply suggestions from code review
drreynolds Nov 2, 2023
09a4fe4
Merge ../develop into feature/oo-adaptivity2
drreynolds Nov 2, 2023
a4f4ab5
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Nov 2, 2023
9d6fc7c
Apply suggestions from code review
drreynolds Nov 2, 2023
752e3a9
Incorporated changes from PR review
drreynolds Nov 2, 2023
2751520
Fixed ARKODE unit test builds
drreynolds Nov 2, 2023
da3fda8
Replaced extended-precision answer test files
drreynolds Nov 2, 2023
6c2787d
Updated answers repository commit
drreynolds Nov 2, 2023
1af95a9
removed NoOp SUNAdaptController
drreynolds Nov 2, 2023
b21e7c8
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Nov 2, 2023
cc57ec0
Merge ../develop into feature/oo-adaptivity2
drreynolds Nov 2, 2023
bd885c0
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Nov 2, 2023
4ea726b
link caliper to object libraries within sundials_add_library macro
balos1 Nov 2, 2023
8f0ca22
Updated answers repository commit
drreynolds Nov 3, 2023
db9d5d0
Merge branch 'feature/oo-adaptivity2' of github.com:LLNL/sundials int…
drreynolds Nov 3, 2023
78ebf1f
Merge branch 'develop' into feature/oo-adaptivity2
gardner48 Nov 3, 2023
5b5b84e
Merge branch 'develop' into feature/oo-adaptivity2
balos1 Nov 6, 2023
dd8b1a4
Fixed C90 build issues arising from PR suggestions
drreynolds Nov 6, 2023
91fb295
Merge branch 'develop' into feature/oo-adaptivity2
balos1 Nov 6, 2023
f0e521c
add sunadaptcontroller back to tarscript (merge fix)
balos1 Nov 7, 2023
e365c82
fixed another C90 build issue
drreynolds Nov 7, 2023
59d7e16
update answers commit
balos1 Nov 7, 2023
b44d68c
Merge remote-tracking branch 'origin/develop' into feature/oo-adaptiv…
balos1 Nov 8, 2023
0b665ee
Marked *StepSetErrorBias as deprecated in header, and moved implement…
drreynolds Nov 8, 2023
871ab2d
update answers submodule
gardner48 Nov 8, 2023
aac7c0e
update output files
gardner48 Nov 8, 2023
ef97184
update f2003 output
gardner48 Nov 8, 2023
1677e7d
Updatd answers submodule commit
drreynolds Nov 8, 2023
4eec815
Updatd answers submodule commit
drreynolds Nov 8, 2023
e574ca7
Updated answers submodule commit
drreynolds Nov 8, 2023
34a1f19
update answers commit
gardner48 Nov 8, 2023
1268a1c
bump answers commit one last time (hopefully)
balos1 Nov 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,21 @@

## Changes to SUNDIALS in release X.X.X

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.
drreynolds marked this conversation as resolved.
Show resolved Hide resolved

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.

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
Expand Down
9 changes: 9 additions & 0 deletions cmake/macros/SundialsAddLibrary.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,15 @@ macro(sundials_add_library target)
target_link_libraries(${obj_target} ${_all_libs})
endif()

if(SUNDIALS_BUILD_WITH_PROFILING)
if(ENABLE_CALIPER)
target_link_libraries(${obj_target} PUBLIC caliper)
endif()
if(ENABLE_ADIAK)
target_link_libraries(${obj_target} PUBLIC adiak::adiak ${CMAKE_DL_LIBS})
endif()
endif()

# add includes to object library
target_include_directories(${obj_target}
PUBLIC
Expand Down
2 changes: 2 additions & 0 deletions doc/arkode/guide/source/Constants.rst
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,8 @@ contains the ARKODE output constants.
| :index:`ARK_RELAX_JAC_FAIL` | -46 | The relaxation Jacobian function returned an unrecoverable |
| | | error |
+-------------------------------------+------+------------------------------------------------------------+
| :index:`ARK_CONTROLLER_ERR` | -47 | An error with a SUNAdaptController object was encountered. |
+-------------------------------------+------+------------------------------------------------------------+
| :index:`ARK_UNRECOGNIZED_ERROR` | -99 | An unknown error was encountered. |
+-------------------------------------+------+------------------------------------------------------------+
| |
Expand Down
15 changes: 15 additions & 0 deletions doc/arkode/guide/source/Introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,21 @@ Changes from previous versions
Changes in vX.X.X
-----------------

Added the :c:type:`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
:c:func:`ARKStepSetAdaptController` and :c:func:`ERKStepSetAdaptController`
routines so that users can modify controller parameters, or even provide custom
implementations.

Added the routines :c:func:`ARKStepSetAdaptivityAdjustment` and
:c:func:`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 :math:`-1` since its initial
release, but for some applications a value of :math:`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.

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.

Expand Down
147 changes: 12 additions & 135 deletions doc/arkode/guide/source/Mathematics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -906,147 +906,24 @@ steps, :math:`t_{n-3} \to t_{n-2} \to t_{n-1} \to t_n`. These local
error history values are all initialized to 1 upon program
initialization, to accommodate the few initial time steps of a
calculation where some of these error estimates have not yet been
computed. With these estimates, ARKODE supports a variety of error
control algorithms, as specified in the subsections below.
computed. With these estimates, ARKODE supports one of two approaches
for temporal error control.

First, any valid implementation of the SUNAdaptController class
:numref:`SUNAdaptController.Description` may be used by ARKODE's adaptive
time-stepping modules to provide a candidate error-based prospective step
size :math:`h'`.

.. _ARKODE.Mathematics.Adaptivity.ErrorControl.PID:

PID controller
-----------------

This is the default time adaptivity controller used by the ARKStep and
ERKStep modules. It derives from those found in :cite:p:`KenCarp:03`, :cite:p:`Sod:98`, :cite:p:`Sod:03` and
:cite:p:`Sod:06`, and uses all three of the local error estimates
:math:`\varepsilon_n`, :math:`\varepsilon_{n-1}` and
:math:`\varepsilon_{n-2}` in determination of a prospective step size,

.. math::
h' \;=\; h_n\; \varepsilon_n^{-k_1/p}\; \varepsilon_{n-1}^{k_2/p}\;
\varepsilon_{n-2}^{-k_3/p},

where the constants :math:`k_1`, :math:`k_2` and :math:`k_3` default
to 0.58, 0.21 and 0.1, respectively, and may be modified by the user.
In this estimate, a floor of :math:`\varepsilon > 10^{-10}` is
enforced to avoid division-by-zero errors.



.. _ARKODE.Mathematics.Adaptivity.ErrorControl.PI:

PI controller
----------------------

Like with the previous method, the PI controller derives from those
found in :cite:p:`KenCarp:03`, :cite:p:`Sod:98`, :cite:p:`Sod:03` and :cite:p:`Sod:06`, but it differs in
that it only uses the two most recent step sizes in its adaptivity
algorithm,

.. math::
h' \;=\; h_n\; \varepsilon_n^{-k_1/p}\; \varepsilon_{n-1}^{k_2/p}.

Here, the default values of :math:`k_1` and :math:`k_2` default
to 0.8 and 0.31, respectively, though they may be changed by the user.



.. _ARKODE.Mathematics.Adaptivity.ErrorControl.I:

I controller
----------------------

This is the standard time adaptivity control algorithm in use by most
publicly-available ODE solver codes. It bases the prospective time step
estimate entirely off of the current local error estimate,

.. math::
h' \;=\; h_n\; \varepsilon_n^{-k_1/p}.

By default, :math:`k_1=1`, but that may be modified by the user.




.. _ARKODE.Mathematics.Adaptivity.ErrorControl.eGus:

Explicit Gustafsson controller
---------------------------------

This step adaptivity algorithm was proposed in :cite:p:`Gust:91`, and
is primarily useful with explicit Runge--Kutta methods.
In the notation of our earlier controllers, it has the form

.. math::
h' \;=\; \begin{cases}
h_1\; \varepsilon_1^{-1/p}, &\quad\text{on the first step}, \\
h_n\; \varepsilon_n^{-k_1/p}\;
\left(\dfrac{\varepsilon_n}{\varepsilon_{n-1}}\right)^{k_2/p}, &
\quad\text{on subsequent steps}.
\end{cases}
:label: ARKODE_expGus

The default values of :math:`k_1` and :math:`k_2` are 0.367 and 0.268,
respectively, and may be modified by the user.




.. _ARKODE.Mathematics.Adaptivity.ErrorControl.iGus:

Implicit Gustafsson controller
---------------------------------

A version of the above controller suitable for implicit Runge--Kutta
methods was introduced in :cite:p:`Gust:94`, and has the form

.. math::
h' = \begin{cases}
h_1 \varepsilon_1^{-1/p}, &\quad\text{on the first step}, \\
h_n \left(\dfrac{h_n}{h_{n-1}}\right) \varepsilon_n^{-k_1/p}
\left(\dfrac{\varepsilon_n}{\varepsilon_{n-1}}\right)^{-k_2/p}, &
\quad\text{on subsequent steps}.
\end{cases}
:label: ARKODE_impGus

The algorithm parameters default to :math:`k_1 = 0.98` and
:math:`k_2 = 0.95`, but may be modified by the user.




.. _ARKODE.Mathematics.Adaptivity.ErrorControl.ieGus:

ImEx Gustafsson controller
---------------------------------

An ImEx version of these two preceding controllers is also available.
This approach computes the estimates :math:`h'_1` arising from
equation :eq:`ARKODE_expGus` and the estimate :math:`h'_2` arising from
equation :eq:`ARKODE_impGus`, and selects

.. math::
h' = \frac{h}{|h|}\min\left\{|h'_1|, |h'_2|\right\}.

Here, equation :eq:`ARKODE_expGus` uses :math:`k_1` and
:math:`k_2` with default values of 0.367 and 0.268, while equation
:eq:`ARKODE_impGus` sets both parameters to the input :math:`k_3` that
defaults to 0.95. All of these values may be modified by the user.



.. _ARKODE.Mathematics.Adaptivity.ErrorControl.User:

User-supplied controller
---------------------------------

Finally, ARKODE's time-stepping modules allow the user to define their
own time step adaptivity function,
Second, ARKODE's adaptive time-stepping modules currently still allow the
user to define their own time step adaptivity function,

.. math::
h' = H(y, t, h_n, h_{n-1}, h_{n-2}, \varepsilon_n, \varepsilon_{n-1}, \varepsilon_{n-2}, q, p),

to allow for problem-specific choices, or for continued
experimentation with temporal error controllers.
allowing for problem-specific choices, or for continued
experimentation with temporal error controllers. We note that this
support has been deprecated in favor of the SUNAdaptController class,
and will be removed in a future release.



Expand Down
104 changes: 84 additions & 20 deletions doc/arkode/guide/source/Usage/ARKStep_c_interface/User_callable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1107,8 +1107,9 @@ Set max number of constraint failures :c:func:`ARKStepSetMaxNumConst
:c:func:`ARKStepSetMaxGrowth()`,
:c:func:`ARKStepSetMinReduction()`,
:c:func:`ARKStepSetSafetyFactor()`,
:c:func:`ARKStepSetSmallNumEFails()` and
:c:func:`ARKStepSetStabilityFn()`
:c:func:`ARKStepSetSmallNumEFails()`,
:c:func:`ARKStepSetStabilityFn()`, and
:c:func:`ARKStepSetAdaptController()`
will be ignored, since temporal adaptivity is disabled.

If both :c:func:`ARKStepSetFixedStep()` and
Expand Down Expand Up @@ -1688,26 +1689,44 @@ the code, is provided in :numref:`ARKODE.Mathematics.Adaptivity`.

.. cssclass:: table-bordered

======================================================== ====================================== ========
Optional input Function name Default
======================================================== ====================================== ========
Set a custom time step adaptivity function :c:func:`ARKStepSetAdaptivityFn()` internal
Choose an existing time step adaptivity method :c:func:`ARKStepSetAdaptivityMethod()` 0
Explicit stability safety factor :c:func:`ARKStepSetCFLFraction()` 0.5
Time step error bias factor :c:func:`ARKStepSetErrorBias()` 1.5
Bounds determining no change in step size :c:func:`ARKStepSetFixedStepBounds()` 1.0 1.5
Maximum step growth factor on convergence fail :c:func:`ARKStepSetMaxCFailGrowth()` 0.25
Maximum step growth factor on error test fail :c:func:`ARKStepSetMaxEFailGrowth()` 0.3
Maximum first step growth factor :c:func:`ARKStepSetMaxFirstGrowth()` 10000.0
Maximum allowed general step growth factor :c:func:`ARKStepSetMaxGrowth()` 20.0
Minimum allowed step reduction factor on error test fail :c:func:`ARKStepSetMinReduction()` 0.1
Time step safety factor :c:func:`ARKStepSetSafetyFactor()` 0.96
Error fails before MaxEFailGrowth takes effect :c:func:`ARKStepSetSmallNumEFails()` 2
Explicit stability function :c:func:`ARKStepSetStabilityFn()` none
======================================================== ====================================== ========
========================================================= ========================================== ========
Optional input Function name Default
========================================================= ========================================== ========
Provide a :c:type:`SUNAdaptController` for ARKStep to use :c:func:`ARKStepSetAdaptController()` PID
Set a custom time step adaptivity function :c:func:`ARKStepSetAdaptivityFn()` internal
Choose an existing time step adaptivity method :c:func:`ARKStepSetAdaptivityMethod()` 0
Adjust the method order used in the controller :c:func:`ERKStepSetAdaptivityAdjustment()` -1
Explicit stability safety factor :c:func:`ARKStepSetCFLFraction()` 0.5
Time step error bias factor :c:func:`ARKStepSetErrorBias()` 1.5
Bounds determining no change in step size :c:func:`ARKStepSetFixedStepBounds()` 1.0 1.5
Maximum step growth factor on convergence fail :c:func:`ARKStepSetMaxCFailGrowth()` 0.25
Maximum step growth factor on error test fail :c:func:`ARKStepSetMaxEFailGrowth()` 0.3
Maximum first step growth factor :c:func:`ARKStepSetMaxFirstGrowth()` 10000.0
Maximum allowed general step growth factor :c:func:`ARKStepSetMaxGrowth()` 20.0
Minimum allowed step reduction factor on error test fail :c:func:`ARKStepSetMinReduction()` 0.1
Time step safety factor :c:func:`ARKStepSetSafetyFactor()` 0.96
Error fails before MaxEFailGrowth takes effect :c:func:`ARKStepSetSmallNumEFails()` 2
Explicit stability function :c:func:`ARKStepSetStabilityFn()` none
========================================================= ========================================== ========



.. c:function:: int ARKStepSetAdaptController(void* arkode_mem, SUNAdaptController C)

Sets a user-supplied time-step controller object.

**Arguments:**
* *arkode_mem* -- pointer to the ARKStep memory block.
* *C* -- user-supplied time adaptivity controller. If ``NULL`` then the PID controller will be created (see :numref:`SUNAdaptController.Soderlind`).

**Return value:**
* *ARK_SUCCESS* if successful
* *ARK_MEM_NULL* if the ARKStep memory is ``NULL``
* *ARK_MEM_FAIL* if *C* was ``NULL`` and the PID controller could not be allocated.

.. versionadded:: x.x.x


.. c:function:: int ARKStepSetAdaptivityFn(void* arkode_mem, ARKAdaptFn hfun, void* h_data)

Sets a user-supplied time-step adaptivity function.
Expand All @@ -1729,6 +1748,11 @@ Explicit stability function :c:func:`ARKStepSetSt
:c:func:`ARKStepSetStabilityFn()` should be used instead.


.. deprecated:: x.x.x

Use the SUNAdaptController infrastructure instead (see :numref:`SUNAdaptController.Description`).



.. c:function:: int ARKStepSetAdaptivityMethod(void* arkode_mem, int imethod, int idefault, int pq, realtype* adapt_params)

Expand All @@ -1744,7 +1768,8 @@ Explicit stability function :c:func:`ARKStepSetSt
parameters (1), or that they will be supplied in the
*adapt_params* argument (0).
* *pq* -- flag denoting whether to use the embedding order of
accuracy *p* (0) or the method order of accuracy *q* (1)
accuracy *p* (0), the method order of accuracy *q* (1), or the
minimum of the two (any input not equal to 0 or 1)
within the adaptivity algorithm. *p* is the default.
* *adapt_params[0]* -- :math:`k_1` parameter within accuracy-based adaptivity algorithms.
* *adapt_params[1]* -- :math:`k_2` parameter within accuracy-based adaptivity algorithms.
Expand All @@ -1761,8 +1786,40 @@ Explicit stability function :c:func:`ARKStepSetSt
parameter values are desired, it is recommended to instead provide
a custom function through a call to :c:func:`ARKStepSetAdaptivityFn()`.

.. versionchanged:: x.x.x

Prior to version x.x.x, any nonzero value for *pq* would result in use of the
embedding order of accuracy.


.. deprecated:: x.x.x

Use the SUNAdaptController infrastructure instead (see :numref:`SUNAdaptController.Description`).



.. c:function:: int ARKStepSetAdaptivityAdjustment(void* arkode_mem, int adjust)

Called by a user to adjust the method order supplied to the temporal adaptivity
controller. For example, if the user expects order reduction due to problem stiffness,
they may request that the controller assume a reduced order of accuracy for the method
by specifying a value :math:`adjust < 0`.

**Arguments:**
* *arkode_mem* -- pointer to the ARKStep memory block.
* *adjust* -- adjustment factor (default is -1).

**Return value:**
* *ARK_SUCCESS* if successful
* *ARK_MEM_NULL* if the ARKStep memory is ``NULL``
* *ARK_ILL_INPUT* if an argument has an illegal value

**Notes:**
This should be called prior to calling :c:func:`ARKStepEvolve()`, and can only be
reset following a call to :c:func:`ARKStepReInit()`.

.. versionadded:: x.x.x

.. c:function:: int ARKStepSetCFLFraction(void* arkode_mem, realtype cfl_frac)

Specifies the fraction of the estimated explicitly stable step to use.
Expand Down Expand Up @@ -1800,6 +1857,13 @@ Explicit stability function :c:func:`ARKStepSetSt
**Notes:**
Any value below 1.0 will imply a reset to the default value.

If both this and one of :c:func:`ARKStepSetAdaptivityMethod` or
:c:func:`ARKStepSetAdaptController` will be called, then this routine must be called
*second*.
drreynolds marked this conversation as resolved.
Show resolved Hide resolved

.. deprecated:: x.x.x
drreynolds marked this conversation as resolved.
Show resolved Hide resolved

Use the SUNAdaptController infrastructure instead (see :numref:`SUNAdaptController.Description`).


.. c:function:: int ARKStepSetFixedStepBounds(void* arkode_mem, realtype lb, realtype ub)
Expand Down
Loading
Loading