diff --git a/Doxyfile b/Doxyfile index d683763..5d12aa5 100644 --- a/Doxyfile +++ b/Doxyfile @@ -6,7 +6,7 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = libode PROJECT_NUMBER = -PROJECT_BRIEF = "A variety of explicit and implicit single-step ODE integrators as C++ classes" +PROJECT_BRIEF = "Easy to compile, fast ODE integrators as C++ classes" PROJECT_LOGO = OUTPUT_DIRECTORY = docs CREATE_SUBDIRS = NO diff --git a/README.md b/README.md index 4fd3daa..6f9fdb6 100644 --- a/README.md +++ b/README.md @@ -99,13 +99,13 @@ If these functions aren't enough, you can always write your own and call the `st #### Flexibly Adapt the Time Step -The adaptive solvers automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with any of the solvers. If the virtual function `dt_adapt()` is overridden, it will be used to select the time step in the `solve_adaptive()` functions. +Some of the solvers have built-in adaptive time steppers. They automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with **any** of the solvers. If the virtual function `dt_adapt()` is overridden, it will be used to select the time step in the `solve_adaptive()` functions. Rejecting an adaptive step is easy. During an adaptive solve, the virtual `is_rejected()` function is called after every step. If it returns `true`, the step is rejected. If it returns `false`, the step is accepted. Either way, `dt_adapt()` computes the next time step size and the solver proceeds. So, at minimum, an adaptive solver with time step rejection needs to have its `dt_adapt()` and `is_rejected()` functions implemented. The embedded Runge-Kutta methods have these functions built in, but they can be overridden. If it's easier to compute the next time step and determine whether the step is rejected all at once, the virtual `adapt()` function can be implemented. It should store the next time step and store a boolean for rejection. Then `dt_adapt()` and `is_rejected()` simply return those stored values. This is how the embedded Runge-Kutta methods are structured because the same information determines the next step size and rejection/acceptance of the current step. -This structure is useful because allows the step size to be chosen any way you choose. Specifically though, it has been used to set the time step based on the stability threshold of PDE discretizations. For example, the time step of explicit methods for PDEs might be limited by the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using `solve_adaptive()`, can provide huge speed boosts. +The point is to make time step selection totally flexible if the embedded Runge-Kutta algorithm isn't suitable. For example, this flexibility has been used to set the time step based on stability thresholds of PDE discretizations like the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using `solve_adaptive()`, can provide huge speed boosts. ## Testing diff --git a/docs/annotated.html b/docs/annotated.html index 4dbaf03..4a1780a 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_backward_euler-members.html b/docs/class_newton_backward_euler-members.html index dd6c4e8..24028aa 100644 --- a/docs/class_newton_backward_euler-members.html +++ b/docs/class_newton_backward_euler-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_backward_euler.html b/docs/class_newton_backward_euler.html index 852cdd0..924a659 100644 --- a/docs/class_newton_backward_euler.html +++ b/docs/class_newton_backward_euler.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_gauss6-members.html b/docs/class_newton_gauss6-members.html index 746756d..e353f30 100644 --- a/docs/class_newton_gauss6-members.html +++ b/docs/class_newton_gauss6-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_gauss6.html b/docs/class_newton_gauss6.html index 440b8ec..1082a41 100644 --- a/docs/class_newton_gauss6.html +++ b/docs/class_newton_gauss6.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_geng5-members.html b/docs/class_newton_geng5-members.html index 8b21159..4859372 100644 --- a/docs/class_newton_geng5-members.html +++ b/docs/class_newton_geng5-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_geng5.html b/docs/class_newton_geng5.html index 6930971..7e2b048 100644 --- a/docs/class_newton_geng5.html +++ b/docs/class_newton_geng5.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_lobatto_i_i_i_c6-members.html b/docs/class_newton_lobatto_i_i_i_c6-members.html index 6179bee..81c89fe 100644 --- a/docs/class_newton_lobatto_i_i_i_c6-members.html +++ b/docs/class_newton_lobatto_i_i_i_c6-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_lobatto_i_i_i_c6.html b/docs/class_newton_lobatto_i_i_i_c6.html index 7fe5129..7019d4d 100644 --- a/docs/class_newton_lobatto_i_i_i_c6.html +++ b/docs/class_newton_lobatto_i_i_i_c6.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_radau_i_i_a5-members.html b/docs/class_newton_radau_i_i_a5-members.html index 6ea205f..9ab1e28 100644 --- a/docs/class_newton_radau_i_i_a5-members.html +++ b/docs/class_newton_radau_i_i_a5-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_radau_i_i_a5.html b/docs/class_newton_radau_i_i_a5.html index 98dbf65..48828f4 100644 --- a/docs/class_newton_radau_i_i_a5.html +++ b/docs/class_newton_radau_i_i_a5.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_s_d_i_r_k43-members.html b/docs/class_newton_s_d_i_r_k43-members.html index d9bd206..4440f0d 100644 --- a/docs/class_newton_s_d_i_r_k43-members.html +++ b/docs/class_newton_s_d_i_r_k43-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_newton_s_d_i_r_k43.html b/docs/class_newton_s_d_i_r_k43.html index 13c0e57..f8665b8 100644 --- a/docs/class_newton_s_d_i_r_k43.html +++ b/docs/class_newton_s_d_i_r_k43.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_adaptive-members.html b/docs/class_ode_adaptive-members.html index 8e217f3..bf839c1 100644 --- a/docs/class_ode_adaptive-members.html +++ b/docs/class_ode_adaptive-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_adaptive.html b/docs/class_ode_adaptive.html index 5176024..0af239d 100644 --- a/docs/class_ode_adaptive.html +++ b/docs/class_ode_adaptive.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_backward_euler-members.html b/docs/class_ode_backward_euler-members.html index c734687..f59a743 100644 --- a/docs/class_ode_backward_euler-members.html +++ b/docs/class_ode_backward_euler-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_backward_euler.html b/docs/class_ode_backward_euler.html index d9f1116..14a8e23 100644 --- a/docs/class_ode_backward_euler.html +++ b/docs/class_ode_backward_euler.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_base-members.html b/docs/class_ode_base-members.html index eda86ae..9e39074 100644 --- a/docs/class_ode_base-members.html +++ b/docs/class_ode_base-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_base.html b/docs/class_ode_base.html index b304efb..509fe7f 100644 --- a/docs/class_ode_base.html +++ b/docs/class_ode_base.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -358,7 +358,7 @@

Lowest base class for all solvers.

This is the deepest base class, upon which all integrators and other base classes are built. It provides basic variables like the solution array, the independent variable, and a string defining the integrator's name. It implements the solve_fixed function for integrating with a fixed time step. When constructing, it will allocate space for a Jacobian matrix if the need_jac flag is true.

-

Definition at line 100 of file ode_base.h.

+

Definition at line 124 of file ode_base.h.

Constructor & Destructor Documentation

◆ OdeBase()

@@ -654,7 +654,7 @@

Definition at line 131 of file ode_base.h.

+

Definition at line 155 of file ode_base.h.

