Rosenbrock23.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::Rosenbrock23
26 
27 Description
28  L-stable embedded Rosenbrock ODE solver of order (2)3.
29 
30  References:
31  \verbatim
32  Sandu et al,
33  "Benchmarking stiff ODE solvers for atmospheric chemistry problems II
34  Rosenbrock solvers",
35  A. Sandu,
36  J.G. Verwer,
37  J.G. Blom,
38  E.J. Spee,
39  G.R. Carmichael,
40  F.A. Potra,
41  Atmospheric Environment, Volume 31, 1997, Issue 20, Pages 3459-3472
42  \endverbatim
43 
44 SourceFiles
45  Rosenbrock23.C
46 
47 \*---------------------------------------------------------------------------*/
48 
49 #ifndef Rosenbrock23_H
50 #define Rosenbrock23_H
51 
52 #include "ODESolver.H"
53 #include "adaptiveSolver.H"
54 
55 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
56 
57 namespace Foam
58 {
59 
60 /*---------------------------------------------------------------------------*\
61  Class Rosenbrock23 Declaration
62 \*---------------------------------------------------------------------------*/
63 
64 class Rosenbrock23
65 :
66  public ODESolver,
67  public adaptiveSolver
68 {
69  // Private data
70 
71  mutable scalarField k1_;
72  mutable scalarField k2_;
73  mutable scalarField k3_;
74  mutable scalarField err_;
75  mutable scalarField dydx_;
76  mutable scalarField dfdx_;
77  mutable scalarSquareMatrix dfdy_;
78  mutable scalarSquareMatrix a_;
79  mutable labelList pivotIndices_;
80 
81  static const scalar
82  a21, a31, a32,
83  c21, c31, c32,
84  b1, b2, b3,
85  e1, e2, e3,
86  gamma,
87  c2, c3,
88  d1, d2, d3;
89 
90 
91 public:
92 
93  //- Runtime type information
94  TypeName("Rosenbrock23");
95 
96 
97  // Constructors
98 
99  //- Construct from ODE
100  Rosenbrock23(const ODESystem& ode, const dictionary& dict);
101 
102 
103  // Member Functions
104 
105  //- Inherit solve from ODESolver
106  using ODESolver::solve;
107 
108  //- Solve a single step dx and return the error
109  scalar solve
110  (
111  const scalar x0,
112  const scalarField& y0,
113  const scalarField& dydx0,
114  const scalar dx,
115  scalarField& y
116  ) const;
117 
118  //- Solve the ODE system and the update the state
119  void solve
120  (
121  scalar& x,
122  scalarField& y,
123  scalar& dxTry
124  ) const;
125 };
126 
127 
128 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129 
130 } // End namespace Foam
131 
132 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
133 
134 #endif
135 
136 // ************************************************************************* //
dictionary dict
Abstract base class for the systems of ordinary differential equations.
Definition: ODESystem.H:46
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
dimensionedScalar y0(const dimensionedScalar &ds)
scalar solve(const scalar x0, const scalarField &y0, const scalarField &dydx0, const scalar dx, scalarField &y) const
Solve a single step dx and return the error.
Definition: Rosenbrock23.C:83
An ODE solver for chemistry.
Definition: ode.H:50
scalar y
Rosenbrock23(const ODESystem &ode, const dictionary &dict)
Construct from ODE.
Definition: Rosenbrock23.C:64
L-stable embedded Rosenbrock ODE solver of order (2)3.
Definition: Rosenbrock23.H:63
virtual void solve(scalar &x, scalarField &y, scalar &dxTry) const
Solve the ODE system as far as possible upto dxTry.
Definition: ODESolver.H:178
Abstract base-class for ODE system solvers.
Definition: ODESolver.H:50
TypeName("Rosenbrock23")
Runtime type information.
Namespace for OpenFOAM.