#include <rosenbrock.h>
Public Types | |
enum | Method { Euler, ROS2, ROS3, ROWDA3, RODAS3 } |
Public Member Functions | |
Rosenbrock (const Method method=Euler) | |
void | increment (const IVP &ivp, const double t_m, const VECTOR &u_m, const double tau, VECTOR &u_mplus1) const |
void | increment (const IVP &ivp, const double t_m, const VECTOR &u_m, const double tau, VECTOR &u_mplus1, VECTOR &error_estimate) const |
Protected Attributes | |
LowerTriangularMatrix< double > | alpha_ |
LowerTriangularMatrix< double > | gamma_ |
Vector< double > | b_ |
Method | method_ |
The following class models an s-stage Rosenbrock-type method for the numerical solution of (abstract) nonautonomous initial value problems of the form
u'(t) = F(t, u(t)), u(0) = u_0.
The numerical method solves the following s linear stage equations:
(I-*{i,i}*J)(k_i + {j=1}^{i-1}{{i,j}}{{i,i}}k_j) = F(t_m+*, u^{(m)}+ * {j=1}^{i-1}{i,j} * k_j) + {j=1}^{i-1} {{i,j}}{{i,i}} * k_j + * * (t_m,u^{(m)})
Here = {j=1}^i{i,j}, = {j=1}^i{i,j}. J is the exact Jacobian F_u(t_n, u_n) or an approximation of it. In the latter case, one speaks of W-methods. The value at the new time node t_{m+1}=t_m+ is then determined by
u^{(m+1)} = u^{(m)} + * {i=1}^s b_i*k_i
The template parameter VECTOR stands for an element of the Banach space X under consideration. For finite-dimensional problems, this will almost always be a vector class like Vector<double>. In the infinite-dimensional case, VECTOR models elements of X as (finite) linear combinations of a wavelet basis. IVP provides the underlying initial value problem, this class should follow the signature
class IVP { void apply_f(const double t, const VECTOR& v, VECTOR& result) const; void apply_ft(const double t, const VECTOR& v, VECTOR& result) const; void solve_jacobian(const double t, const VECTOR& v, const double tau, VECTOR& result) const; }
The methods under consideration provide embedded lower order error estimators.
enum MathTL::Rosenbrock::Method |
enum type for the different builtin methods (in ascending stage order s)
References: [Euler] Deuflhard/Bornemann, Numerik II [ROS2] Blom, Hundsdorfer, Spee, Verwer: A Second-Order Rosenbrock Method Applied to Photochemical Dispersion Problems, SIAM J. Sci. Comput. 20(1999), 1456-1480 [ROS3], [RODAS3] Blom, Carmichael, Potra, Sandu, Spee, Verwer: Benchmarking Stiff ODE Solvers for Atmospheric Chemistry Problems II: Rosenbrock Solvers, Atmos. Environ. 31(1997), 3459-3472 [ROWDA3] Roche: Rosenbrock Methods for Differential Algebraic Equations, Numer. Math. 52(1988), 45-63
MathTL::Rosenbrock< VECTOR, IVP >::Rosenbrock | ( | const Method | method = Euler | ) |
construct one of the builtin Rosenbrock methods
void MathTL::Rosenbrock< VECTOR, IVP >::increment | ( | const IVP & | ivp, |
const double | t_m, | ||
const VECTOR & | u_m, | ||
const double | tau, | ||
VECTOR & | u_mplus1 | ||
) | const |
increment function u^{(m)} -> u^{(m+1)}
void MathTL::Rosenbrock< VECTOR, IVP >::increment | ( | const IVP & | ivp, |
const double | t_m, | ||
const VECTOR & | u_m, | ||
const double | tau, | ||
VECTOR & | u_mplus1, | ||
VECTOR & | error_estimate | ||
) | const |
increment function u^{(m)} -> u^{(m+1)}, also returns a local error estimator
LowerTriangularMatrix<double> MathTL::Rosenbrock< VECTOR, IVP >::alpha_ [protected] |
the Rosenbrock coefficients
Method MathTL::Rosenbrock< VECTOR, IVP >::method_ [protected] |
toggle method