sampledPatchTemplates.C
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) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2018-2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
29 #include "sampledPatch.H"
30 
31 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
32 
33 template<class Type>
35 Foam::sampledPatch::sampleOnFaces
36 (
37  const interpolation<Type>& sampler
38 ) const
39 {
40  const auto& vField = sampler.psi();
41 
42  // One value per face
43  auto tvalues = tmp<Field<Type>>::New(patchFaceLabels_.size());
44  auto& values = tvalues.ref();
45 
46  forAll(patchFaceLabels_, i)
47  {
48  const label patchi = patchIDs_[patchIndex_[i]];
49  const label patchFacei = patchFaceLabels_[i];
50 
51  values[i] = vField.boundaryField()[patchi][patchFacei];
52  }
53 
54  return tvalues;
55 }
56 
57 
58 template<class Type>
60 Foam::sampledPatch::sampleOnFaces
61 (
63 ) const
64 {
65  // One value per face
66  auto tvalues = tmp<Field<Type>>::New(patchFaceLabels_.size());
67  auto& values = tvalues.ref();
68 
69  forAll(patchFaceLabels_, i)
70  {
71  const label patchi = patchIDs_[patchIndex_[i]];
72  const label patchFacei = patchFaceLabels_[i];
73 
74  values[i] = sField.boundaryField()[patchi][patchFacei];
75  }
76 
77  return tvalues;
78 }
79 
80 
81 template<class Type>
83 Foam::sampledPatch::sampleOnPoints
84 (
85  const interpolation<Type>& interpolator
86 ) const
87 {
88  // One value per vertex
89  auto tvalues = tmp<Field<Type>>::New(points().size());
90  auto& values = tvalues.ref();
91 
92  const labelList& own = mesh().faceOwner();
93 
94  bitSet pointDone(points().size());
95 
96  forAll(faces(), i)
97  {
98  const face& f = faces()[i];
99  const label patchi = patchIDs_[patchIndex_[i]];
100  const label patchFacei = patchFaceLabels_[i];
101 
102  const polyPatch& pp = mesh().boundaryMesh()[patchi];
103 
104  const label facei = patchFacei + pp.start();
105  const label celli = own[facei];
106 
107  for (const label pointi : f)
108  {
109  if (pointDone.set(pointi))
110  {
111  values[pointi] = interpolator.interpolate
112  (
113  points()[pointi],
114  celli,
115  facei
116  );
117  }
118  }
119  }
120 
121  return tvalues;
122 }
123 
124 
125 // ************************************************************************* //
sampledPatch.H
Foam::bitSet
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
Definition: bitSet.H:63
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
Foam::HashTableOps::values
List< T > values(const HashTable< T, Key, Hash > &tbl, const bool doSort=false)
List of values from HashTable, optionally sorted.
Definition: HashOps.H:149
Foam::bitSet::set
void set(const bitSet &bitset)
Set specified bits from another bitset.
Definition: bitSetI.H:574
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:296
Foam::interpolation::psi
const GeometricField< Type, fvPatchField, volMesh > & psi() const
Return the field to be interpolated.
Definition: interpolation.H:127
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:68
Foam::interpolation
Abstract base class for interpolation.
Definition: mappedPatchFieldBase.H:96
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::polyPatch::start
label start() const
Return start label of this patch in the polyMesh face list.
Definition: polyPatch.H:361
Foam::New
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
Definition: DimensionedFieldReuseFunctions.H:105
f
labelList f(nPoints)
Foam::List< label >
points
const pointField & points
Definition: gmvOutputHeader.H:1
Foam::face
A face is a list of labels corresponding to mesh vertices.
Definition: face.H:72
Foam::GeometricField
Generic GeometricField class.
Definition: areaFieldsFwd.H:53
Foam::interpolation::interpolate
virtual Type interpolate(const vector &position, const label celli, const label facei=-1) const =0
Interpolate field to the given point in the given cell.
Foam::GeometricField::boundaryField
const Boundary & boundaryField() const
Return const-reference to the boundary field.
Definition: GeometricFieldI.H:62