adjointOutletVelocityFluxFvPatchVectorField.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::adjointOutletVelocityFluxFvPatchVectorField
31 
32 Description
33  An outlet boundary condition for patches in which the primal flow exhibits
34  recirculation. Adds the contribution of the objective as an adjoint
35  momentum flux directly to the PDEs, without the need to first compute an
36  adjoint outlet velocity, circumventing thus the division with (almost) zero
37  that manifests in case of primal flow recirculation.
38 
39 SourceFiles
40  adjointOutletVelocityFluxFvPatchVectorField.C
41 
42 \*---------------------------------------------------------------------------*/
43 
44 #ifndef adjointOutletVelocityFluxFvPatchVectorField_H
45 #define adjointOutletVelocityFluxFvPatchVectorField_H
46 
47 #include "fvPatchFields.H"
50 
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52 
53 namespace Foam
54 {
55 
56 /*---------------------------------------------------------------------------*\
57  Class adjointOutletVelocityFluxFvPatch Declaration
58 \*---------------------------------------------------------------------------*/
59 
61 :
62  public fixedValueFvPatchVectorField,
64 {
65 
66 public:
67 
68  //- Runtime type information
69  TypeName("adjointOutletVelocityFlux");
70 
71 
72  // Constructors
73 
74  //- Construct from patch and internal field
76  (
77  const fvPatch&,
79  );
80 
81  //- Construct from patch, internal field and dictionary
83  (
84  const fvPatch&,
86  const dictionary&
87  );
88 
89  //- Construct by mapping given
90  //- adjointOutletVelocityFluxFvPatchVectorField
91  //- onto a new patch
93  (
95  const fvPatch&,
97  const fvPatchFieldMapper&
98  );
99 
100  //- Construct and return a clone
101  virtual tmp<fvPatchVectorField> clone() const
102  {
104  (
106  );
107  }
108 
109  //- Construct as copy setting internal field reference
111  (
114  );
115 
116  //- Construct and return a clone setting internal field reference
118  (
120  ) const
121  {
123  (
125  );
126  }
128 
129 
130  // Member functions
131 
132  //- Return true: Allow adjoint solvers to obtain the outlet phia
133  // value through HbyA
134  virtual bool assignable() const
135  {
136  return true;
137  }
138 
139  //- add source term in the first cells off the wall due to adjoint WF
140  virtual void manipulateMatrix(fvMatrix<vector>& matrix);
141 
142  //- Update the coefficients associated with the patch field
143  virtual void updateCoeffs();
144 
145  //- Return the matrix diagonal coefficients corresponding to the
146  //- evaluation of the value of this patchField with given weights
148  (
149  const tmp<scalarField>&
150  ) const;
151 
152  //- Return the matrix source coefficients corresponding to the
153  //- evaluation of the value of this patchField with given weights
155  (
156  const tmp<scalarField>&
157 
158  ) const;
159 
160  //- Return the matrix source coefficients corresponding to the
161  //- evaluation of the gradient of this patchField
162  virtual tmp<Field<vector>> gradientBoundaryCoeffs() const;
163 
164  //- Return the matrix diagonal coefficients corresponding to the
165  //- evaluation of the gradient of this patchField
166  virtual tmp<Field<vector>> gradientInternalCoeffs() const;
167 
168  //- Write
169  virtual void write(Ostream&) const;
170 
171 
172  // Member operators
173 
174  virtual void operator=(const fvPatchField<vector>& pvf);
175 };
176 
177 
178 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
179 
180 } // End namespace Foam
181 
182 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
183 
184 #endif
185 
186 // ************************************************************************* //
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
TypeName("adjointOutletVelocityFlux")
Runtime type information.
adjointOutletVelocityFluxFvPatchVectorField(const fvPatch &, const DimensionedField< vector, volMesh > &)
Construct from patch and internal field.
virtual tmp< fvPatchVectorField > clone() const
Construct and return a clone.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:70
virtual tmp< Field< vector > > gradientInternalCoeffs() const
Return the matrix diagonal coefficients corresponding to the evaluation of the gradient of this patch...
virtual tmp< Field< vector > > valueInternalCoeffs(const tmp< scalarField > &) const
Return the matrix diagonal coefficients corresponding to the evaluation of the value of this patchFie...
A FieldMapper for finite-volume patch fields.
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
Definition: fvPatchField.H:64
virtual void manipulateMatrix(fvMatrix< vector > &matrix)
add source term in the first cells off the wall due to adjoint WF
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
virtual tmp< Field< vector > > gradientBoundaryCoeffs() const
Return the matrix source coefficients corresponding to the evaluation of the gradient of this patchFi...
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Base class for solution control classes.
An outlet boundary condition for patches in which the primal flow exhibits recirculation. Adds the contribution of the objective as an adjoint momentum flux directly to the PDEs, without the need to first compute an adjoint outlet velocity, circumventing thus the division with (almost) zero that manifests in case of primal flow recirculation.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: areaFieldsFwd.H:42
virtual tmp< Field< vector > > valueBoundaryCoeffs(const tmp< scalarField > &) const
Return the matrix source coefficients corresponding to the evaluation of the value of this patchField...
A class for managing temporary objects.
Definition: HashPtrTable.H:50
virtual bool assignable() const
Return true: Allow adjoint solvers to obtain the outlet phia.
Namespace for OpenFOAM.