quadratic.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2007-2019 PCOpt/NTUA
9 Copyright (C) 2013-2019 FOSS GP
10 Copyright (C) 2019-2020 OpenCFD Ltd.
11-------------------------------------------------------------------------------
12License
13 This file is part of OpenFOAM.
14
15 OpenFOAM is free software: you can redistribute it and/or modify it
16 under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 3 of the License, or
18 (at your option) any later version.
19
20 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
21 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
27
28\*---------------------------------------------------------------------------*/
29
30#include "quadratic.H"
32
33// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
34
35namespace Foam
36{
39 (
43 );
44}
45
46
47// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
48
50:
52 minRatio_(coeffsDict().getOrDefault<scalar>("minRatio", 0.1)),
53 firstMeritValue_(Zero),
54 secondMeritValue_(Zero),
55 meritDerivative_(Zero)
56{}
57
58
59// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * //
60
62{
63 Info<< "f(0)" << firstMeritValue_ << endl;
64 Info<< "f(a0)" << secondMeritValue_ << endl;
65 Info<< "df(0)" << meritDerivative_ << endl;
66 Info<< "a0 " << step << endl;
67 scalar denom = 1./(step*step);
68 scalar coeff1 =
69 (secondMeritValue_ - meritDerivative_*step - firstMeritValue_)
70 * denom;
71 scalar tempStep = - 0.5*meritDerivative_/coeff1;
72 if (tempStep < minRatio_*step)
73 {
74 step = minRatio_*step;
75 }
76 else
77 {
78 step = tempStep;
79 }
80}
81
82
83void Foam::quadratic::setDeriv(const scalar deriv)
84{
85 meritDerivative_ = deriv;
86}
87
88
89void Foam::quadratic::setNewMeritValue(const scalar value)
90{
91 secondMeritValue_ = value;
92}
93
94
95void Foam::quadratic::setOldMeritValue(const scalar value)
96{
97 firstMeritValue_ = value;
98}
99
100
101// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
virtual void updateStep()
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
Fits a quadratic polynomial of the merit function as a function of step and finds the "optimal" value...
Definition: quadratic.H:57
virtual void setDeriv(const scalar deriv)
Set objective derivative.
Definition: quadratic.C:83
virtual void setOldMeritValue(const scalar value)
Set old merit value.
Definition: quadratic.C:95
virtual void setNewMeritValue(const scalar value)
Set new merit value.
Definition: quadratic.C:89
Abstract base class for step update methods used in line search.
Definition: stepUpdate.H:55
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition: className.H:121
Namespace for OpenFOAM.
messageStream Info
Information stream (stdout output on master, null elsewhere)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:372
dictionary dict