Bugfix: Motion constraints in sixDOFqODE. Author: Vuko Vukcevic. Merge: Hrvoje...
[foam-extend-3.2.git] / src / ODE / ODESolvers / KRR4 / KRR4.H
blob323b2f7d6687b469d07dd28e083e746c6cbcc624
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::KRR4
27 Description
28     Fourth-order Kaps-Rentrop scheme with adjustive time-step size
29     Numerical Recipes in C, Secn 16.6 page 739-742
30     Alternative reference in Numerical Recipes in C++
32 SourceFiles
33     KRR4.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef KRR4_H
38 #define KRR4_H
40 #include "ODESolver.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                            Class KRR4 Declaration
49 \*---------------------------------------------------------------------------*/
51 class KRR4
53     public ODESolver
55     // Private data
57         mutable scalarField yTemp_;
58         mutable scalarField dydxTemp_;
59         mutable scalarField g1_;
60         mutable scalarField g2_;
61         mutable scalarField g3_;
62         mutable scalarField g4_;
63         mutable scalarField yErr_;
64         mutable scalarField dfdx_;
65         mutable scalarSquareMatrix dfdy_;
66         mutable scalarSquareMatrix a_;
67         mutable labelList pivotIndices_;
69         static const int maxtry = 40;
71         static const scalar safety, grow, pgrow, shrink, pshrink, errcon;
73         static const scalar
74             gamma,
75             a21, a31, a32,
76             c21, c31, c32, c41, c42, c43,
77             b1, b2, b3, b4,
78             e1, e2, e3, e4,
79             c1X, c2X, c3X, c4X,
80             a2X, a3X;
83 public:
85     //- Runtime type information
86     TypeName("KRR4");
89     // Constructors
91         //- Construct from ODE
92         KRR4(ODE& ode);
95     // Destructor
97         virtual ~KRR4()
98         {}
101     // Member Functions
103         virtual void solve
104         (
105             scalar& x,
106             scalarField& y,
107             scalarField& dydx,
108             const scalar eps,
109             const scalarField& yScale,
110             const scalar hTry,
111             scalar& hDid,
112             scalar& hNext
113         ) const;
117 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
119 } // End namespace Foam
121 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
123 #endif
125 // ************************************************************************* //