Loading...
Searching...
No Matches
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-2023 PCOpt/NTUA
9 Copyright (C) 2013-2023 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
49Foam::quadratic::quadratic(const dictionary& dict)
50:
52 minRatio_(coeffsDict().getOrDefault<scalar>("minRatio", 0.1)),
53 firstMeritValue_(Zero),
56{}
57
58
59// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * //
60
61void Foam::quadratic::updateStep(scalar& step)
62{
63 Info<< "First merit value, f(0) = " << firstMeritValue_ << endl;
64 Info<< "Second merit value, f(a0) = " << secondMeritValue_ << endl;
65 Info<< "Merit derivative, df(0) = " << meritDerivative_ << endl;
66 Info<< "Previous step, a0 = " << step << endl;
67 scalar denom = 1./(step*step);
68 scalar coeff1 =
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
83void Foam::quadratic::setDeriv(const scalar deriv)
84{
85 meritDerivative_ = deriv;
86}
87
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.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
Fits a quadratic polynomial of the merit function as a function of step and finds the "optimal" value...
Definition quadratic.H:53
virtual void setDeriv(const scalar deriv)
Set objective derivative.
Definition quadratic.C:76
virtual void updateStep(scalar &step)
Update step in given direction.
Definition quadratic.C:54
scalar meritDerivative_
Definition quadratic.H:61
scalar minRatio_
Definition quadratic.H:58
virtual void setOldMeritValue(const scalar value)
Set old merit value.
Definition quadratic.C:88
scalar firstMeritValue_
Definition quadratic.H:59
virtual void setNewMeritValue(const scalar value)
Set new merit value.
Definition quadratic.C:82
scalar secondMeritValue_
Definition quadratic.H:60
Abstract base class for step update methods used in line search.
Definition stepUpdate.H:51
const dictionary & coeffsDict()
Optional coeffs dict.
Definition stepUpdate.C:36
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition className.H:142
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:519
static constexpr const zero Zero
Global zero (0).
Definition zero.H:127
dictionary dict