constraintProjection.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 | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2007-2021 PCOpt/NTUA
9  Copyright (C) 2013-2021 FOSS GP
10  Copyright (C) 2019 OpenCFD Ltd.
11 -------------------------------------------------------------------------------
12 License
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 Class
30  Foam::constraintProjection
31 
32 Description
33  Update design variables using Rosen's projection method.
34 
35  Can handle multiple constraints.
36  Optionally includes a non-linearity correction
37 
38 SourceFiles
39  constraintProjection.C
40 
41 \*---------------------------------------------------------------------------*/
42 
43 #ifndef constraintProjection_H
44 #define constraintProjection_H
45 
47 #include "updateMethod.H"
48 
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 
51 namespace Foam
52 {
53 
54 /*---------------------------------------------------------------------------*\
55  Class constraintProjection Declaration
56 \*---------------------------------------------------------------------------*/
57 
59 :
61  public updateMethod
62 {
63 protected:
64 
65  // Protected data
66 
67  //- Correct for non-linearities
68  bool useCorrection_;
69 
70  //- Weight of the aggregated constraint values in the merit function
71  scalar delta_;
72 
73 
74 private:
75 
76  // Private Member Functions
77 
78  //- No copy construct
80 
81  //- No copy assignment
82  void operator=(const constraintProjection&) = delete;
83 
84 
85 public:
86 
87  //- Runtime type information
88  TypeName("constraintProjection");
89 
90 
91  // Constructors
92 
93  //- Construct from components
95  (
96  const fvMesh& mesh,
97  const dictionary& dict,
98  autoPtr<designVariables>& designVars,
99  const label nConstraints,
100  const word& type
101  );
102 
103 
104  //- Destructor
105  virtual ~constraintProjection() = default;
106 
107 
108  // Member Functions
109 
110  //- Compute design variables correction
111  void computeCorrection();
112 
113  //- Compute merit function. Could be different than the objective
114  //- in the presence of constraints
115  virtual scalar computeMeritFunction();
116 };
117 
118 
119 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
120 
121 } // End namespace Foam
122 
123 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
124 
125 #endif
126 
127 // ************************************************************************* //
bool useCorrection_
Correct for non-linearities.
dictionary dict
virtual scalar computeMeritFunction()
Compute merit function. Could be different than the objective in the presence of constraints.
Abstract base class for optimisation methods supporting constraints. Does not add functionality to up...
label nConstraints() const
Get the number of constraints.
Definition: updateMethod.C:393
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
Abstract base class for optimisation methods.
Definition: updateMethod.H:50
void computeCorrection()
Compute design variables correction.
Update design variables using Rosen&#39;s projection method.
TypeName("constraintProjection")
Runtime type information.
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
Definition: POSIX.C:799
scalar delta_
Weight of the aggregated constraint values in the merit function.
dynamicFvMesh & mesh
A class for handling words, derived from Foam::string.
Definition: word.H:63
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
virtual ~constraintProjection()=default
Destructor.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition: HashPtrTable.H:48
Namespace for OpenFOAM.