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