rodas23.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::rodas23
26 
27 Description
28  L-stable, stiffly-accurate 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  rodas23.C
46 
47 \*---------------------------------------------------------------------------*/
48 
49 #ifndef rodas23_H
50 #define rodas23_H
51 
52 #include "ODESolver.H"
53 #include "adaptiveSolver.H"
54 
55 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
56 
57 namespace Foam
58 {
59 
60 /*---------------------------------------------------------------------------*\
61  Class rodas23 Declaration
62 \*---------------------------------------------------------------------------*/
63 
64 class rodas23
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 dy_;
75  mutable scalarField err_;
76  mutable scalarField dydx_;
77  mutable scalarField dfdx_;
78  mutable scalarSquareMatrix dfdy_;
79  mutable scalarSquareMatrix a_;
80  mutable labelList pivotIndices_;
81 
82  static const scalar
83  c3,
84  d1, d2,
85  a31,
86  a41,
87  c21, c31, c32,
88  c41, c42, c43,
89  gamma;
90 
91 public:
92 
93  //- Runtime type information
94  TypeName("rodas23");
95 
96 
97  // Constructors
98 
99  //- Construct from ODE
100  rodas23(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
rodas23(const ODESystem &ode, const dictionary &dict)
Construct from ODE.
Definition: rodas23.C:54
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
scalar y
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: rodas23.C:74
virtual void solve(scalar &x, scalarField &y, scalar &dxTry) const
Solve the ODE system as far as possible upto dxTry.
Definition: ODESolver.H:178
L-stable, stiffly-accurate embedded Rosenbrock ODE solver of order (2)3.
Definition: rodas23.H:63
Abstract base-class for ODE system solvers.
Definition: ODESolver.H:50
Namespace for OpenFOAM.
TypeName("rodas23")
Runtime type information.