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-------------------------------------------------------------------------------
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
29Class
30 Foam::adjointOutletVelocityFluxFvPatchVectorField
31
32Description
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
40SourceFiles
41 adjointOutletVelocityFluxFvPatchVectorField.C
42
43\*---------------------------------------------------------------------------*/
44
45#ifndef adjointOutletVelocityFluxFvPatchVectorField_H
46#define adjointOutletVelocityFluxFvPatchVectorField_H
47
48#include "fvPatchFields.H"
51
52// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
53
54namespace Foam
55{
56
57/*---------------------------------------------------------------------------*\
58 Class adjointOutletVelocityFluxFvPatch Declaration
59\*---------------------------------------------------------------------------*/
62:
63 public fixedValueFvPatchVectorField,
65{
66
67public:
68
69 //- Runtime type information
70 TypeName("adjointOutletVelocityFlux");
71
72
73 // Constructors
74
75 //- Construct from patch and internal field
77 (
78 const fvPatch&,
80 );
81
82 //- Construct from patch, internal field and dictionary
84 (
85 const fvPatch&,
87 const dictionary&
88 );
89
90 //- Construct by mapping given
91 //- adjointOutletVelocityFluxFvPatchVectorField
92 //- onto a new patch
94 (
96 const fvPatch&,
99 );
100
101 //- Construct and return a clone
102 virtual tmp<fvPatchVectorField> clone() const
103 {
105 (
107 );
108 }
109
110 //- Construct as copy setting internal field reference
112 (
115 );
116
117 //- Construct and return a clone setting internal field reference
119 (
121 ) const
122 {
124 (
126 );
127 }
128
129
130
131 // Member functions
132
133 //- Return true: Allow adjoint solvers to obtain the outlet phia
134 // value through HbyA
135 virtual bool assignable() const
136 {
137 return true;
138 }
139
140 //- add source term in the first cells off the wall due to adjoint WF
141 virtual void manipulateMatrix(fvMatrix<vector>& matrix);
142
143 //- Update the coefficients associated with the patch field
144 virtual void updateCoeffs();
145
146 //- Return the matrix diagonal coefficients corresponding to the
147 //- evaluation of the value of this patchField with given weights
149 (
150 const tmp<scalarField>&
151 ) const;
152
153 //- Return the matrix source coefficients corresponding to the
154 //- evaluation of the value of this patchField with given weights
156 (
157 const tmp<scalarField>&
158
159 ) const;
160
161 //- Return the matrix source coefficients corresponding to the
162 //- evaluation of the gradient of this patchField
164
165 //- Return the matrix diagonal coefficients corresponding to the
166 //- evaluation of the gradient of this patchField
168
169 //- Write
170 virtual void write(Ostream&) const;
171
172
173 // Member operators
174
175 virtual void operator=(const fvPatchField<vector>& pvf);
176};
177
178
179// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
180
181} // End namespace Foam
182
183// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
184
185#endif
186
187// ************************************************************************* //
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
Base class for solution control classes.
An outlet boundary condition for patches in which the primal flow exhibits recirculation....
virtual tmp< fvPatchVectorField > clone(const DimensionedField< vector, volMesh > &iF) const
Construct and return a clone setting internal field reference.
virtual tmp< Field< vector > > valueBoundaryCoeffs(const tmp< scalarField > &) const
virtual tmp< fvPatchVectorField > clone() const
Construct and return a clone.
virtual void manipulateMatrix(fvMatrix< vector > &matrix)
add source term in the first cells off the wall due to adjoint WF
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
TypeName("adjointOutletVelocityFlux")
Runtime type information.
virtual tmp< Field< vector > > valueInternalCoeffs(const tmp< scalarField > &) const
virtual bool assignable() const
Return true: Allow adjoint solvers to obtain the outlet phia.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvMatrix.H:121
A FieldMapper for finite-volume patch fields.
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:82
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:71
A class for managing temporary objects.
Definition: tmp.H:65
Namespace for OpenFOAM.
runTime write()
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73