DAFunctionTotalPressure.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2 
3  DAFoam : Discrete Adjoint with OpenFOAM
4  Version : v4
5 
6 \*---------------------------------------------------------------------------*/
7 
9 
10 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
11 
12 namespace Foam
13 {
14 
15 defineTypeNameAndDebug(DAFunctionTotalPressure, 0);
16 addToRunTimeSelectionTable(DAFunction, DAFunctionTotalPressure, dictionary);
17 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
18 
20  const fvMesh& mesh,
21  const DAOption& daOption,
22  const DAModel& daModel,
23  const DAIndex& daIndex,
24  const word functionName)
25  : DAFunction(
26  mesh,
27  daOption,
28  daModel,
29  daIndex,
30  functionName),
31  daTurb_(const_cast<DATurbulenceModel&>(daModel.getDATurbulenceModel())),
32  rho_(daTurb_.rho())
33 {
34 }
35 
38 {
39  /*
40  Description:
41  Calculate the total pressure TP=p+0.5*rho*U^2.
42 
43  Output:
44 
45  functionValue: the sum of objective, reduced across all processors and scaled by "scale"
46  */
47 
48  // always calculate the area of all the patches
49  areaSum_ = 0.0;
50  forAll(faceSources_, idxI)
51  {
52  const label& functionFaceI = faceSources_[idxI];
53  label bFaceI = functionFaceI - daIndex_.nLocalInternalFaces;
54  const label patchI = daIndex_.bFacePatchI[bFaceI];
55  const label faceI = daIndex_.bFaceFaceI[bFaceI];
56  areaSum_ += mesh_.magSf().boundaryField()[patchI][faceI];
57  }
58  reduce(areaSum_, sumOp<scalar>());
59 
60  // initialize objFunValue
61  scalar functionValue = 0.0;
62 
63  const objectRegistry& db = mesh_.thisDb();
64  const volScalarField& p = db.lookupObject<volScalarField>("p");
65  const volVectorField& U = db.lookupObject<volVectorField>("U");
66 
67  const volScalarField::Boundary& pBf = p.boundaryField();
68  const volVectorField::Boundary& UBf = U.boundaryField();
69  const volScalarField::Boundary& rhoBf = rho_.boundaryField();
70 
71  // calculate area weighted heat flux
72  forAll(faceSources_, idxI)
73  {
74  const label& functionFaceI = faceSources_[idxI];
75  label bFaceI = functionFaceI - daIndex_.nLocalInternalFaces;
76  const label patchI = daIndex_.bFacePatchI[bFaceI];
77  const label faceI = daIndex_.bFaceFaceI[bFaceI];
78 
79  scalar area = mesh_.magSf().boundaryField()[patchI][faceI];
80  scalar val =
81  pBf[patchI][faceI] + 0.5 * rhoBf[patchI][faceI] * mag(UBf[patchI][faceI]) * mag(UBf[patchI][faceI]);
82  val *= scale_ * area / areaSum_;
83 
84  functionValue += val;
85  }
86 
87  // need to reduce the sum of force across all processors
88  reduce(functionValue, sumOp<scalar>());
89 
90  // check if we need to calculate refDiff.
91  this->calcRefVar(functionValue);
92 
93  return functionValue;
94 }
95 
96 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
97 
98 } // End namespace Foam
99 
100 // ************************************************************************* //
U
volVectorField & U
Definition: createRefsPimpleDyM.H:7
Foam::DAFunction::faceSources_
labelList faceSources_
a sorted list of all face sources for the objective function
Definition: DAFunction.H:67
DAFunctionTotalPressure.H
Foam::DAIndex::bFacePatchI
labelList bFacePatchI
Definition: DAIndex.H:110
Foam::DAOption
Definition: DAOption.H:29
Foam::addToRunTimeSelectionTable
addToRunTimeSelectionTable(DAFunction, DAFunctionForce, dictionary)
Foam::DAFunctionTotalPressure::DAFunctionTotalPressure
DAFunctionTotalPressure(const fvMesh &mesh, const DAOption &daOption, const DAModel &daModel, const DAIndex &daIndex, const word functionName)
Definition: DAFunctionTotalPressure.C:19
Foam::DAFunctionTotalPressure::rho_
volScalarField rho_
density
Definition: DAFunctionTotalPressure.H:35
Foam::DAFunction::calcRefVar
void calcRefVar(scalar &functionValue)
calculate (var-ref)^2
Definition: DAFunction.C:216
Foam::DAFunction::daIndex_
const DAIndex & daIndex_
DAIndex object.
Definition: DAFunction.H:52
mesh
fvMesh & mesh
Definition: createRefsHeatTransfer.H:4
Foam::DAIndex
Definition: DAIndex.H:32
p
volScalarField & p
Definition: createRefsPimpleDyM.H:6
Foam::DAModel
Definition: DAModel.H:57
Foam::DAFunction
Definition: DAFunction.H:31
Foam::defineTypeNameAndDebug
defineTypeNameAndDebug(DAFunction, 0)
Foam
Definition: checkGeometry.C:32
Foam::DAFunctionTotalPressure::areaSum_
scalar areaSum_
the area of all total pressure patches
Definition: DAFunctionTotalPressure.H:38
rho
volScalarField & rho
Definition: createRefsRhoPimple.H:8
forAll
forAll(nuTilda1, cellI)
Definition: nuTilda1EqnIrkPimple.H:19
Foam::DAIndex::nLocalInternalFaces
label nLocalInternalFaces
local internal face size
Definition: DAIndex.H:98
Foam::DATurbulenceModel
Definition: DATurbulenceModel.H:52
Foam::DAFunction::scale_
scalar scale_
scale of the objective function
Definition: DAFunction.H:73
Foam::DAFunctionTotalPressure::calcFunction
virtual scalar calcFunction()
calculate the value of objective function
Definition: DAFunctionTotalPressure.C:37
Foam::DAFunction::mesh_
const fvMesh & mesh_
fvMesh
Definition: DAFunction.H:43
Foam::DAIndex::bFaceFaceI
labelList bFaceFaceI
Definition: DAIndex.H:116