sensitivitySurfaceIncompressible.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 Class
29  Foam::incompressible::sensitivitySurface
30 
31 Description
32  Calculation of adjoint based sensitivities at wall faces
33 
34  Reference:
35  \verbatim
36  The computation of the sensitivity derivatives follows the (E-)SI
37  formulation of
38 
39  Kavvadias, I. S., Papoutsis-Kiachagias, E. M.,
40  Giannakoglou, K. C. (2015).
41  On the proper treatment of grid sensitivities in continuous adjoint
42  methods for shape optimization.
43  Journal of computational physics, 301, 1-18.
44  https://doi.org/10.1016/j.jcp.2015.08.012
45 
46  whereas their smoothing based on the computation of the 'Sobolev
47  gradient' is derived from
48 
49  Vassberg J. C., Jameson A. (2006).
50  Aerodynamic Shape Optimization Part I: Theoretical Background.
51  VKI Lecture Series, Introduction to Optimization and
52  Multidisciplinary Design, Brussels, Belgium, 8 March, 2006.
53  \endverbatim
54 
55 SourceFiles
56  sensitivitySurface.C
57 
58 \*---------------------------------------------------------------------------*/
59 
60 #ifndef sensitivitySurfaceIncompressible_H
61 #define sensitivitySurfaceIncompressible_H
62 
64 #include "shapeSensitivitiesBase.H"
67 #include "deltaBoundary.H"
68 #include "faMesh.H"
69 
70 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
71 
72 namespace Foam
73 {
74 
75 namespace incompressible
76 {
77 
78 /*---------------------------------------------------------------------------*\
79  Class sensitivitySurface Declaration
80 \*---------------------------------------------------------------------------*/
81 
83 :
84  public adjointSensitivity,
86 {
87 protected:
88 
89  // Protected data
90 
91 
92  //- Include surface area in sens computation
94 
95  //- Include the adjoint pressure term in sens computation
97 
98  //- Include the term containing the grad of the stress at the boundary
100 
101  //- Include the transpose part of the adjoint stresses
103 
104  //- Use snGrad in the transpose part of the adjoint stresses
106 
107  //- Include the term from the deviatoric part of the stresses
108  bool includeDivTerm_;
109 
110  //- Include distance variation in sens computation
111  bool includeDistance_;
112 
113  //- Include mesh movement variation in sens computation
115 
116  //- Include terms directly emerging from the objective function
117  bool includeObjective_;
118 
119  //- Write geometric info for use by external programs
120  bool writeGeometricInfo_;
121 
122  //- Smooth sensitivity derivatives based on the computation of the
123  //- 'Sobolev gradient'
125 
127 
129 
130  // Export face normal and face centre for use by external users
134 
135 
136  // Protected Member Functions
137 
138  //- Add sensitivities from dSd/db and dnf/db computed at points and
139  //- mapped to faces
140  void addGeometricSens();
141 
142  //- Set suffix name for sensitivity fields
143  void setSuffixName();
144 
145  //- Smooth sensitivity derivatives based on the computation of the
146  //- 'Sobolev gradient'
147  void smoothSensitivities();
148 
149  //- Compute the physical smoothing radius based on the average boundary
150  //- face 'length'
151  scalar computeRadius(const faMesh& aMesh);
152 
153 
154 private:
155 
156  // Private Member Functions
157 
158  //- No copy construct
159  sensitivitySurface(const sensitivitySurface&) = delete;
160 
161  //- No copy assignment
162  void operator=(const sensitivitySurface&) = delete;
163 
164 
165 public:
166 
167  //- Runtime type information
168  TypeName("surface");
169 
170 
171  // Constructors
172 
173  //- Construct from components
175  (
176  const fvMesh& mesh,
177  const dictionary& dict,
178  incompressibleVars& primalVars,
179  incompressibleAdjointVars& adjointVars,
181  );
182 
183 
184  //- Destructor
185  virtual ~sensitivitySurface() = default;
186 
187 
188  // Member Functions
189 
190  //- Read controls and update solver pointers if necessary
191  void read();
192 
193  //- Read dict if changed
194  virtual bool readDict(const dictionary& dict);
195 
196  //- Compute the number of faces on sensitivityPatchIDs_
197  void computeDerivativesSize();
198 
199  //- Accumulate sensitivity integrands
200  virtual void accumulateIntegrand(const scalar dt);
201 
202  //- Assemble sensitivities
203  virtual void assembleSensitivities();
204 
205  //- Zero sensitivity fields and their constituents
206  virtual void clearSensitivities();
207 
208  //- Get adjoint eikonal solver
210 
211  //- Write sensitivity maps
212  virtual void write(const word& baseName = word::null);
213 
214  // Inline getters and setters
215 
216  //- Get access to the includeObjective bool
217  inline bool getIncludeObjective() const;
218 
219  //- Get access to the includeSurfaceArea bool
220  inline bool getIncludeSurfaceArea() const;
221 
222  //- Set includeObjective bool
223  inline void setIncludeObjective(const bool includeObjective);
224 
225  //- Set includeSurfaceArea bool
226  inline void setIncludeSurfaceArea(const bool includeSurfaceArea);
227 
228 };
229 
230 
231 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
232 
233 } // End namespace incompressible
234 } // End namespace Foam
235 
236 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
237 
239 
240 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
241 
242 #endif
243 
244 // ************************************************************************* //
Foam::sensitivity::dict
const dictionary & dict() const
Return the construction dictionary.
Definition: sensitivity.C:57
Foam::objectiveManager
class for managing incompressible objective functions.
Definition: objectiveManager.H:54
Foam::incompressible::sensitivitySurface::assembleSensitivities
virtual void assembleSensitivities()
Assemble sensitivities.
Definition: sensitivitySurfaceIncompressible.C:807
Foam::incompressible::sensitivitySurface::includePressureTerm_
bool includePressureTerm_
Include the adjoint pressure term in sens computation.
Definition: sensitivitySurfaceIncompressible.H:95
Foam::incompressible::sensitivitySurface::includeObjective_
bool includeObjective_
Include terms directly emerging from the objective function.
Definition: sensitivitySurfaceIncompressible.H:116
shapeSensitivitiesBase.H
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::incompressible::sensitivitySurface::getIncludeSurfaceArea
bool getIncludeSurfaceArea() const
Get access to the includeSurfaceArea bool.
Definition: sensitivitySurfaceIncompressibleI.H:44
Foam::incompressible::sensitivitySurface::eikonalSolver_
autoPtr< adjointEikonalSolver > eikonalSolver_
Definition: sensitivitySurfaceIncompressible.H:125
sensitivitySurfaceIncompressibleI.H
Foam::incompressible::sensitivitySurface::write
virtual void write(const word &baseName=word::null)
Write sensitivity maps.
Definition: sensitivitySurfaceIncompressible.C:923
faMesh.H
Foam::incompressible::sensitivitySurface::smoothSensitivities
void smoothSensitivities()
Definition: sensitivitySurfaceIncompressible.C:220
Foam::incompressible::sensitivitySurface::setIncludeSurfaceArea
void setIncludeSurfaceArea(const bool includeSurfaceArea)
Set includeSurfaceArea bool.
Definition: sensitivitySurfaceIncompressibleI.H:60
Foam::incompressibleAdjointVars
Class including all adjoint fields for incompressible flows.
Definition: incompressibleAdjointVars.H:52
Foam::shapeSensitivitiesBase
Definition: shapeSensitivitiesBase.H:63
Foam::incompressible::sensitivitySurface::meshMovementSolver_
autoPtr< adjointMeshMovementSolver > meshMovementSolver_
Definition: sensitivitySurfaceIncompressible.H:127
aMesh
faMesh aMesh(mesh)
Foam::incompressible::sensitivitySurface::includeGradStressTerm_
bool includeGradStressTerm_
Include the term containing the grad of the stress at the boundary.
Definition: sensitivitySurfaceIncompressible.H:98
Foam::incompressible::adjointSensitivity
Abstract base class for adjoint-based sensitivities in incompressible flows.
Definition: adjointSensitivityIncompressible.H:75
Foam::incompressible::sensitivitySurface::includeDivTerm_
bool includeDivTerm_
Include the term from the deviatoric part of the stresses.
Definition: sensitivitySurfaceIncompressible.H:107
Foam::incompressible::sensitivitySurface::computeDerivativesSize
void computeDerivativesSize()
Compute the number of faces on sensitivityPatchIDs_.
Definition: sensitivitySurfaceIncompressible.C:591
Foam::incompressible::sensitivitySurface::computeRadius
scalar computeRadius(const faMesh &aMesh)
Definition: sensitivitySurfaceIncompressible.C:384
Foam::incompressible::sensitivitySurface::TypeName
TypeName("surface")
Runtime type information.
Foam::incompressible::sensitivitySurface::writeGeometricInfo_
bool writeGeometricInfo_
Write geometric info for use by external programs.
Definition: sensitivitySurfaceIncompressible.H:119
Foam::incompressible::sensitivitySurface::accumulateIntegrand
virtual void accumulateIntegrand(const scalar dt)
Accumulate sensitivity integrands.
Definition: sensitivitySurfaceIncompressible.C:602
Foam::incompressible::sensitivitySurface::useSnGradInTranposeStresses_
bool useSnGradInTranposeStresses_
Use snGrad in the transpose part of the adjoint stresses.
Definition: sensitivitySurfaceIncompressible.H:104
Foam::incompressible::sensitivitySurface::getAdjointEikonalSolver
autoPtr< adjointEikonalSolver > & getAdjointEikonalSolver()
Get adjoint eikonal solver.
Definition: sensitivitySurfaceIncompressible.C:917
Foam::incompressible::sensitivitySurface::nfOnPatchPtr_
autoPtr< volVectorField > nfOnPatchPtr_
Definition: sensitivitySurfaceIncompressible.H:130
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
Foam::incompressible::sensitivitySurface::setIncludeObjective
void setIncludeObjective(const bool includeObjective)
Set includeObjective bool.
Definition: sensitivitySurfaceIncompressibleI.H:51
Foam::incompressible::sensitivitySurface::includeSurfaceArea_
bool includeSurfaceArea_
Include surface area in sens computation.
Definition: sensitivitySurfaceIncompressible.H:92
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:85
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::incompressible::sensitivitySurface::includeDistance_
bool includeDistance_
Include distance variation in sens computation.
Definition: sensitivitySurfaceIncompressible.H:110
Foam::incompressible::sensitivitySurface::includeTransposeStresses_
bool includeTransposeStresses_
Include the transpose part of the adjoint stresses.
Definition: sensitivitySurfaceIncompressible.H:101
deltaBoundary.H
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::incompressible::sensitivitySurface::read
void read()
Read controls and update solver pointers if necessary.
Definition: sensitivitySurfaceIncompressible.C:510
adjointSensitivityIncompressible.H
Foam::incompressible::sensitivitySurface::clearSensitivities
virtual void clearSensitivities()
Zero sensitivity fields and their constituents.
Definition: sensitivitySurfaceIncompressible.C:900
adjointEikonalSolverIncompressible.H
Foam::incompressible::sensitivitySurface::~sensitivitySurface
virtual ~sensitivitySurface()=default
Destructor.
Foam::incompressible::sensitivitySurface::CfOnPatchPtr_
autoPtr< volVectorField > CfOnPatchPtr_
Definition: sensitivitySurfaceIncompressible.H:132
Foam::word::null
static const word null
An empty word.
Definition: word.H:80
Foam::incompressible::sensitivitySurface::addGeometricSens
void addGeometricSens()
Definition: sensitivitySurfaceIncompressible.C:61
Foam::faMesh
Finite area mesh. Used for 2-D non-Euclidian finite area method.
Definition: faMesh.H:82
Foam::incompressible::sensitivitySurface::smoothSensitivities_
bool smoothSensitivities_
Definition: sensitivitySurfaceIncompressible.H:123
Foam::incompressible::sensitivitySurface::includeMeshMovement_
bool includeMeshMovement_
Include mesh movement variation in sens computation.
Definition: sensitivitySurfaceIncompressible.H:113
Foam::incompressible::sensitivitySurface::setSuffixName
void setSuffixName()
Set suffix name for sensitivity fields.
Definition: sensitivitySurfaceIncompressible.C:199
Foam::incompressible::sensitivitySurface::getIncludeObjective
bool getIncludeObjective() const
Get access to the includeObjective bool.
Definition: sensitivitySurfaceIncompressibleI.H:38
Foam::incompressible::sensitivitySurface::readDict
virtual bool readDict(const dictionary &dict)
Read dict if changed.
Definition: sensitivitySurfaceIncompressible.C:570
Foam::incompressible::sensitivitySurface
Calculation of adjoint based sensitivities at wall faces.
Definition: sensitivitySurfaceIncompressible.H:81
Foam::incompressibleVars
Base class for solution control classes.
Definition: incompressibleVars.H:54
adjointMeshMovementSolverIncompressible.H
Foam::incompressible::sensitivitySurface::SfOnPatchPtr_
autoPtr< volVectorField > SfOnPatchPtr_
Definition: sensitivitySurfaceIncompressible.H:131