diff --git a/docs/class_ode_do_pri54-members.html b/docs/class_ode_do_pri54-members.html index 2f14f53..6c8da1e 100644 --- a/docs/class_ode_do_pri54-members.html +++ b/docs/class_ode_do_pri54-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_do_pri54.html b/docs/class_ode_do_pri54.html index f5461d2..ccfe157 100644 --- a/docs/class_ode_do_pri54.html +++ b/docs/class_ode_do_pri54.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_do_pri87-members.html b/docs/class_ode_do_pri87-members.html index ca803ee..a877bfb 100644 --- a/docs/class_ode_do_pri87-members.html +++ b/docs/class_ode_do_pri87-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_do_pri87.html b/docs/class_ode_do_pri87.html index eb57733..64ff861 100644 --- a/docs/class_ode_do_pri87.html +++ b/docs/class_ode_do_pri87.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_e_r_k-members.html b/docs/class_ode_e_r_k-members.html index c23ad1b..1bfc25d 100644 --- a/docs/class_ode_e_r_k-members.html +++ b/docs/class_ode_e_r_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_e_r_k.html b/docs/class_ode_e_r_k.html index ced3601..c35110e 100644 --- a/docs/class_ode_e_r_k.html +++ b/docs/class_ode_e_r_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_embedded-members.html b/docs/class_ode_embedded-members.html index 8c0ad1d..1c6f78a 100644 --- a/docs/class_ode_embedded-members.html +++ b/docs/class_ode_embedded-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_embedded.html b/docs/class_ode_embedded.html index 083ecec..a022e7d 100644 --- a/docs/class_ode_embedded.html +++ b/docs/class_ode_embedded.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_euler-members.html b/docs/class_ode_euler-members.html index cf8b6d1..7ff510d 100644 --- a/docs/class_ode_euler-members.html +++ b/docs/class_ode_euler-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_euler.html b/docs/class_ode_euler.html index 1c2d13a..5f928dc 100644 --- a/docs/class_ode_euler.html +++ b/docs/class_ode_euler.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_g_r_k4_a-members.html b/docs/class_ode_g_r_k4_a-members.html index 6ab6d2a..92c696b 100644 --- a/docs/class_ode_g_r_k4_a-members.html +++ b/docs/class_ode_g_r_k4_a-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_g_r_k4_a.html b/docs/class_ode_g_r_k4_a.html index 85e8cf0..56e0527 100644 --- a/docs/class_ode_g_r_k4_a.html +++ b/docs/class_ode_g_r_k4_a.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_gauss6-members.html b/docs/class_ode_gauss6-members.html index 62d67f1..1f71c9c 100644 --- a/docs/class_ode_gauss6-members.html +++ b/docs/class_ode_gauss6-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_gauss6.html b/docs/class_ode_gauss6.html index d8b824c..29f54a5 100644 --- a/docs/class_ode_gauss6.html +++ b/docs/class_ode_gauss6.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_geng5-members.html b/docs/class_ode_geng5-members.html index ae6671f..3f0be9c 100644 --- a/docs/class_ode_geng5-members.html +++ b/docs/class_ode_geng5-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_geng5.html b/docs/class_ode_geng5.html index e924273..e73f167 100644 --- a/docs/class_ode_geng5.html +++ b/docs/class_ode_geng5.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_i_r_k-members.html b/docs/class_ode_i_r_k-members.html index 2890152..00e8d29 100644 --- a/docs/class_ode_i_r_k-members.html +++ b/docs/class_ode_i_r_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_i_r_k.html b/docs/class_ode_i_r_k.html index d2ed91d..aa4fba0 100644 --- a/docs/class_ode_i_r_k.html +++ b/docs/class_ode_i_r_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_lobatto_i_i_i_c6-members.html b/docs/class_ode_lobatto_i_i_i_c6-members.html index 7b8c10d..e2d8380 100644 --- a/docs/class_ode_lobatto_i_i_i_c6-members.html +++ b/docs/class_ode_lobatto_i_i_i_c6-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_lobatto_i_i_i_c6.html b/docs/class_ode_lobatto_i_i_i_c6.html index 2e0e5e6..5d50e3d 100644 --- a/docs/class_ode_lobatto_i_i_i_c6.html +++ b/docs/class_ode_lobatto_i_i_i_c6.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton-members.html b/docs/class_ode_newton-members.html index af08661..7d17dba 100644 --- a/docs/class_ode_newton-members.html +++ b/docs/class_ode_newton-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton.html b/docs/class_ode_newton.html index eeb8289..08ab827 100644 --- a/docs/class_ode_newton.html +++ b/docs/class_ode_newton.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_bridge-members.html b/docs/class_ode_newton_bridge-members.html index ae188dc..3d019d7 100644 --- a/docs/class_ode_newton_bridge-members.html +++ b/docs/class_ode_newton_bridge-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_bridge.html b/docs/class_ode_newton_bridge.html index 3f24da9..0b59f9f 100644 --- a/docs/class_ode_newton_bridge.html +++ b/docs/class_ode_newton_bridge.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_i_r_k-members.html b/docs/class_ode_newton_i_r_k-members.html index af8c099..86a0efb 100644 --- a/docs/class_ode_newton_i_r_k-members.html +++ b/docs/class_ode_newton_i_r_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_i_r_k.html b/docs/class_ode_newton_i_r_k.html index ef5a024..43b5824 100644 --- a/docs/class_ode_newton_i_r_k.html +++ b/docs/class_ode_newton_i_r_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_s_d_i_r_k-members.html b/docs/class_ode_newton_s_d_i_r_k-members.html index 9090292..6bd29a0 100644 --- a/docs/class_ode_newton_s_d_i_r_k-members.html +++ b/docs/class_ode_newton_s_d_i_r_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_newton_s_d_i_r_k.html b/docs/class_ode_newton_s_d_i_r_k.html index 8c082a2..8843772 100644 --- a/docs/class_ode_newton_s_d_i_r_k.html +++ b/docs/class_ode_newton_s_d_i_r_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k-members.html b/docs/class_ode_r_k-members.html index 4944d75..eef52ee 100644 --- a/docs/class_ode_r_k-members.html +++ b/docs/class_ode_r_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k.html b/docs/class_ode_r_k.html index 05cea46..c57d8e2 100644 --- a/docs/class_ode_r_k.html +++ b/docs/class_ode_r_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k4-members.html b/docs/class_ode_r_k4-members.html index 8d0d37a..32fcf30 100644 --- a/docs/class_ode_r_k4-members.html +++ b/docs/class_ode_r_k4-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k4.html b/docs/class_ode_r_k4.html index 7b49ffb..84e5f54 100644 --- a/docs/class_ode_r_k4.html +++ b/docs/class_ode_r_k4.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k43-members.html b/docs/class_ode_r_k43-members.html index 16c5a0f..b3dc291 100644 --- a/docs/class_ode_r_k43-members.html +++ b/docs/class_ode_r_k43-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k43.html b/docs/class_ode_r_k43.html index 18da41f..868d6e1 100644 --- a/docs/class_ode_r_k43.html +++ b/docs/class_ode_r_k43.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k_c_k-members.html b/docs/class_ode_r_k_c_k-members.html index 7da80f2..523568a 100644 --- a/docs/class_ode_r_k_c_k-members.html +++ b/docs/class_ode_r_k_c_k-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k_c_k.html b/docs/class_ode_r_k_c_k.html index ce9ea85..881a9d4 100644 --- a/docs/class_ode_r_k_c_k.html +++ b/docs/class_ode_r_k_c_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k_f32-members.html b/docs/class_ode_r_k_f32-members.html index c06b6ac..ca4b77c 100644 --- a/docs/class_ode_r_k_f32-members.html +++ b/docs/class_ode_r_k_f32-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_k_f32.html b/docs/class_ode_r_k_f32.html index 06d3657..a8b5bc3 100644 --- a/docs/class_ode_r_k_f32.html +++ b/docs/class_ode_r_k_f32.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_o_w6_a-members.html b/docs/class_ode_r_o_w6_a-members.html index bc821c4..a535801 100644 --- a/docs/class_ode_r_o_w6_a-members.html +++ b/docs/class_ode_r_o_w6_a-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_r_o_w6_a.html b/docs/class_ode_r_o_w6_a.html index e08cf38..434561b 100644 --- a/docs/class_ode_r_o_w6_a.html +++ b/docs/class_ode_r_o_w6_a.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_radau_i_i_a5-members.html b/docs/class_ode_radau_i_i_a5-members.html index 8ff84b5..d130ce3 100644 --- a/docs/class_ode_radau_i_i_a5-members.html +++ b/docs/class_ode_radau_i_i_a5-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_radau_i_i_a5.html b/docs/class_ode_radau_i_i_a5.html index 5246031..ce9e9f5 100644 --- a/docs/class_ode_radau_i_i_a5.html +++ b/docs/class_ode_radau_i_i_a5.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_rosenbrock-members.html b/docs/class_ode_rosenbrock-members.html index 76da300..caa3742 100644 --- a/docs/class_ode_rosenbrock-members.html +++ b/docs/class_ode_rosenbrock-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_rosenbrock.html b/docs/class_ode_rosenbrock.html index 90dda80..5af6ed4 100644 --- a/docs/class_ode_rosenbrock.html +++ b/docs/class_ode_rosenbrock.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_s_d_i_r_k43-members.html b/docs/class_ode_s_d_i_r_k43-members.html index 3050221..5c2652a 100644 --- a/docs/class_ode_s_d_i_r_k43-members.html +++ b/docs/class_ode_s_d_i_r_k43-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_s_d_i_r_k43.html b/docs/class_ode_s_d_i_r_k43.html index 0de932b..5e7fff5 100644 --- a/docs/class_ode_s_d_i_r_k43.html +++ b/docs/class_ode_s_d_i_r_k43.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_ssp3-members.html b/docs/class_ode_ssp3-members.html index b03354f..4d64525 100644 --- a/docs/class_ode_ssp3-members.html +++ b/docs/class_ode_ssp3-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_ssp3.html b/docs/class_ode_ssp3.html index cf1819c..034e40d 100644 --- a/docs/class_ode_ssp3.html +++ b/docs/class_ode_ssp3.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_trapz-members.html b/docs/class_ode_trapz-members.html index 349f599..aa2e67d 100644 --- a/docs/class_ode_trapz-members.html +++ b/docs/class_ode_trapz-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_trapz.html b/docs/class_ode_trapz.html index a67a2d0..fb5523c 100644 --- a/docs/class_ode_trapz.html +++ b/docs/class_ode_trapz.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern65-members.html b/docs/class_ode_vern65-members.html index e87a1ba..1edd69e 100644 --- a/docs/class_ode_vern65-members.html +++ b/docs/class_ode_vern65-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern65.html b/docs/class_ode_vern65.html index 3fe45d6..106f522 100644 --- a/docs/class_ode_vern65.html +++ b/docs/class_ode_vern65.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern76-members.html b/docs/class_ode_vern76-members.html index fe5454d..893bb37 100644 --- a/docs/class_ode_vern76-members.html +++ b/docs/class_ode_vern76-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern76.html b/docs/class_ode_vern76.html index 55df153..807c535 100644 --- a/docs/class_ode_vern76.html +++ b/docs/class_ode_vern76.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern98-members.html b/docs/class_ode_vern98-members.html index 0dd759d..c0f2267 100644 --- a/docs/class_ode_vern98-members.html +++ b/docs/class_ode_vern98-members.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/class_ode_vern98.html b/docs/class_ode_vern98.html index e4c4e42..4b25d40 100644 --- a/docs/class_ode_vern98.html +++ b/docs/class_ode_vern98.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/classes.html b/docs/classes.html index 39ab551..b538de4 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 233f8f0..67c223f 100644 --- a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/files.html b/docs/files.html index d1b0187..c0620ad 100644 --- a/docs/files.html +++ b/docs/files.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions.html b/docs/functions.html index b039981..62b1962 100644 --- a/docs/functions.html +++ b/docs/functions.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_b.html b/docs/functions_b.html index d2e1130..fdcf7e0 100644 --- a/docs/functions_b.html +++ b/docs/functions_b.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_c.html b/docs/functions_c.html index 4576434..35335bd 100644 --- a/docs/functions_c.html +++ b/docs/functions_c.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_d.html b/docs/functions_d.html index 9853aca..d06cf93 100644 --- a/docs/functions_d.html +++ b/docs/functions_d.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_e.html b/docs/functions_e.html index e96a580..89e4905 100644 --- a/docs/functions_e.html +++ b/docs/functions_e.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_f.html b/docs/functions_f.html index 5609af3..fd20f5a 100644 --- a/docs/functions_f.html +++ b/docs/functions_f.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_func.html b/docs/functions_func.html index 7198d2b..b519325 100644 --- a/docs/functions_func.html +++ b/docs/functions_func.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_g.html b/docs/functions_g.html index 2276371..930563b 100644 --- a/docs/functions_g.html +++ b/docs/functions_g.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_i.html b/docs/functions_i.html index 40eef38..2a97662 100644 --- a/docs/functions_i.html +++ b/docs/functions_i.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_j.html b/docs/functions_j.html index df2dcda..8ebf8cc 100644 --- a/docs/functions_j.html +++ b/docs/functions_j.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_k.html b/docs/functions_k.html index 8f22b14..d5cbef0 100644 --- a/docs/functions_k.html +++ b/docs/functions_k.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_m.html b/docs/functions_m.html index 619a9de..e4abc05 100644 --- a/docs/functions_m.html +++ b/docs/functions_m.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_n.html b/docs/functions_n.html index d55f921..c446a72 100644 --- a/docs/functions_n.html +++ b/docs/functions_n.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_o.html b/docs/functions_o.html index 71b377d..415b13a 100644 --- a/docs/functions_o.html +++ b/docs/functions_o.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_p.html b/docs/functions_p.html index 762dbd2..486cfb6 100644 --- a/docs/functions_p.html +++ b/docs/functions_p.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_q.html b/docs/functions_q.html index 6341e97..74c647e 100644 --- a/docs/functions_q.html +++ b/docs/functions_q.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_r.html b/docs/functions_r.html index f61f55b..bba3f5b 100644 --- a/docs/functions_r.html +++ b/docs/functions_r.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_s.html b/docs/functions_s.html index 473f8f3..2a9e84b 100644 --- a/docs/functions_s.html +++ b/docs/functions_s.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_t.html b/docs/functions_t.html index e4bdbeb..c1a3968 100644 --- a/docs/functions_t.html +++ b/docs/functions_t.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_vars.html b/docs/functions_vars.html index 17bdb9f..d27533c 100644 --- a/docs/functions_vars.html +++ b/docs/functions_vars.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/functions_~.html b/docs/functions_~.html index 1870cd6..453ff53 100644 --- a/docs/functions_~.html +++ b/docs/functions_~.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/globals.html b/docs/globals.html index 499a0a8..273ee6c 100644 --- a/docs/globals.html +++ b/docs/globals.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/globals_func.html b/docs/globals_func.html index 6f4db58..9f16165 100644 --- a/docs/globals_func.html +++ b/docs/globals_func.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 47e224f..b63e436 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/index.html b/docs/index.html index e5e8bd3..6adddbe 100644 --- a/docs/index.html +++ b/docs/index.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -90,24 +90,68 @@
libode
-

Easy to compile, fast ODE integrators as C++ classes

-

