Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / applications / utilities / miscellaneous / findRoot / findRoot.C
blobf4a7891f2a990549181e7491c04abfb0c4896c67
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 Application
25     findRoot
27 Description
28     Test root-finding functions
30 \*---------------------------------------------------------------------------*/
32 #include "fvCFD.H"
33 #include "IOmanip.H"
34 #include "BisectionRoot.H"
35 #include "RiddersRoot.H"
36 #include "NewtonSecantRoot.H"
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 class testFunction
42 public:
44     testFunction()
45     {}
47     scalar operator()(const scalar& x) const
48     {
49         return sqr(x) - 1 - Foam::sin(x);
50     }
54 class testFunctionDerivative
56 public:
58     testFunctionDerivative()
59     {}
61     scalar operator()(const scalar& x) const
62     {
63         return 0.5*Foam::pow(x, -1.5) - Foam::cos(x);
64     }
68 int main(int argc, char *argv[])
70     testFunction tf;
71     testFunctionDerivative df;
73     Info<< setprecision(10)
74         << "Bisection root "
75         << BisectionRoot<testFunction>(tf, 1e-5).root(0, 10) << nl
76         << "Ridders root "
77         << RiddersRoot<testFunction>(tf, 1e-5).root(0, 10) << nl
78         << "NewtonSecant root "
79         << NewtonSecantRoot<testFunction, testFunctionDerivative>
80            (
81                tf,
82                df,
83                1e-5
84            ).root(1.5) << endl;
87     Info<< "End\n" << endl;
89     return(0);
93 // ************************************************************************* //