mappedPatchBaseI.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) 2011-2015 OpenFOAM Foundation
9  Copyright (C) 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 
31 {
32  return mode_;
33 }
34 
35 
37 {
38  return sampleWorld_;
39 }
40 
41 
43 {
44  if (sampleRegion_.empty())
45  {
46  if (!coupleGroup_.valid())
47  {
49  << "Supply either a regionName or a coupleGroup"
50  << " for patch " << patch_.name()
51  << " in region " << patch_.boundaryMesh().mesh().name()
52  << exit(FatalError);
53  }
54 
55  // Try and use patchGroup to find samplePatch and sampleRegion
56  label samplePatchID = coupleGroup_.findOtherPatchID
57  (
58  patch_,
59  sampleRegion_
60  );
61 
62  samplePatch_ = sampleMesh().boundaryMesh()[samplePatchID].name();
63  }
64  return sampleRegion_;
65 }
66 
67 
69 {
70  if (samplePatch_.empty())
71  {
72  if (!coupleGroup_.valid())
73  {
75  << "Supply either a patchName or a coupleGroup"
76  << " for patch " << patch_.name()
77  << " in region " << patch_.boundaryMesh().mesh().name()
78  << exit(FatalError);
79  }
80 
81  // Try and use patchGroup to find samplePatch and sampleRegion
82  label samplePatchID = coupleGroup_.findOtherPatchID
83  (
84  patch_,
85  sampleRegion_
86  );
87 
88  samplePatch_ = sampleMesh().boundaryMesh()[samplePatchID].name();
89  }
90  return samplePatch_;
91 }
92 
93 
95 {
96  return coupleGroup_.name();
97 }
98 
99 
100 inline Foam::label Foam::mappedPatchBase::sampleSize() const
101 {
102  switch (mode_)
103  {
104  case NEARESTPATCHFACEAMI:
105  {
106  return samplePolyPatch().size();
107  }
108  case NEARESTCELL:
109  {
110  return sampleMesh().nCells();
111  }
112  case NEARESTPATCHFACE:
113  {
114  return samplePolyPatch().size();
115  }
116  case NEARESTPATCHPOINT:
117  {
118  return samplePolyPatch().nPoints();
119  }
120  case NEARESTFACE:
121  {
122  const polyMesh& mesh = sampleMesh();
123  return mesh.nBoundaryFaces();
124  }
125  default:
126  {
128  << "problem." << abort(FatalError);
129  return -1;
130  }
131  }
132 }
133 
134 
136 {
137  return offset_;
138 }
139 
140 
142 {
143  return offsets_;
144 }
145 
146 
147 inline Foam::label Foam::mappedPatchBase::comm() const
148 {
149  return comm_;
150 }
151 
152 
154 {
155  return
156  UPstream::allWorlds().size() == 1
157  || UPstream::myWorld() == sampleWorld_;
158 }
159 
160 
162 {
163  return sameRegion_;
164 }
165 
166 
168 {
169  const polyMesh& thisMesh = patch_.boundaryMesh().mesh();
170  bool topoChange =
171  (sameWorld() && sampleMesh().topoChanging())
172  || thisMesh.topoChanging();
173 
174  if (topoChange)
175  {
176  mapPtr_.reset(nullptr);
177  }
178 
179  if (!mapPtr_)
180  {
181  calcMapping();
182  }
183 
184  return *mapPtr_;
185 }
186 
187 
189 (
190  bool forceUpdate
191 ) const
192 {
193  const polyMesh& thisMesh = patch_.boundaryMesh().mesh();
194  bool topoChange =
195  (sameWorld() && sampleMesh().topoChanging())
196  || thisMesh.topoChanging();
197 
198  if (topoChange || forceUpdate)
199  {
200  AMIPtr_->upToDate() = false;
201  }
202 
203  calcAMI();
204 
205  return *AMIPtr_;
206 }
207 
208 
209 // ************************************************************************* //
Foam::polyMesh::topoChanging
bool topoChanging() const
Is mesh topology changing.
Definition: polyMesh.H:536
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::mappedPatchBase::map
const mapDistribute & map() const
Return reference to the parallel distribution map.
Definition: mappedPatchBaseI.H:167
Foam::mappedPatchBase::mode_
const sampleMode mode_
What to sample.
Definition: mappedPatchBase.H:239
Foam::polyMesh::boundaryMesh
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Definition: polyMesh.H:444
Foam::mappedPatchBase::sameWorld
bool sameWorld() const
Is world the local world.
Definition: mappedPatchBaseI.H:153
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:77
Foam::mappedPatchBase::offset
const vector & offset() const
Offset vector (from patch faces to destination mesh objects)
Definition: mappedPatchBaseI.H:135
Foam::mappedPatchBase::sampleSize
label sampleSize() const
Return size of mapped mesh/patch/boundary.
Definition: mappedPatchBaseI.H:100
Foam::Field< vector >
Foam::mappedPatchBase::comm
label comm() const
Communicator.
Definition: mappedPatchBaseI.H:147
Foam::mapDistribute
Class containing processor-to-processor mapping information.
Definition: mapDistribute.H:163
Foam::polyBoundaryMesh::mesh
const polyMesh & mesh() const
Return the mesh reference.
Definition: polyBoundaryMesh.H:144
Foam::UPstream::myWorld
static const word & myWorld()
My world.
Definition: UPstream.H:502
Foam::mappedPatchBase::sampleWorld
const word & sampleWorld() const
World to sample.
Definition: mappedPatchBaseI.H:36
Foam::mappedPatchBase::mode
const sampleMode & mode() const
What to sample.
Definition: mappedPatchBaseI.H:30
Foam::FatalError
error FatalError
Foam::primitiveMesh::nBoundaryFaces
label nBoundaryFaces() const
Number of boundary faces (== nFaces - nInternalFaces)
Definition: primitiveMeshI.H:84
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::UPstream::allWorlds
static const wordList & allWorlds()
All worlds.
Definition: UPstream.H:484
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:144
Foam::mappedPatchBase::coupleGroup
const word & coupleGroup() const
PatchGroup (only if NEARESTPATCHFACE)
Definition: mappedPatchBaseI.H:94
Foam::mappedPatchBase::sampleRegion
const word & sampleRegion() const
Region to sample.
Definition: mappedPatchBaseI.H:42
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:381
Foam::Vector< scalar >
Foam::AMIInterpolation
Interpolation class dealing with transfer of data between two primitive patches with an arbitrary mes...
Definition: AMIInterpolation.H:79
Foam::mappedPatchBase::AMI
const AMIPatchToPatchInterpolation & AMI(const bool forceUpdate=false) const
Return reference to the AMI interpolator.
Definition: mappedPatchBaseI.H:189
Foam::mappedPatchBase::sameRegion
bool sameRegion() const
Cached sampleRegion != mesh.name()
Definition: mappedPatchBaseI.H:161
Foam::mappedPatchBase::sampleMode
sampleMode
Mesh items to sample.
Definition: mappedPatchBase.H:120
Foam::mappedPatchBase::offsets
const vectorField & offsets() const
Offset vector (from patch faces to destination mesh objects)
Definition: mappedPatchBaseI.H:141
Foam::mappedPatchBase::samplePatch
const word & samplePatch() const
Patch (only if NEARESTPATCHFACE)
Definition: mappedPatchBaseI.H:68