libode is a library of C++ classes for solving systems of ordinary differential equations in autonomous form. All of the solvers are single-step, Runge-Kutta-like methods. There are explicit, adaptive solvers up to the ninth order. The repository also includes Rosenbrock methods, a singly-diagonal implicit Runge-Kutta (SDIRK) method, and several fully implicit Runge-Kutta methods. However, only a few of the implicit methods have solid adaptive time steppers at this point. With the current collection of solvers and features, libode is well suited to any non-stiff system and to stiff systems that are tightly coupled and have a known Jacobian (ones that don't require sparse or banded matrix routines).

+

libode is a library of C++ classes for solving systems of ordinary differential equations in autonomous form. All of the solvers are single-step, Runge-Kutta-like methods. There are explicit, adaptive solvers up to the ninth order. The repository also includes Rosenbrock methods, a singly-diagonal implicit Runge-Kutta (SDIRK) method, and several fully implicit Runge-Kutta methods. However, only a few of the implicit methods have solid adaptive time steppers at this point. With the current collection of solvers and features, libode is well suited to any non-stiff system and to stiff systems that are tightly coupled and have a known Jacobian (ones that don't require sparse or banded matrix routines).

The classes were originally styled after Chris Rycroft's example classes. Their structure makes it easy to build a templated integrator on top of an arbitrary solver class and easily switch the solver/method. Implicit methods can be given a function for the ODE system's Jacobian or, if none is provided, the Jacobian is estimated using finite differences.

Several of the solvers and much more detail on the methods can be found in these amazing books:

  • Hairer, E., Nørsett, S. P. & Wanner, G. Solving Ordinary Differential Equations I: Nonstiff Problems. (Springer-Verlag, 1987).
  • Hairer, E. & Wanner, G. Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems. (Springer, 1996).
+

The table below lists all the solvers and gives some basic information about them. Papers and/or links to the derivation or original publication of the methods are often copied in the headers for the solver classes and included in the documentation. Some work still needs to be done to make the implicit methods genuinely useful, and a list of things to implement is in the todo.txt file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Method Class Name Header File (ex/im)plicit adaptive? stages order stability
Forward EulerOdeEulerode_euler.hexplicitno11
Trapezoidal RuleOdeTrapzode_trapz.hexplicitno22
Strong Stability-Preserving, Order 3OdeSsp3ode_ssp_3.hexplicitno33
Runge-Kutta-Fehlberg (3)2OdeRKF32ode_rkf_32.hexplicityes33
RK4OdeRK4ode_rk_4.hexplicitno44
Runge-Kutta (4)3OdeRK43ode_rk_43.hexplicityes54
Cash-KarpOdeRKCKode_rkck.hexplicityes65
Dormand-Prince (5)4OdeDoPri54ode_dopri_54.hexplicityes75
Jim Verner's "most efficent" (6)5OdeVern65ode_vern_65.hexplicityes96
Jim Verner's "most efficent" (7)6OdeVern76ode_vern_76.hexplicityes107
Dormand-Prince (8)7OdeDoPri87ode_dopri_87.hexplicityes138
Jim Verner's "most efficent" (9)8OdeVern98ode_vern_98.hexplicityes169
Rosenbrock 4(3)OdeGRK4Aode_grk4a.himplicityes44A
Rosenbrock 6OdeROW6Aode_row6a.himplicitno66A
Backward EulerOdeBackwardEulerode_backward_euler.himplicitno11L
Gauss 6th OrderOdeGauss6ode_gauss_6.himplicitnot yet36A
Lobatto IIIC 6th OrderOdeLobattoIIIC6ode_lobatto_iiic_6.himplicitnot yet46L
Radau IIA 5th OrderOdeRadauIIA5ode_radau_iia_5.himplicitnot yet35L
Geng's Symplectic 5th OrderOdeGeng5ode_geng_5.himplicitno35A?
SDIRK 4(3)OdeSDIRK43ode_sdirk_43.himplicityes44L

Compiling

Short Instructions

    -
  1. Copy the _config.mk file to config.mk
  2. -
  3. Edit any of the compiler settings in your new config.mk file as necessary (specify which compiler to use and any compiling flags you want)
  4. -
  5. Run make in the top directory where the Makefile is
  6. +
  7. Copy the _config.mk file to config.mk.
  8. +
  9. Edit any of the compiler settings in your new config.mk file as necessary (specify which compiler to use and any compiling flags you want).
  10. +
  11. Run make in the top directory where the Makefile is.
  12. If anything weird happens, tell me.
  13. -
  14. Run the run_all_tests.sh and run_all_examples.sh scripts to check that things are working (Python with numpy and matplotlib are needed for plotting)
  15. -
  16. Create derived classes and link to the library with -I<path>/libode/src -L<path>/libode/bin -lode, replacing <path> with the path to the directory above libode on your computer
  17. +
  18. Execute the run_all_tests.sh script to check that things are working (Python with numpy and matplotlib are needed for plotting). If you want, also execute run_all_examples.sh to run some example solvers.
  19. +
  20. Create derived classes and link to the library with -I<path>/libode/src -L<path>/libode/bin -lode, replacing <path> with the path to the directory above libode on your computer.

Longer Instructions

@@ -147,10 +191,10 @@

If these functions aren't enough, you could always write your own loop calling the step() function directly.

Flexibly Adapt the Time Step

-

The adaptive solvers automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with any of the solvers. If the virtual function dt_adapt() is overridden, it will be used to select the time step in the solve_adaptive() functions.

+

Some of the solvers have built-in adaptive time steppers. They automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with any of the solvers. If the virtual function dt_adapt() is overridden, it will be used to select the time step in the solve_adaptive() functions.

Rejecting an adaptive step is easy. During an adaptive solve, the virtual is_rejected() function is called after every step. If it returns true, the step is rejected. If it returns false, the step is accepted. Either way, dt_adapt() computes the next time step size and the solver proceeds. So, at minimum, an adaptive solver with time step rejection needs to have its dt_adapt() and is_rejected() functions implemented. The embedded Runge-Kutta methods have these functions built in, but they can be overridden.

If it's easier to compute the next time step and determine whether the step is rejected all at once, the virtual adapt() function can be implemented. It should store the next time step and store a boolean for rejection. Then dt_adapt() and is_rejected() simply return those stored values. This is how the embedded Runge-Kutta methods are structured because the same information determines the next step size and rejection/acceptance of the current step.

-

This structure is useful because allows the step size to be chosen any way you choose. Specifically though, it has been used to set the time step based on the stability threshold of PDE discretizations. For example, the time step of explicit methods for PDEs might be limited by the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using solve_adaptive(), can provide huge speed boosts.

+

The point is to make time step selection totally flexible if the embedded Runge-Kutta algorithm isn't suitable. For example, this flexibility has been used to set the time step based on stability thresholds of PDE discretizations like the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using solve_adaptive(), can provide huge speed boosts.

diff --git a/docs/ode__adaptive_8cc.html b/docs/ode__adaptive_8cc.html index 4f9294d..0bac66d 100644 --- a/docs/ode__adaptive_8cc.html +++ b/docs/ode__adaptive_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__adaptive_8cc_source.html b/docs/ode__adaptive_8cc_source.html index f44dc05..52989fa 100644 --- a/docs/ode__adaptive_8cc_source.html +++ b/docs/ode__adaptive_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -333,26 +333,26 @@
void check_pre_snaps(double dt, double *tsnap, unsigned long nsnap)
checks that snap times are monotonically increasing and > current time
Definition: ode_base.cc:170
double dtmax_
maximum allowable time step
Definition: ode_adaptive.h:119
void check_sol_integrity()
checks solution for nans and infs, exiting the program if they're found
Definition: ode_base.cc:152
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
double abstol_
absolute error tolerance
Definition: ode_adaptive.h:115
-
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:232
+
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:256
-
double dt_
time step is stored and updated during solves
Definition: ode_base.h:238
+
double dt_
time step is stored and updated during solves
Definition: ode_base.h:262
virtual void after_step(double t)
does any extra stuff after each step
Definition: ode_base.cc:326
-
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:246
+
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:270
virtual ~OdeAdaptive()
destructs
Definition: ode_adaptive.cc:19
void check_pre_solve(double tint, double dt)
checks that a solve can be performed with given tend and dt values
Definition: ode_base.cc:162
virtual void after_capture(double t)
does any extra stuff only when a step is captured
Definition: ode_base.cc:331
-
Lowest base class for all solvers.
Definition: ode_base.h:100
+
Lowest base class for all solvers.
Definition: ode_base.h:124
OdeAdaptive(unsigned long neq, bool need_jac)
constructs
Definition: ode_adaptive.cc:5
-
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:228
+
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:252
bool solve_done_adaptive(double tend)
determines whether an adaptive solve is finished
void solve_adaptive_(double tint, double dt0, bool extra=true)
integrates without output or any counters, trackers, extra functions...
Definition: ode_adaptive.cc:26
void ode_print_exit(const char *msg)
print a message and exit with failure
Definition: ode_io.cc:15
bool ode_is_close(double a, double b, double thresh)
Checks if two numbers are very close to each other.
Definition: ode_util.cc:15
virtual bool is_rejected()
retreives a bool determining whether a step is accepted/rejected, false by default
-
long long nstep_
number of time steps
Definition: ode_base.h:242
+
long long nstep_
number of time steps
Definition: ode_base.h:266
virtual void step_(double dt)=0
advances a single time step (without changing counters or the time) and must be defined in the derive...
virtual void after_solve()
does any extra stuff after completing a solve
Definition: ode_base.cc:343
long long nrej_
counter for rejected steps
Definition: ode_adaptive.h:113
@@ -360,11 +360,11 @@
void snap(std::string dirout, long isnap, double tsnap)
writes the current value of the solution to a binary file
Definition: ode_base.cc:123
virtual void before_solve()
does any extra stuff before starting a solve
Definition: ode_base.cc:324
void solve_adaptive(double tint, double dt0, bool extras=true)
integrates for a specified duration of independent variable without output
Definition: ode_adaptive.cc:43
-
double t_
time, initialized to zero
Definition: ode_base.h:236
+
double t_
time, initialized to zero
Definition: ode_base.h:260
std::string ode_int_to_string(long i)
converts an integer into a string
Definition: ode_io.cc:23
void ode_write(char const *fn, T *a, unsigned long n)
write an array to a binary file
Definition: ode_io.h:25
virtual double dt_adapt()
retrieves the best time step for the next step
-
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:224
+
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:248
double dt_adapt_(double tend)
wrapper around dt_adapt() to perform additional checks
bool step_adaptive_(double dt, bool extra=true)
executes a single time and calls all necessary adapting functions
diff --git a/docs/ode__adaptive_8h.html b/docs/ode__adaptive_8h.html index 4167e86..a5482fe 100644 --- a/docs/ode__adaptive_8h.html +++ b/docs/ode__adaptive_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__adaptive_8h_source.html b/docs/ode__adaptive_8h_source.html index 6683791..f37b04f 100644 --- a/docs/ode__adaptive_8h_source.html +++ b/docs/ode__adaptive_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -176,7 +176,7 @@
virtual ~OdeAdaptive()
destructs
Definition: ode_adaptive.cc:19
void set_tol(double tol)
sets the absolute and relative error tolerance to the same value
Definition: ode_adaptive.h:57
-
Lowest base class for all solvers.
Definition: ode_base.h:100
+
Lowest base class for all solvers.
Definition: ode_base.h:124
OdeAdaptive(unsigned long neq, bool need_jac)
constructs
Definition: ode_adaptive.cc:5
bool solve_done_adaptive(double tend)
determines whether an adaptive solve is finished
void solve_adaptive_(double tint, double dt0, bool extra=true)
integrates without output or any counters, trackers, extra functions...
Definition: ode_adaptive.cc:26
diff --git a/docs/ode__backward__euler_8cc.html b/docs/ode__backward__euler_8cc.html index 19e2a72..bee814a 100644 --- a/docs/ode__backward__euler_8cc.html +++ b/docs/ode__backward__euler_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__backward__euler_8cc_source.html b/docs/ode__backward__euler_8cc_source.html index cd56f5f..ac15a86 100644 --- a/docs/ode__backward__euler_8cc_source.html +++ b/docs/ode__backward__euler_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -158,13 +158,13 @@
double ** Jac_
pointer to the solver's Jacobian matrix
OdeBackwardEuler(unsigned long neq)
constructs
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
Provides a large vector containing the slope values of all stages with pointers to each of the indivi...
Definition: ode_irk.h:7
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
void jac(double *solin, double **Jout)
wrapper around Jacobian evaluation function
diff --git a/docs/ode__backward__euler_8h.html b/docs/ode__backward__euler_8h.html index 0d1fc4b..adfa555 100644 --- a/docs/ode__backward__euler_8h.html +++ b/docs/ode__backward__euler_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__backward__euler_8h_source.html b/docs/ode__backward__euler_8h_source.html index 9077795..b9ed59e 100644 --- a/docs/ode__backward__euler_8h_source.html +++ b/docs/ode__backward__euler_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__base_8cc.html b/docs/ode__base_8cc.html index 1854884..b74d3a1 100644 --- a/docs/ode__base_8cc.html +++ b/docs/ode__base_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__base_8cc_source.html b/docs/ode__base_8cc_source.html index e38f961..2d9f841 100644 --- a/docs/ode__base_8cc_source.html +++ b/docs/ode__base_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -436,44 +436,44 @@
void check_pre_snaps(double dt, double *tsnap, unsigned long nsnap)
checks that snap times are monotonically increasing and > current time
Definition: ode_base.cc:170
void step(double dt, bool extra=true)
increments the step counter and the time, checks the solution integrity if needed,...
Definition: ode_base.cc:104
void check_sol_integrity()
checks solution for nans and infs, exiting the program if they're found
Definition: ode_base.cc:152
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
long long neval_
function evaluation counter, must be incremented in step() when defined
Definition: ode_base.h:244
-
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:248
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
long long neval_
function evaluation counter, must be incremented in step() when defined
Definition: ode_base.h:268
+
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:272
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
void ode_jac_(double *solin, double **Jout)
wrapper, calls ode_jac() and increments nJac;
Definition: ode_base.cc:96
bool solve_done(double dt, double tend)
checks if the solution is within a single time step of the end point
Definition: ode_base.cc:142
-
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:232
-
double dt_
time step is stored and updated during solves
Definition: ode_base.h:238
+
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:256
+
double dt_
time step is stored and updated during solves
Definition: ode_base.h:262
virtual void after_step(double t)
does any extra stuff after each step
Definition: ode_base.cc:326
virtual void after_snap(std::string dirout, long isnap, double t)
does any extra stuff after each snap
Definition: ode_base.cc:336
-
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:246
+
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:270
void check_pre_solve(double tint, double dt)
checks that a solve can be performed with given tend and dt values
Definition: ode_base.cc:162
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
virtual void after_capture(double t)
does any extra stuff only when a step is captured
Definition: ode_base.cc:331
-
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:228
+
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:252
virtual void ode_jac(double *solin, double **Jout)
evaluates the system's Jacobian matrix, also in autonomous form, and can either be defined in a deriv...
Definition: ode_base.cc:58
virtual ~OdeBase()
destructs
Definition: ode_base.cc:45
-
bool quiet_
whether stuff should be printed during a solve
Definition: ode_base.h:230
+
bool quiet_
whether stuff should be printed during a solve
Definition: ode_base.h:254
void ode_print_exit(const char *msg)
print a message and exit with failure
Definition: ode_io.cc:15
void solve_fixed_(double tint, double dt, bool extra=true)
integrates without output or any counters, trackers, extra functions...
Definition: ode_base.cc:183
-
long long nstep_
number of time steps
Definition: ode_base.h:242
+
long long nstep_
number of time steps
Definition: ode_base.h:266
virtual void step_(double dt)=0
advances a single time step (without changing counters or the time) and must be defined in the derive...
virtual void ode_fun(double *solin, double *fout)=0
evaluates the system of ODEs in autonomous form and must be defined by a derived class
-
long long nJac_
counter for jacobian evaluations
Definition: ode_base.h:250
+
long long nJac_
counter for jacobian evaluations
Definition: ode_base.h:274
double ode_max2(double a, double b)
Simple maximum of two doubles.
Definition: ode_util.cc:5
-
double reljacdel_
relative adjustment fraction for numerical Jacobian,`` if needed
Definition: ode_base.h:254
+
double reljacdel_
relative adjustment fraction for numerical Jacobian,`` if needed
Definition: ode_base.h:278
void reset(double t, double *sol)
reset to a specified time and initial condition array
Definition: ode_base.cc:315
virtual void after_solve()
does any extra stuff after completing a solve
Definition: ode_base.cc:343
OdeBase(unsigned long neq, bool need_jac)
constructs
Definition: ode_base.cc:5
void snap(std::string dirout, long isnap, double tsnap)
writes the current value of the solution to a binary file
Definition: ode_base.cc:123
virtual void before_solve()
does any extra stuff before starting a solve
Definition: ode_base.cc:324
-
double absjacdel_
absolute adjustment fraction for numerical Jacobian, if needed
Definition: ode_base.h:252
-
double t_
time, initialized to zero
Definition: ode_base.h:236
+
double absjacdel_
absolute adjustment fraction for numerical Jacobian, if needed
Definition: ode_base.h:276
+
double t_
time, initialized to zero
Definition: ode_base.h:260
std::string ode_int_to_string(long i)
converts an integer into a string
Definition: ode_io.cc:23
void solve_fixed(double tint, double dt, bool extras=true)
integrates for a specified duration of independent variable without output
Definition: ode_base.cc:193
void ode_write(char const *fn, T *a, unsigned long n)
write an array to a binary file
Definition: ode_io.h:25
-
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:224
+
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:248
Go to the documentation of this file.
1 
-
84 #ifndef ODE_BASE_H_
-
85 #define ODE_BASE_H_
-
86 
-
87 #include <string>
-
88 #include <vector>
-
89 #include <cstdio>
-
90 #include <cstdlib>
-
91 #include <cmath>
-
92 
-
93 #include "ode_io.h"
-
94 #include "ode_util.h"
-
95 
-
97 
-
100 class OdeBase {
-
101 
-
102  public:
-
104 
-
108  OdeBase (unsigned long neq, bool need_jac);
-
110  virtual ~OdeBase ();
-
111 
-
112  //-------------------
-
113  //getters and setters
-
114 
-
116  const char *get_name () { return(name_.c_str()); }
-
118  const char *get_method () { return(method_.c_str()); }
-
120  const char *get_dirout () { return(dirout_.c_str()); }
-
122  bool get_quiet () { return(quiet_); }
-
124  bool get_silent_snap () { return(silent_snap_); }
-
126  unsigned long get_neq () { return(neq_); }
+
108 #ifndef ODE_BASE_H_
+
109 #define ODE_BASE_H_
+
110 
+
111 #include <string>
+
112 #include <vector>
+
113 #include <cstdio>
+
114 #include <cstdlib>
+
115 #include <cmath>
+
116 
+
117 #include "ode_io.h"
+
118 #include "ode_util.h"
+
119 
+
121 
+
124 class OdeBase {
+
125 
+
126  public:
128 
-
131  double get_t () { return(t_); }
-
133  double get_dt () { return(dt_); }
-
135  double *get_sol () { return(sol_); }
-
137  double get_sol (unsigned long i) { return(sol_[i]); }
-
139  long long get_nstep () { return(nstep_); }
-
141  long long get_neval () { return(neval_); }
-
143  long long get_icheck () { return(icheck_); }
-
145  long long get_nJac () { return(nJac_); }
-
146 
-
148  void set_sol (unsigned long i, double x) { sol_[i] = x; }
-
150  void set_sol (double *sol) { for(unsigned long i=0; i<neq_; i++) sol_[i] = sol[i]; }
-
152  void set_name (std::string name) { name_ = name; }
-
154  void set_name (const char *name) { name_ = name; }
-
156  void set_quiet (bool quiet) { quiet_ = quiet; }
-
158  void set_silent_snap (bool silent_snap) { silent_snap_ = silent_snap; }
-
160  void set_icheck (unsigned long icheck) { icheck_ = icheck; }
-
161 
-
162  //----------------
-
163  //solver functions
-
164 
-
166  void step (double dt, bool extra=true);
-
167 
-
169 
-
174  void solve_fixed (double tint, double dt, bool extras=true);
-
175 
-
177 
-
183  void solve_fixed (double tint, double dt, const char *dirout, int inter=1);
-
184 
-
186 
-
192  void solve_fixed (double tint, double dt, unsigned long nsnap, const char *dirout);
+
132  OdeBase (unsigned long neq, bool need_jac);
+
134  virtual ~OdeBase ();
+
135 
+
136  //-------------------
+
137  //getters and setters
+
138 
+
140  const char *get_name () { return(name_.c_str()); }
+
142  const char *get_method () { return(method_.c_str()); }
+
144  const char *get_dirout () { return(dirout_.c_str()); }
+
146  bool get_quiet () { return(quiet_); }
+
148  bool get_silent_snap () { return(silent_snap_); }
+
150  unsigned long get_neq () { return(neq_); }
+
152 
+
155  double get_t () { return(t_); }
+
157  double get_dt () { return(dt_); }
+
159  double *get_sol () { return(sol_); }
+
161  double get_sol (unsigned long i) { return(sol_[i]); }
+
163  long long get_nstep () { return(nstep_); }
+
165  long long get_neval () { return(neval_); }
+
167  long long get_icheck () { return(icheck_); }
+
169  long long get_nJac () { return(nJac_); }
+
170 
+
172  void set_sol (unsigned long i, double x) { sol_[i] = x; }
+
174  void set_sol (double *sol) { for(unsigned long i=0; i<neq_; i++) sol_[i] = sol[i]; }
+
176  void set_name (std::string name) { name_ = name; }
+
178  void set_name (const char *name) { name_ = name; }
+
180  void set_quiet (bool quiet) { quiet_ = quiet; }
+
182  void set_silent_snap (bool silent_snap) { silent_snap_ = silent_snap; }
+
184  void set_icheck (unsigned long icheck) { icheck_ = icheck; }
+
185 
+
186  //----------------
+
187  //solver functions
+
188 
+
190  void step (double dt, bool extra=true);
+
191 
193 
-
195 
-
201  void solve_fixed (double dt, double *tsnap, unsigned long nsnap, const char *dirout);
-
202 
-
204 
-
208  void reset (double t, double *sol);
-
209 
-
210  protected:
-
211 
-
213 
-
218  void solve_fixed_ (double tint, double dt, bool extra=true);
+
198  void solve_fixed (double tint, double dt, bool extras=true);
+
199 
+
201 
+
207  void solve_fixed (double tint, double dt, const char *dirout, int inter=1);
+
208 
+
210 
+
216  void solve_fixed (double tint, double dt, unsigned long nsnap, const char *dirout);
+
217 
219 
-
220  //----------------------
-
221  //basic solver variables
-
222 
-
224  std::string name_;
-
226  std::string method_;
-
228  std::string dirout_;
-
230  bool quiet_;
- -
234  unsigned long neq_;
-
236  double t_;
-
238  double dt_;
-
240  double *sol_;
-
242  long long nstep_;
-
244  long long neval_;
-
246  long long icheck_;
-
248  double **Jac_;
-
250  long long nJac_;
-
252  double absjacdel_;
-
254  double reljacdel_;
-
255 
-
256  //---------------------------
-
257  //essential virtual functions
-
258 
-
260 
-
265  virtual void ode_fun (double *solin, double *fout) = 0;
-
266 
-
268 
-
273  virtual void ode_jac (double *solin, double **Jout);
-
274 
-
276 
-
280  virtual void step_ (double dt) = 0;
-
281 
-
282  //---------------------------------------
-
283  //wrappers of essential virtual functions
+
225  void solve_fixed (double dt, double *tsnap, unsigned long nsnap, const char *dirout);
+
226 
+
228 
+
232  void reset (double t, double *sol);
+
233 
+
234  protected:
+
235 
+
237 
+
242  void solve_fixed_ (double tint, double dt, bool extra=true);
+
243 
+
244  //----------------------
+
245  //basic solver variables
+
246 
+
248  std::string name_;
+
250  std::string method_;
+
252  std::string dirout_;
+
254  bool quiet_;
+ +
258  unsigned long neq_;
+
260  double t_;
+
262  double dt_;
+
264  double *sol_;
+
266  long long nstep_;
+
268  long long neval_;
+
270  long long icheck_;
+
272  double **Jac_;
+
274  long long nJac_;
+
276  double absjacdel_;
+
278  double reljacdel_;
+
279 
+
280  //---------------------------
+
281  //essential virtual functions
+
282 
284 
-
286 
-
291  void ode_fun_ (double *solin, double *fout);
-
293 
-
298  void ode_jac_ (double *solin, double **Jout);
-
299 
-
300  //------
-
301  //extras
-
302 
-
304  virtual void before_solve ();
-
306 
-
309  virtual void after_step (double t);
-
311 
-
314  virtual void after_capture (double t);
-
316 
-
321  virtual void after_snap (std::string dirout, long isnap, double t);
-
322 
-
324  virtual void after_solve ();
-
325 
-
326  //--------------
-
327  //solver support
-
328 
+
289  virtual void ode_fun (double *solin, double *fout) = 0;
+
290 
+
292 
+
297  virtual void ode_jac (double *solin, double **Jout);
+
298 
+
300 
+
304  virtual void step_ (double dt) = 0;
+
305 
+
306  //---------------------------------------
+
307  //wrappers of essential virtual functions
+
308 
+
310 
+
315  void ode_fun_ (double *solin, double *fout);
+
317 
+
322  void ode_jac_ (double *solin, double **Jout);
+
323 
+
324  //------
+
325  //extras
+
326 
+
328  virtual void before_solve ();
330 
-
335  void snap (std::string dirout, long isnap, double tsnap);
-
336 
-
338 
-
343  bool solve_done (double dt, double tend);
-
344 
-
346  void check_sol_integrity ();
-
347 
+
333  virtual void after_step (double t);
+
335 
+
338  virtual void after_capture (double t);
+
340 
+
345  virtual void after_snap (std::string dirout, long isnap, double t);
+
346 
+
348  virtual void after_solve ();
349 
-
353  void check_pre_solve (double tint, double dt);
+
350  //--------------
+
351  //solver support
+
352 
354 
-
356 
-
361  void check_pre_snaps (double dt, double *tsnap, unsigned long nsnap);
+
359  void snap (std::string dirout, long isnap, double tsnap);
+
360 
362 
-
363  private:
-
364 
-
365  //flag for whether the Jacobian is being used
-
366  bool need_jac_;
-
367  //arrays for evaluating numerical jacobian
-
368  double *f_, *g_;
-
369 };
-
370 
-
371 #endif
+
367  bool solve_done (double dt, double tend);
+
368 
+
370  void check_sol_integrity ();
+
371 
+
373 
+
377  void check_pre_solve (double tint, double dt);
+
378 
+
380 
+
385  void check_pre_snaps (double dt, double *tsnap, unsigned long nsnap);
+
386 
+
387  private:
+
388 
+
389  //flag for whether the Jacobian is being used
+
390  bool need_jac_;
+
391  //arrays for evaluating numerical jacobian
+
392  double *f_, *g_;
+
393 };
+
394 
+
395 #endif
void check_pre_snaps(double dt, double *tsnap, unsigned long nsnap)
checks that snap times are monotonically increasing and > current time
Definition: ode_base.cc:170
void step(double dt, bool extra=true)
increments the step counter and the time, checks the solution integrity if needed,...
Definition: ode_base.cc:104
void check_sol_integrity()
checks solution for nans and infs, exiting the program if they're found
Definition: ode_base.cc:152
-
void set_sol(double *sol)
copies an array into the solution array
Definition: ode_base.h:150
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
void set_icheck(unsigned long icheck)
sets the number of steps after which the solution is checked for integrity
Definition: ode_base.h:160
-
long long neval_
function evaluation counter, must be incremented in step() when defined
Definition: ode_base.h:244
-
void set_silent_snap(bool silent_snap)
sets whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:158
-
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:248
-
double * get_sol()
gets the solution array
Definition: ode_base.h:135
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
void set_sol(double *sol)
copies an array into the solution array
Definition: ode_base.h:174
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
void set_icheck(unsigned long icheck)
sets the number of steps after which the solution is checked for integrity
Definition: ode_base.h:184
+
long long neval_
function evaluation counter, must be incremented in step() when defined
Definition: ode_base.h:268
+
void set_silent_snap(bool silent_snap)
sets whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:182
+
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:272
+
double * get_sol()
gets the solution array
Definition: ode_base.h:159
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
void ode_jac_(double *solin, double **Jout)
wrapper, calls ode_jac() and increments nJac;
Definition: ode_base.cc:96
bool solve_done(double dt, double tend)
checks if the solution is within a single time step of the end point
Definition: ode_base.cc:142
-
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:232
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
-
double dt_
time step is stored and updated during solves
Definition: ode_base.h:238
+
bool silent_snap_
whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:256
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
+
double dt_
time step is stored and updated during solves
Definition: ode_base.h:262
virtual void after_step(double t)
does any extra stuff after each step
Definition: ode_base.cc:326
virtual void after_snap(std::string dirout, long isnap, double t)
does any extra stuff after each snap
Definition: ode_base.cc:336
-
bool get_silent_snap()
gets whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:124
-
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:246
+
bool get_silent_snap()
gets whether to skip writing the solution vector to file when snapping
Definition: ode_base.h:148
+
long long icheck_
interval of steps after which to check for nans and infs (zero to ignore)
Definition: ode_base.h:270
void check_pre_solve(double tint, double dt)
checks that a solve can be performed with given tend and dt values
Definition: ode_base.cc:162
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
virtual void after_capture(double t)
does any extra stuff only when a step is captured
Definition: ode_base.cc:331
-
void set_sol(unsigned long i, double x)
sets an element of the solution array
Definition: ode_base.h:148
-
long long get_nstep()
gets the total number of steps taken
Definition: ode_base.h:139
-
Lowest base class for all solvers.
Definition: ode_base.h:100
-
const char * get_dirout()
gets output directory string if one has been set
Definition: ode_base.h:120
-
long long get_icheck()
gets the number of steps after which the solution is checked for integrity
Definition: ode_base.h:143
-
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:228
+
void set_sol(unsigned long i, double x)
sets an element of the solution array
Definition: ode_base.h:172
+
long long get_nstep()
gets the total number of steps taken
Definition: ode_base.h:163
+
Lowest base class for all solvers.
Definition: ode_base.h:124
+
const char * get_dirout()
gets output directory string if one has been set
Definition: ode_base.h:144
+
long long get_icheck()
gets the number of steps after which the solution is checked for integrity
Definition: ode_base.h:167
+
std::string dirout_
output directory if one is being used by a solver
Definition: ode_base.h:252
virtual void ode_jac(double *solin, double **Jout)
evaluates the system's Jacobian matrix, also in autonomous form, and can either be defined in a deriv...
Definition: ode_base.cc:58
-
double get_sol(unsigned long i)
gets an element of the solution array
Definition: ode_base.h:137
+
double get_sol(unsigned long i)
gets an element of the solution array
Definition: ode_base.h:161
virtual ~OdeBase()
destructs
Definition: ode_base.cc:45
-
void set_name(const char *name)
sets the name of the ODE system
Definition: ode_base.h:154
-
double get_t()
gets the current value of the independent variable
Definition: ode_base.h:131
-
bool quiet_
whether stuff should be printed during a solve
Definition: ode_base.h:230
-
unsigned long get_neq()
gets the size of the ODE system
Definition: ode_base.h:126
-
long long get_neval()
gets the total number of ODE system evaluation
Definition: ode_base.h:141
+
void set_name(const char *name)
sets the name of the ODE system
Definition: ode_base.h:178
+
double get_t()
gets the current value of the independent variable
Definition: ode_base.h:155
+
bool quiet_
whether stuff should be printed during a solve
Definition: ode_base.h:254
+
unsigned long get_neq()
gets the size of the ODE system
Definition: ode_base.h:150
+
long long get_neval()
gets the total number of ODE system evaluation
Definition: ode_base.h:165
void solve_fixed_(double tint, double dt, bool extra=true)
integrates without output or any counters, trackers, extra functions...
Definition: ode_base.cc:183
-
const char * get_name()
gets the name of the ODE system
Definition: ode_base.h:116
-
bool get_quiet()
gets the boolean determining if updates are printed during solves
Definition: ode_base.h:122
-
long long nstep_
number of time steps
Definition: ode_base.h:242
+
const char * get_name()
gets the name of the ODE system
Definition: ode_base.h:140
+
bool get_quiet()
gets the boolean determining if updates are printed during solves
Definition: ode_base.h:146
+
long long nstep_
number of time steps
Definition: ode_base.h:266
virtual void step_(double dt)=0
advances a single time step (without changing counters or the time) and must be defined in the derive...
virtual void ode_fun(double *solin, double *fout)=0
evaluates the system of ODEs in autonomous form and must be defined by a derived class
-
long long nJac_
counter for jacobian evaluations
Definition: ode_base.h:250
-
double reljacdel_
relative adjustment fraction for numerical Jacobian,`` if needed
Definition: ode_base.h:254
+
long long nJac_
counter for jacobian evaluations
Definition: ode_base.h:274
+
double reljacdel_
relative adjustment fraction for numerical Jacobian,`` if needed
Definition: ode_base.h:278
void reset(double t, double *sol)
reset to a specified time and initial condition array
Definition: ode_base.cc:315
virtual void after_solve()
does any extra stuff after completing a solve
Definition: ode_base.cc:343
OdeBase(unsigned long neq, bool need_jac)
constructs
Definition: ode_base.cc:5
-
const char * get_method()
gets the name of the solver/method
Definition: ode_base.h:118
+
const char * get_method()
gets the name of the solver/method
Definition: ode_base.h:142
void snap(std::string dirout, long isnap, double tsnap)
writes the current value of the solution to a binary file
Definition: ode_base.cc:123
-
double get_dt()
gets the most recent or current time step size
Definition: ode_base.h:133
-
long long get_nJac()
gets the total number of Jacobian evaluations performed
Definition: ode_base.h:145
+
double get_dt()
gets the most recent or current time step size
Definition: ode_base.h:157
+
long long get_nJac()
gets the total number of Jacobian evaluations performed
Definition: ode_base.h:169
virtual void before_solve()
does any extra stuff before starting a solve
Definition: ode_base.cc:324
-
void set_quiet(bool quiet)
sets the boolean determining if updates are printed during solves
Definition: ode_base.h:156
-
double absjacdel_
absolute adjustment fraction for numerical Jacobian, if needed
Definition: ode_base.h:252
-
double t_
time, initialized to zero
Definition: ode_base.h:236
+
void set_quiet(bool quiet)
sets the boolean determining if updates are printed during solves
Definition: ode_base.h:180
+
double absjacdel_
absolute adjustment fraction for numerical Jacobian, if needed
Definition: ode_base.h:276
+
double t_
time, initialized to zero
Definition: ode_base.h:260
void solve_fixed(double tint, double dt, bool extras=true)
integrates for a specified duration of independent variable without output
Definition: ode_base.cc:193
-
void set_name(std::string name)
sets the name of the ODE system
Definition: ode_base.h:152
-
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:224
+
void set_name(std::string name)
sets the name of the ODE system
Definition: ode_base.h:176
+
std::string name_
the "name" of the system, which is used for output
Definition: ode_base.h:248
OdeDoPri54(unsigned long neq)
constructs
Definition: ode_dopri_54.cc:5
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__dopri__54_8h.html b/docs/ode__dopri__54_8h.html index ea19cc0..1000f7b 100644 --- a/docs/ode__dopri__54_8h.html +++ b/docs/ode__dopri__54_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__dopri__54_8h_source.html b/docs/ode__dopri__54_8h_source.html index 8de6806..00a3fa4 100644 --- a/docs/ode__dopri__54_8h_source.html +++ b/docs/ode__dopri__54_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__dopri__87_8cc.html b/docs/ode__dopri__87_8cc.html index 9ac26d4..09462c3 100644 --- a/docs/ode__dopri__87_8cc.html +++ b/docs/ode__dopri__87_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__dopri__87_8cc_source.html b/docs/ode__dopri__87_8cc_source.html index cc93b80..3b8ecbc 100644 --- a/docs/ode__dopri__87_8cc_source.html +++ b/docs/ode__dopri__87_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -241,10 +241,10 @@
150 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__dopri__87_8h.html b/docs/ode__dopri__87_8h.html index caeae40..994e2a5 100644 --- a/docs/ode__dopri__87_8h.html +++ b/docs/ode__dopri__87_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__dopri__87_8h_source.html b/docs/ode__dopri__87_8h_source.html index aefc4a7..cfc3653 100644 --- a/docs/ode__dopri__87_8h_source.html +++ b/docs/ode__dopri__87_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__embedded_8cc.html b/docs/ode__embedded_8cc.html index a270664..f034d59 100644 --- a/docs/ode__embedded_8cc.html +++ b/docs/ode__embedded_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__embedded_8cc_source.html b/docs/ode__embedded_8cc_source.html index 879bec3..1889d9f 100644 --- a/docs/ode__embedded_8cc_source.html +++ b/docs/ode__embedded_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -163,10 +163,10 @@
virtual bool is_rejected()
simply returns isrej
Definition: ode_embedded.cc:63
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
double facmax_
maximum allowable fraction change in time step
Definition: ode_embedded.h:58
-
double dt_
time step is stored and updated during solves
Definition: ode_base.h:238
+
double dt_
time step is stored and updated during solves
Definition: ode_base.h:262
double facopt(double err)
calculates factor for "optimal" next time step
Definition: ode_embedded.cc:42
virtual double dt_adapt()
simply returns dtopt
Definition: ode_embedded.cc:68
double facmin_
minimum allowable fraction change in time step
Definition: ode_embedded.h:56
diff --git a/docs/ode__embedded_8h.html b/docs/ode__embedded_8h.html index c5bbeb1..6df9069 100644 --- a/docs/ode__embedded_8h.html +++ b/docs/ode__embedded_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__embedded_8h_source.html b/docs/ode__embedded_8h_source.html index b546053..f665d1d 100644 --- a/docs/ode__embedded_8h_source.html +++ b/docs/ode__embedded_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__erk_8cc.html b/docs/ode__erk_8cc.html index ede9499..2d2675d 100644 --- a/docs/ode__erk_8cc.html +++ b/docs/ode__erk_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__erk_8cc_source.html b/docs/ode__erk_8cc_source.html index 67a2881..0686dd4 100644 --- a/docs/ode__erk_8cc_source.html +++ b/docs/ode__erk_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__erk_8h.html b/docs/ode__erk_8h.html index b329f17..3eb1ec9 100644 --- a/docs/ode__erk_8h.html +++ b/docs/ode__erk_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__erk_8h_source.html b/docs/ode__erk_8h_source.html index a3bb907..ecf7385 100644 --- a/docs/ode__erk_8h_source.html +++ b/docs/ode__erk_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__euler_8cc.html b/docs/ode__euler_8cc.html index e860487..57b9e09 100644 --- a/docs/ode__euler_8cc.html +++ b/docs/ode__euler_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__euler_8cc_source.html b/docs/ode__euler_8cc_source.html index 71abde0..5570b65 100644 --- a/docs/ode__euler_8cc_source.html +++ b/docs/ode__euler_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -111,9 +111,9 @@
20 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
OdeEuler(unsigned long neq)
constructs
Definition: ode_euler.cc:5
Base class implementing solver functions with adaptive time steps.
Definition: ode_adaptive.h:28
diff --git a/docs/ode__euler_8h.html b/docs/ode__euler_8h.html index 7a2fcb0..e241822 100644 --- a/docs/ode__euler_8h.html +++ b/docs/ode__euler_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__euler_8h_source.html b/docs/ode__euler_8h_source.html index acc72ff..e21aa32 100644 --- a/docs/ode__euler_8h_source.html +++ b/docs/ode__euler_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__gauss__6_8cc.html b/docs/ode__gauss__6_8cc.html index 6f73b7b..1dcf8d1 100644 --- a/docs/ode__gauss__6_8cc.html +++ b/docs/ode__gauss__6_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__gauss__6_8cc_source.html b/docs/ode__gauss__6_8cc_source.html index ac6cb14..e2f31fa 100644 --- a/docs/ode__gauss__6_8cc_source.html +++ b/docs/ode__gauss__6_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -190,15 +190,15 @@
double ** Jac_
pointer to the solver's Jacobian matrix
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
Provides a large vector containing the slope values of all stages with pointers to each of the indivi...
Definition: ode_irk.h:7
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
double ** a
pointer to tableau coefficients
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
OdeGauss6(unsigned long neq)
constructs
Definition: ode_gauss_6.cc:58
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
int nk_
number of stages or k vectors
diff --git a/docs/ode__gauss__6_8h.html b/docs/ode__gauss__6_8h.html index 6c28ed0..3255d63 100644 --- a/docs/ode__gauss__6_8h.html +++ b/docs/ode__gauss__6_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__gauss__6_8h_source.html b/docs/ode__gauss__6_8h_source.html index d3b034e..c49fec1 100644 --- a/docs/ode__gauss__6_8h_source.html +++ b/docs/ode__gauss__6_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__geng__5_8cc.html b/docs/ode__geng__5_8cc.html index aebdfa0..023bde6 100644 --- a/docs/ode__geng__5_8cc.html +++ b/docs/ode__geng__5_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__geng__5_8cc_source.html b/docs/ode__geng__5_8cc_source.html index e4042ae..446c435 100644 --- a/docs/ode__geng__5_8cc_source.html +++ b/docs/ode__geng__5_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -189,14 +189,14 @@
double ** Jac_
pointer to the solver's Jacobian matrix
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
Provides a large vector containing the slope values of all stages with pointers to each of the indivi...
Definition: ode_irk.h:7
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
double ** a
pointer to tableau coefficients
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
int nk_
number of stages or k vectors
diff --git a/docs/ode__geng__5_8h.html b/docs/ode__geng__5_8h.html index dddaab4..5c88e96 100644 --- a/docs/ode__geng__5_8h.html +++ b/docs/ode__geng__5_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__geng__5_8h_source.html b/docs/ode__geng__5_8h_source.html index 82d80c9..16c1fd8 100644 --- a/docs/ode__geng__5_8h_source.html +++ b/docs/ode__geng__5_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__grk4a_8cc.html b/docs/ode__grk4a_8cc.html index 2a27733..947dd4b 100644 --- a/docs/ode__grk4a_8cc.html +++ b/docs/ode__grk4a_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__grk4a_8cc_source.html b/docs/ode__grk4a_8cc_source.html index 350508b..9c184ac 100644 --- a/docs/ode__grk4a_8cc_source.html +++ b/docs/ode__grk4a_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -196,11 +196,11 @@
105 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:248
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:272
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
void ode_jac_(double *solin, double **Jout)
wrapper, calls ode_jac() and increments nJac;
Definition: ode_base.cc:96
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class for Rosenbrock methods.
Definition: ode_rosenbrock.h:9
OdeGRK4A(unsigned long neq)
constructs
Definition: ode_grk4a.cc:5
diff --git a/docs/ode__grk4a_8h.html b/docs/ode__grk4a_8h.html index 5e354f9..0652d6b 100644 --- a/docs/ode__grk4a_8h.html +++ b/docs/ode__grk4a_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__grk4a_8h_source.html b/docs/ode__grk4a_8h_source.html index 5052452..14c2935 100644 --- a/docs/ode__grk4a_8h_source.html +++ b/docs/ode__grk4a_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__io_8cc.html b/docs/ode__io_8cc.html index a9411af..6adc074 100644 --- a/docs/ode__io_8cc.html +++ b/docs/ode__io_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__io_8cc_source.html b/docs/ode__io_8cc_source.html index fb217ce..3bbe181 100644 --- a/docs/ode__io_8cc_source.html +++ b/docs/ode__io_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__io_8h.html b/docs/ode__io_8h.html index 79323a9..2a3a75e 100644 --- a/docs/ode__io_8h.html +++ b/docs/ode__io_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__io_8h_source.html b/docs/ode__io_8h_source.html index e98c72e..86de73a 100644 --- a/docs/ode__io_8h_source.html +++ b/docs/ode__io_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__irk_8cc.html b/docs/ode__irk_8cc.html index 817ffcf..7e9f941 100644 --- a/docs/ode__irk_8cc.html +++ b/docs/ode__irk_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__irk_8cc_source.html b/docs/ode__irk_8cc_source.html index 6c0981b..352a86a 100644 --- a/docs/ode__irk_8cc_source.html +++ b/docs/ode__irk_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__irk_8h.html b/docs/ode__irk_8h.html index 58c13f9..275f082 100644 --- a/docs/ode__irk_8h.html +++ b/docs/ode__irk_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__irk_8h_source.html b/docs/ode__irk_8h_source.html index 6f2e4dc..2a045c8 100644 --- a/docs/ode__irk_8h_source.html +++ b/docs/ode__irk_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__linalg_8cc.html b/docs/ode__linalg_8cc.html index 6b5d8c2..b991947 100644 --- a/docs/ode__linalg_8cc.html +++ b/docs/ode__linalg_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__linalg_8cc_source.html b/docs/ode__linalg_8cc_source.html index 49b071b..5f28eb3 100644 --- a/docs/ode__linalg_8cc_source.html +++ b/docs/ode__linalg_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__linalg_8h.html b/docs/ode__linalg_8h.html index 49b88ed..d6d25a3 100644 --- a/docs/ode__linalg_8h.html +++ b/docs/ode__linalg_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__linalg_8h_source.html b/docs/ode__linalg_8h_source.html index 1bee4cc..3a752df 100644 --- a/docs/ode__linalg_8h_source.html +++ b/docs/ode__linalg_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__lobatto__iiic__6_8cc.html b/docs/ode__lobatto__iiic__6_8cc.html index 563e655..36fcc2e 100644 --- a/docs/ode__lobatto__iiic__6_8cc.html +++ b/docs/ode__lobatto__iiic__6_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__lobatto__iiic__6_8cc_source.html b/docs/ode__lobatto__iiic__6_8cc_source.html index 20f5ba5..b00442d 100644 --- a/docs/ode__lobatto__iiic__6_8cc_source.html +++ b/docs/ode__lobatto__iiic__6_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -193,14 +193,14 @@
OdeLobattoIIIC6(unsigned long neq)
constructs
double ** Jac_
pointer to the solver's Jacobian matrix
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
Provides a large vector containing the slope values of all stages with pointers to each of the indivi...
Definition: ode_irk.h:7
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
double ** a
pointer to tableau coefficients
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
int nk_
number of stages or k vectors
~OdeLobattoIIIC6()
destructs
diff --git a/docs/ode__lobatto__iiic__6_8h.html b/docs/ode__lobatto__iiic__6_8h.html index 7d92475..85fa983 100644 --- a/docs/ode__lobatto__iiic__6_8h.html +++ b/docs/ode__lobatto__iiic__6_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__lobatto__iiic__6_8h_source.html b/docs/ode__lobatto__iiic__6_8h_source.html index 5adf1d3..c9beb9b 100644 --- a/docs/ode__lobatto__iiic__6_8h_source.html +++ b/docs/ode__lobatto__iiic__6_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__newton_8cc.html b/docs/ode__newton_8cc.html index 25242f2..96aaab7 100644 --- a/docs/ode__newton_8cc.html +++ b/docs/ode__newton_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__newton_8cc_source.html b/docs/ode__newton_8cc_source.html index 7706692..54a30d7 100644 --- a/docs/ode__newton_8cc_source.html +++ b/docs/ode__newton_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__newton_8h.html b/docs/ode__newton_8h.html index de2c099..0f8af5f 100644 --- a/docs/ode__newton_8h.html +++ b/docs/ode__newton_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__newton_8h_source.html b/docs/ode__newton_8h_source.html index a062d62..8b36978 100644 --- a/docs/ode__newton_8h_source.html +++ b/docs/ode__newton_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -168,7 +168,7 @@
111  void JLU (double *x);
112  //wrapper around LU solving routine for counting solves
113  void solve_LU_(double **LU, int *p, double *b, int n, double *out);
-
114  //function for checking solution integrity (nans and infs)
+
114  //function for checking solution integrity (can't have NAN or INFINITY)
115  int check_integrity (double *x);
116 };
117 
diff --git a/docs/ode__newton__bridge_8h.html b/docs/ode__newton__bridge_8h.html index 05bae14..ea457cc 100644 --- a/docs/ode__newton__bridge_8h.html +++ b/docs/ode__newton__bridge_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__newton__bridge_8h_source.html b/docs/ode__newton__bridge_8h_source.html index 69b1963..f14042b 100644 --- a/docs/ode__newton__bridge_8h_source.html +++ b/docs/ode__newton__bridge_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__radau__iia__5_8cc.html b/docs/ode__radau__iia__5_8cc.html index 562e259..348282c 100644 --- a/docs/ode__radau__iia__5_8cc.html +++ b/docs/ode__radau__iia__5_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__radau__iia__5_8cc_source.html b/docs/ode__radau__iia__5_8cc_source.html index b3887f9..de8840b 100644 --- a/docs/ode__radau__iia__5_8cc_source.html +++ b/docs/ode__radau__iia__5_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -190,15 +190,15 @@
double ** Jac_
pointer to the solver's Jacobian matrix
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
Provides a large vector containing the slope values of all stages with pointers to each of the indivi...
Definition: ode_irk.h:7
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
double ** a
pointer to tableau coefficients
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
Nonlinear system solver for OdeRadauIIA5.
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
int nk_
number of stages or k vectors
void jac(double *solin, double **Jout)
wrapper around Jacobian evaluation function
diff --git a/docs/ode__radau__iia__5_8h.html b/docs/ode__radau__iia__5_8h.html index c93ca7a..d973bc9 100644 --- a/docs/ode__radau__iia__5_8h.html +++ b/docs/ode__radau__iia__5_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__radau__iia__5_8h_source.html b/docs/ode__radau__iia__5_8h_source.html index ca703cc..c95897b 100644 --- a/docs/ode__radau__iia__5_8h_source.html +++ b/docs/ode__radau__iia__5_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk_8cc.html b/docs/ode__rk_8cc.html index be3f366..9d3efb0 100644 --- a/docs/ode__rk_8cc.html +++ b/docs/ode__rk_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk_8cc_source.html b/docs/ode__rk_8cc_source.html index d67d7af..30386e2 100644 --- a/docs/ode__rk_8cc_source.html +++ b/docs/ode__rk_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk_8h.html b/docs/ode__rk_8h.html index 69dc47e..2c6c785 100644 --- a/docs/ode__rk_8h.html +++ b/docs/ode__rk_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk_8h_source.html b/docs/ode__rk_8h_source.html index acdc1fc..9a066b6 100644 --- a/docs/ode__rk_8h_source.html +++ b/docs/ode__rk_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__43_8cc.html b/docs/ode__rk__43_8cc.html index 0f63e41..b2f12c9 100644 --- a/docs/ode__rk__43_8cc.html +++ b/docs/ode__rk__43_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__43_8cc_source.html b/docs/ode__rk__43_8cc_source.html index 3586609..3064562 100644 --- a/docs/ode__rk__43_8cc_source.html +++ b/docs/ode__rk__43_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -151,9 +151,9 @@
60 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__rk__43_8h.html b/docs/ode__rk__43_8h.html index d29ba18..c71e2f7 100644 --- a/docs/ode__rk__43_8h.html +++ b/docs/ode__rk__43_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__43_8h_source.html b/docs/ode__rk__43_8h_source.html index 4db5451..c53a984 100644 --- a/docs/ode__rk__43_8h_source.html +++ b/docs/ode__rk__43_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__4_8cc.html b/docs/ode__rk__4_8cc.html index e0ad70e..95e7ed5 100644 --- a/docs/ode__rk__4_8cc.html +++ b/docs/ode__rk__4_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__4_8cc_source.html b/docs/ode__rk__4_8cc_source.html index 61b1b60..4587420 100644 --- a/docs/ode__rk__4_8cc_source.html +++ b/docs/ode__rk__4_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -133,10 +133,10 @@
42 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
OdeRK4(unsigned long neq)
constructs
Definition: ode_rk_4.cc:5
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__rk__4_8h.html b/docs/ode__rk__4_8h.html index 535c17a..8b462c0 100644 --- a/docs/ode__rk__4_8h.html +++ b/docs/ode__rk__4_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rk__4_8h_source.html b/docs/ode__rk__4_8h_source.html index 0ddc5ea..a64ad0d 100644 --- a/docs/ode__rk__4_8h_source.html +++ b/docs/ode__rk__4_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkck_8cc.html b/docs/ode__rkck_8cc.html index 5fc3f86..fb94b4b 100644 --- a/docs/ode__rkck_8cc.html +++ b/docs/ode__rkck_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkck_8cc_source.html b/docs/ode__rkck_8cc_source.html index d55add2..40cd3f8 100644 --- a/docs/ode__rkck_8cc_source.html +++ b/docs/ode__rkck_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -164,10 +164,10 @@
73 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
OdeRKCK(unsigned long neq)
constructs
Definition: ode_rkck.cc:5
diff --git a/docs/ode__rkck_8h.html b/docs/ode__rkck_8h.html index 0493c3e..3625534 100644 --- a/docs/ode__rkck_8h.html +++ b/docs/ode__rkck_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkck_8h_source.html b/docs/ode__rkck_8h_source.html index 198f01e..007dd88 100644 --- a/docs/ode__rkck_8h_source.html +++ b/docs/ode__rkck_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkf__32_8cc.html b/docs/ode__rkf__32_8cc.html index f83b7eb..df5dbd1 100644 --- a/docs/ode__rkf__32_8cc.html +++ b/docs/ode__rkf__32_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkf__32_8cc_source.html b/docs/ode__rkf__32_8cc_source.html index 03968af..4a6e63b 100644 --- a/docs/ode__rkf__32_8cc_source.html +++ b/docs/ode__rkf__32_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -129,9 +129,9 @@
38 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
diff --git a/docs/ode__rkf__32_8h.html b/docs/ode__rkf__32_8h.html index d6a3fd4..9579a1a 100644 --- a/docs/ode__rkf__32_8h.html +++ b/docs/ode__rkf__32_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rkf__32_8h_source.html b/docs/ode__rkf__32_8h_source.html index b446aa8..0aa538e 100644 --- a/docs/ode__rkf__32_8h_source.html +++ b/docs/ode__rkf__32_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rosenbrock_8cc.html b/docs/ode__rosenbrock_8cc.html index 70bf3a3..6924597 100644 --- a/docs/ode__rosenbrock_8cc.html +++ b/docs/ode__rosenbrock_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rosenbrock_8cc_source.html b/docs/ode__rosenbrock_8cc_source.html index 2682b08..89be374 100644 --- a/docs/ode__rosenbrock_8cc_source.html +++ b/docs/ode__rosenbrock_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rosenbrock_8h.html b/docs/ode__rosenbrock_8h.html index 8675692..1c13faf 100644 --- a/docs/ode__rosenbrock_8h.html +++ b/docs/ode__rosenbrock_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__rosenbrock_8h_source.html b/docs/ode__rosenbrock_8h_source.html index f27c4c1..b0fac45 100644 --- a/docs/ode__rosenbrock_8h_source.html +++ b/docs/ode__rosenbrock_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__row6a_8cc.html b/docs/ode__row6a_8cc.html index bf6216d..ed3e4d4 100644 --- a/docs/ode__row6a_8cc.html +++ b/docs/ode__row6a_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__row6a_8cc_source.html b/docs/ode__row6a_8cc_source.html index 9562b94..8633a28 100644 --- a/docs/ode__row6a_8cc_source.html +++ b/docs/ode__row6a_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -226,12 +226,12 @@
135 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
OdeROW6A(unsigned long neq)
constructs
Definition: ode_row6a.cc:5
-
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:248
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:272
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
void ode_jac_(double *solin, double **Jout)
wrapper, calls ode_jac() and increments nJac;
Definition: ode_base.cc:96
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class for Rosenbrock methods.
Definition: ode_rosenbrock.h:9
diff --git a/docs/ode__row6a_8h.html b/docs/ode__row6a_8h.html index 72c4d36..8931daa 100644 --- a/docs/ode__row6a_8h.html +++ b/docs/ode__row6a_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__row6a_8h_source.html b/docs/ode__row6a_8h_source.html index 0ae2ad2..700d368 100644 --- a/docs/ode__row6a_8h_source.html +++ b/docs/ode__row6a_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__sdirk__43_8cc.html b/docs/ode__sdirk__43_8cc.html index f0b7900..176a23a 100644 --- a/docs/ode__sdirk__43_8cc.html +++ b/docs/ode__sdirk__43_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__sdirk__43_8cc_source.html b/docs/ode__sdirk__43_8cc_source.html index e85183e..0c49a0e 100644 --- a/docs/ode__sdirk__43_8cc_source.html +++ b/docs/ode__sdirk__43_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -208,14 +208,14 @@
double ** Jac_
pointer to the solver's Jacobian matrix
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
unsigned long neq_
ODE system size.
double * sol_
pointer to the solver's solution vector
-
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:248
+
double ** Jac_
storage for the ODE system's Jacobian matrix, only allocated for the methods that need it
Definition: ode_base.h:272
bool get_modified()
gets whether modified Newtion's is being used
Definition: ode_newton.h:43
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
void ode_jac_(double *solin, double **Jout)
wrapper, calls ode_jac() and increments nJac;
Definition: ode_base.cc:96
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
void set_modified(bool modified)
sets whether modified Newtion's is being used
Definition: ode_newton.h:54
void set_ignore_JLU(bool ignore_JLU)
sets whether no LU decompositions should be done
Definition: ode_newton.h:56
double gam
diagonal tableau coefficient
diff --git a/docs/ode__sdirk__43_8h.html b/docs/ode__sdirk__43_8h.html index 5f4dc36..a25e830 100644 --- a/docs/ode__sdirk__43_8h.html +++ b/docs/ode__sdirk__43_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__sdirk__43_8h_source.html b/docs/ode__sdirk__43_8h_source.html index a7a4b75..09bd217 100644 --- a/docs/ode__sdirk__43_8h_source.html +++ b/docs/ode__sdirk__43_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__ssp__3_8cc.html b/docs/ode__ssp__3_8cc.html index 9837359..60cb5fc 100644 --- a/docs/ode__ssp__3_8cc.html +++ b/docs/ode__ssp__3_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__ssp__3_8cc_source.html b/docs/ode__ssp__3_8cc_source.html index b441285..ec5ef86 100644 --- a/docs/ode__ssp__3_8cc_source.html +++ b/docs/ode__ssp__3_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -127,9 +127,9 @@
OdeSsp3(unsigned long neq)
constructs
Definition: ode_ssp_3.cc:5
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__ssp__3_8h.html b/docs/ode__ssp__3_8h.html index 2e4c603..0ab67cd 100644 --- a/docs/ode__ssp__3_8h.html +++ b/docs/ode__ssp__3_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__ssp__3_8h_source.html b/docs/ode__ssp__3_8h_source.html index 567f8d8..d95680a 100644 --- a/docs/ode__ssp__3_8h_source.html +++ b/docs/ode__ssp__3_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__trapz_8cc.html b/docs/ode__trapz_8cc.html index 5f9a064..873faf6 100644 --- a/docs/ode__trapz_8cc.html +++ b/docs/ode__trapz_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__trapz_8cc_source.html b/docs/ode__trapz_8cc_source.html index 1bd8b4a..069324f 100644 --- a/docs/ode__trapz_8cc_source.html +++ b/docs/ode__trapz_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -121,9 +121,9 @@ -
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__trapz_8h.html b/docs/ode__trapz_8h.html index 76ad555..5961f6a 100644 --- a/docs/ode__trapz_8h.html +++ b/docs/ode__trapz_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__trapz_8h_source.html b/docs/ode__trapz_8h_source.html index 5b5a9aa..cd002df 100644 --- a/docs/ode__trapz_8h_source.html +++ b/docs/ode__trapz_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__util_8cc.html b/docs/ode__util_8cc.html index b9894a0..cd5b66d 100644 --- a/docs/ode__util_8cc.html +++ b/docs/ode__util_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__util_8cc_source.html b/docs/ode__util_8cc_source.html index aa659e6..990ddfd 100644 --- a/docs/ode__util_8cc_source.html +++ b/docs/ode__util_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__util_8h.html b/docs/ode__util_8h.html index 7c2cef2..b2c9fbf 100644 --- a/docs/ode__util_8h.html +++ b/docs/ode__util_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__util_8h_source.html b/docs/ode__util_8h_source.html index 88ec405..036dd5d 100644 --- a/docs/ode__util_8h_source.html +++ b/docs/ode__util_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__65_8cc.html b/docs/ode__vern__65_8cc.html index f7a1a39..9842e38 100644 --- a/docs/ode__vern__65_8cc.html +++ b/docs/ode__vern__65_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__65_8cc_source.html b/docs/ode__vern__65_8cc_source.html index 885241e..1664347 100644 --- a/docs/ode__vern__65_8cc_source.html +++ b/docs/ode__vern__65_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -245,9 +245,9 @@
154 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__vern__65_8h.html b/docs/ode__vern__65_8h.html index 3a58d49..96c9fec 100644 --- a/docs/ode__vern__65_8h.html +++ b/docs/ode__vern__65_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__65_8h_source.html b/docs/ode__vern__65_8h_source.html index 0ea78b9..72f01af 100644 --- a/docs/ode__vern__65_8h_source.html +++ b/docs/ode__vern__65_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__76_8cc.html b/docs/ode__vern__76_8cc.html index 49786fc..c378f19 100644 --- a/docs/ode__vern__76_8cc.html +++ b/docs/ode__vern__76_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__76_8cc_source.html b/docs/ode__vern__76_8cc_source.html index 0a8df3a..c9f3abe 100644 --- a/docs/ode__vern__76_8cc_source.html +++ b/docs/ode__vern__76_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -266,10 +266,10 @@
175 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
OdeVern76(unsigned long neq)
constructs
Definition: ode_vern_76.cc:5
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__vern__76_8h.html b/docs/ode__vern__76_8h.html index 1835bdc..0dcfc72 100644 --- a/docs/ode__vern__76_8h.html +++ b/docs/ode__vern__76_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__76_8h_source.html b/docs/ode__vern__76_8h_source.html index 6f7af65..80d4944 100644 --- a/docs/ode__vern__76_8h_source.html +++ b/docs/ode__vern__76_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__98_8cc.html b/docs/ode__vern__98_8cc.html index 1da5490..a914632 100644 --- a/docs/ode__vern__98_8cc.html +++ b/docs/ode__vern__98_8cc.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__98_8cc_source.html b/docs/ode__vern__98_8cc_source.html index ca3676e..2069082 100644 --- a/docs/ode__vern__98_8cc_source.html +++ b/docs/ode__vern__98_8cc_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
@@ -384,9 +384,9 @@
293 }
-
double * sol_
array for the solution, changing over time
Definition: ode_base.h:240
-
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:234
-
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:226
+
double * sol_
array for the solution, changing over time
Definition: ode_base.h:264
+
unsigned long neq_
number of equations in the system of ODEs
Definition: ode_base.h:258
+
std::string method_
the "name" of the solver/method, as in "Euler" or "RK4"
Definition: ode_base.h:250
double * soltemp_
temporary solution vector
Definition: ode_erk.h:20
void ode_fun_(double *solin, double *fout)
wrapper, calls ode_fun() and increases the neval counter by one
Definition: ode_base.cc:88
Base class providing space for temporary solutions moving through RK stages.
Definition: ode_erk.h:7
diff --git a/docs/ode__vern__98_8h.html b/docs/ode__vern__98_8h.html index 3369592..6917ac2 100644 --- a/docs/ode__vern__98_8h.html +++ b/docs/ode__vern__98_8h.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/docs/ode__vern__98_8h_source.html b/docs/ode__vern__98_8h_source.html index 47c6392..d875f76 100644 --- a/docs/ode__vern__98_8h_source.html +++ b/docs/ode__vern__98_8h_source.html @@ -31,7 +31,7 @@
libode
-
A variety of explicit and implicit single-step ODE integrators as C++ classes
+
Easy to compile, fast ODE integrators as C++ classes
diff --git a/src/ode_base.h b/src/ode_base.h index 365da84..549822e 100644 --- a/src/ode_base.h +++ b/src/ode_base.h @@ -2,8 +2,6 @@ /*! \mainpage libode -Easy to compile, fast ODE integrators as C++ classes - `libode` is a library of C++ classes for solving systems of ordinary differential equations in autonomous form. All of the solvers are single-step, Runge-Kutta-like methods. There are explicit, adaptive solvers up to the ninth order. The repository also includes Rosenbrock methods, a singly-diagonal implicit Runge-Kutta (SDIRK) method, and several fully implicit Runge-Kutta methods. However, only a few of the implicit methods have solid adaptive time steppers at this point. With the current collection of solvers and features, `libode` is well suited to any non-stiff system and to stiff systems that are tightly coupled and have a known Jacobian (ones that don't require sparse or banded matrix routines). The classes were originally styled after [Chris Rycroft](https://people.seas.harvard.edu/~chr/)'s [example classes](https://github.com/chr1shr/am225_examples/tree/master/1a_ode_solvers). Their structure makes it easy to build a templated integrator on top of an arbitrary solver class and easily switch the solver/method. Implicit methods can be given a function for the ODE system's Jacobian or, if none is provided, the Jacobian is estimated using finite differences. @@ -12,6 +10,32 @@ Several of the solvers and much more detail on the methods can be found in these + Hairer, E., Nørsett, S. P. & Wanner, G. Solving Ordinary Differential Equations I: Nonstiff Problems. (Springer-Verlag, 1987). + Hairer, E. & Wanner, G. Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems. (Springer, 1996). +The table below lists all the solvers and gives some basic information about them. Papers and/or links to the derivation or original publication of the methods are often copied in the headers for the solver classes and included in the documentation. Some work still needs to be done to make the implicit methods genuinely useful, and a list of things to implement is in the `todo.txt` file. + + +
Method Class Name Header File (ex/im)plicit adaptive? stages order stability +
Forward Euler`OdeEuler``ode_euler.h`explicitno11 +
Trapezoidal Rule`OdeTrapz``ode_trapz.h`explicitno22 +
Strong Stability-Preserving, Order 3`OdeSsp3``ode_ssp_3.h`explicitno33 +
Runge-Kutta-Fehlberg (3)2`OdeRKF32``ode_rkf_32.h`explicityes33 +
RK4`OdeRK4``ode_rk_4.h`explicitno44 +
Runge-Kutta (4)3`OdeRK43``ode_rk_43.h`explicityes54 +
Cash-Karp`OdeRKCK``ode_rkck.h`explicityes65 +
Dormand-Prince (5)4`OdeDoPri54``ode_dopri_54.h`explicityes75 +
Jim Verner's "most efficent" (6)5`OdeVern65``ode_vern_65.h`explicityes96 +
Jim Verner's "most efficent" (7)6`OdeVern76``ode_vern_76.h`explicityes107 +
Dormand-Prince (8)7`OdeDoPri87``ode_dopri_87.h`explicityes138 +
Jim Verner's "most efficent" (9)8`OdeVern98``ode_vern_98.h`explicityes169 +
Rosenbrock 4(3)`OdeGRK4A``ode_grk4a.h`implicityes44A +
Rosenbrock 6`OdeROW6A``ode_row6a.h`implicitno66A +
Backward Euler`OdeBackwardEuler``ode_backward_euler.h`implicitno11L +
Gauss 6th Order`OdeGauss6``ode_gauss_6.h`implicitnot yet36A +
Lobatto IIIC 6th Order`OdeLobattoIIIC6``ode_lobatto_iiic_6.h`implicitnot yet46L +
Radau IIA 5th Order`OdeRadauIIA5``ode_radau_iia_5.h`implicitnot yet35L +
Geng's Symplectic 5th Order`OdeGeng5``ode_geng_5.h`implicitno35A? +
SDIRK 4(3)`OdeSDIRK43``ode_sdirk_43.h`implicityes44L +
+ \section sec_compiling Compiling \subsection sec_compiling_short Short Instructions @@ -72,13 +96,13 @@ If these functions aren't enough, you could always write your own loop calling t \subsection subsec_padapt Flexibly Adapt the Time Step -The adaptive solvers automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with any of the solvers. If the virtual function `dt_adapt()` is overridden, it will be used to select the time step in the `solve_adaptive()` functions. +Some of the solvers have built-in adaptive time steppers. They automatically choose time steps by comparing the solution for a single step with that of an embedded, lower order solution for the step and computing an error estimate. The algorithm for this is well described in the books referenced above. If, however, there is another way that the time step should be chosen for a system, a new selection algorithm can be used with **any** of the solvers. If the virtual function `dt_adapt()` is overridden, it will be used to select the time step in the `solve_adaptive()` functions. Rejecting an adaptive step is easy. During an adaptive solve, the virtual `is_rejected()` function is called after every step. If it returns `true`, the step is rejected. If it returns `false`, the step is accepted. Either way, `dt_adapt()` computes the next time step size and the solver proceeds. So, at minimum, an adaptive solver with time step rejection needs to have its `dt_adapt()` and `is_rejected()` functions implemented. The embedded Runge-Kutta methods have these functions built in, but they can be overridden. If it's easier to compute the next time step and determine whether the step is rejected all at once, the virtual `adapt()` function can be implemented. It should store the next time step and store a boolean for rejection. Then `dt_adapt()` and `is_rejected()` simply return those stored values. This is how the embedded Runge-Kutta methods are structured because the same information determines the next step size and rejection/acceptance of the current step. -This structure is useful because allows the step size to be chosen any way you choose. Specifically though, it has been used to set the time step based on the stability threshold of PDE discretizations. For example, the time step of explicit methods for PDEs might be limited by the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using `solve_adaptive()`, can provide huge speed boosts. +The point is to make time step selection totally flexible if the embedded Runge-Kutta algorithm isn't suitable. For example, this flexibility has been used to set the time step based on stability thresholds of PDE discretizations like the CFL condition for advection or the von Neumann condition for simple diffusion schemes. Prescribing the adaptive time step based on these conditions, then using `solve_adaptive()`, can provide huge speed boosts. */ #ifndef ODE_BASE_H_ @@ -228,7 +252,7 @@ class OdeBase { std::string dirout_; //!whether stuff should be printed during a solve bool quiet_; - //!whether to skip writing the solution vector to file when snapping + //!whether to skip writing the solution vector to file when snapping but still execute after_snap() bool silent_snap_; //!number of equations in the system of ODEs unsigned long neq_; diff --git a/src/ode_newton.h b/src/ode_newton.h index 001ca8c..de10557 100644 --- a/src/ode_newton.h +++ b/src/ode_newton.h @@ -111,7 +111,7 @@ class OdeNewton { void JLU (double *x); //wrapper around LU solving routine for counting solves void solve_LU_(double **LU, int *p, double *b, int n, double *out); - //function for checking solution integrity (nans and infs) + //function for checking solution integrity (can't have NAN or INFINITY) int check_integrity (double *x); };