sampledThresholdCellFacesTemplates.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 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 
30 
31 #include "thresholdCellFaces.H"
32 #include "volFieldsFwd.H"
33 #include "pointFields.H"
34 #include "volPointInterpolation.H"
35 
36 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
37 
38 template<class Type>
40 Foam::sampledThresholdCellFaces::sampleOnFaces
41 (
42  const interpolation<Type>& sampler
43 ) const
44 {
45  updateGeometry(); // Recreate geometry if time has changed
46 
47  const labelList& elements = meshCells_;
48 
49  const label len = faces().size();
50 
51  auto tvalues = tmp<Field<Type>>::New(len);
52  auto& values = tvalues.ref();
53 
54  const faceList& fcs = faces();
55  const pointField& pts = points();
56 
57  for (label i=0; i < len; ++i)
58  {
59  const label celli = elements[i];
60  const point pt = fcs[i].centre(pts);
61 
62  values[i] = sampler.interpolate(pt, celli);
63  }
64 
65  return tvalues;
66 }
67 
68 
69 template<class Type>
71 Foam::sampledThresholdCellFaces::sampleOnPoints
72 (
73  const interpolation<Type>& interpolator
74 ) const
75 {
76  updateGeometry(); // Recreate geometry if time has changed
77 
78  const labelList& elements = meshCells_;
79 
80  // One value per point
81  auto tvalues = tmp<Field<Type>>::New(points().size(), Zero);
82  auto& values = tvalues.ref();
83 
84  bitSet pointDone(points().size());
85 
86  const faceList& fcs = faces();
87  const pointField& pts = points();
88 
89  forAll(fcs, i)
90  {
91  const face& f = fcs[i];
92  const label celli = elements[i];
93 
94  for (const label pointi : f)
95  {
96  if (pointDone.set(pointi))
97  {
98  values[pointi] = interpolator.interpolate
99  (
100  pts[pointi],
101  celli
102  );
103  }
104  }
105  }
106 
107  return tvalues;
108 }
109 
110 
111 // ************************************************************************* //
volFieldsFwd.H
Foam::bitSet
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
Definition: bitSet.H:64
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:59
Foam::Zero
static constexpr const zero Zero
Global zero.
Definition: zero.H:128
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:563
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:290
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:62
Foam::Field< vector >
thresholdCellFaces.H
Foam::interpolation
Abstract base class for interpolation.
Definition: mappedPatchFieldBase.H:95
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
volPointInterpolation.H
f
labelList f(nPoints)
Foam::Vector< scalar >
Foam::List< label >
points
const pointField & points
Definition: gmvOutputHeader.H:1
sampledThresholdCellFaces.H
Foam::face
A face is a list of labels corresponding to mesh vertices.
Definition: face.H:74
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.
pointFields.H