Rosenbrock23.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2013-2018 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, A., Verwer, J. G., Blom, J. G., Spee, E. J., Carmichael, G. R.,
33  & Potra, F. A. (1997).
34  Benchmarking stiff ODE solvers for atmospheric chemistry problems II:
35  Rosenbrock solvers.
36  Atmospheric environment, 31(20), 3459-3472.
37  \endverbatim
38 
39 SourceFiles
40  Rosenbrock23.C
41 
42 \*---------------------------------------------------------------------------*/
43 
44 #ifndef Rosenbrock23_H
45 #define Rosenbrock23_H
46 
47 #include "ODESolver.H"
48 #include "adaptiveSolver.H"
49 
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 
52 namespace Foam
53 {
54 
55 /*---------------------------------------------------------------------------*\
56  Class Rosenbrock23 Declaration
57 \*---------------------------------------------------------------------------*/
58 
59 class Rosenbrock23
60 :
61  public ODESolver,
62  public adaptiveSolver
63 {
64  // Private data
65 
66  mutable scalarField k1_;
67  mutable scalarField k2_;
68  mutable scalarField k3_;
69  mutable scalarField err_;
70  mutable scalarField dydx_;
71  mutable scalarField dfdx_;
72  mutable scalarSquareMatrix dfdy_;
73  mutable scalarSquareMatrix a_;
74  mutable labelList pivotIndices_;
75 
76  static const scalar
77  a21, a31, a32,
78  c21, c31, c32,
79  b1, b2, b3,
80  e1, e2, e3,
81  gamma,
82  c2, c3,
83  d1, d2, d3;
84 
85 
86 public:
87 
88  //- Runtime type information
89  TypeName("Rosenbrock23");
90 
91 
92  // Constructors
93 
94  //- Construct from ODESystem
95  Rosenbrock23(const ODESystem& ode, const dictionary& dict);
96 
97 
98  //- Destructor
99  virtual ~Rosenbrock23()
100  {}
101 
102 
103  // Member Functions
104 
105  //- Inherit solve from ODESolver
106  using ODESolver::solve;
107 
108  //- Resize the ODE solver
109  virtual bool resize();
110 
111  //- Solve a single step dx and return the error
112  virtual scalar solve
113  (
114  const scalar x0,
115  const scalarField& y0,
116  const scalarField& dydx0,
117  const scalar dx,
118  scalarField& y
119  ) const;
120 
121  //- Solve the ODE system and the update the state
122  virtual void solve
123  (
124  scalar& x,
125  scalarField& y,
126  scalar& dxTry
127  ) const;
128 };
129 
130 
131 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
132 
133 } // End namespace Foam
134 
135 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
136 
137 #endif
138 
139 // ************************************************************************* //
virtual void solve(scalar &x, scalarField &y, scalar &dxTry) const
Solve the ODE system as far as possible up to dxTry.
Definition: ODESolver.C:116
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)
An ODE solver for chemistry.
Definition: ode.H:50
virtual 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:108
scalar y
virtual ~Rosenbrock23()
Destructor.
Definition: Rosenbrock23.H:98
Rosenbrock23(const ODESystem &ode, const dictionary &dict)
Construct from ODESystem.
Definition: Rosenbrock23.C:64
L-stable embedded Rosenbrock ODE solver of order (2)3.
Definition: Rosenbrock23.H:58
virtual bool resize()
Resize the ODE solver.
Definition: Rosenbrock23.C:82
Abstract base-class for ODE system solvers.
Definition: ODESolver.H:50
TypeName("Rosenbrock23")
Runtime type information.
Namespace for OpenFOAM.