isoSurface.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 | Copyright (C) 2011-2015 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::isoSurface
26 
27 Description
28  A surface formed by the iso value.
29  After "Regularised Marching Tetrahedra: improved iso-surface extraction",
30  G.M. Treece, R.W. Prager and A.H. Gee.
31 
32  Note:
33  - does tets without using cell centres/cell values. Not tested.
34  - regularisation can create duplicate triangles/non-manifold surfaces.
35  Current handling of those is bit ad-hoc for now and not perfect.
36  - regularisation does not do boundary points so as to preserve the
37  boundary perfectly.
38  - uses geometric merge with fraction of bounding box as distance.
39  - triangles can be between two cell centres so constant sampling
40  does not make sense.
41  - on empty patches behaves like zero gradient.
42  - does not do 2D correctly, creates non-flat iso surface.
43  - on processor boundaries might two overlapping (identical) triangles
44  (one from either side)
45 
46  The handling on coupled patches is a bit complex. All fields
47  (values and coordinates) get rewritten so
48  - empty patches get zerogradient (value) and facecentre (coordinates)
49  - separated processor patch faces get interpolate (value) and facecentre
50  (coordinates). (this is already the default for cyclics)
51  - non-separated processor patch faces keep opposite value and cell centre
52 
53  Now the triangle generation on non-separated processor patch faces
54  can use the neighbouring value. Any separated processor face or cyclic
55  face gets handled just like any boundary face.
56 
57 
58 SourceFiles
59  isoSurface.C
60 
61 \*---------------------------------------------------------------------------*/
62 
63 #ifndef isoSurface_H
64 #define isoSurface_H
65 
66 #include "triSurface.H"
67 #include "labelPair.H"
68 #include "pointIndexHit.H"
69 #include "PackedBoolList.H"
70 #include "volFields.H"
71 #include "slicedVolFields.H"
72 
73 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
74 
75 namespace Foam
76 {
77 
78 class fvMesh;
79 class plane;
80 class treeBoundBox;
81 
82 /*---------------------------------------------------------------------------*\
83  Class isoSurface Declaration
84 \*---------------------------------------------------------------------------*/
85 
86 class isoSurface
87 :
88  public triSurface
89 {
90  // Private data
91 
92  enum segmentCutType
93  {
94  NEARFIRST, // intersection close to e.first()
95  NEARSECOND, // ,, e.second()
96  NOTNEAR // no intersection
97  };
98 
99  enum cellCutType
100  {
101  NOTCUT, // not cut
102  SPHERE, // all edges to cell centre cut
103  CUT // normal cut
104  };
105 
106 
107  //- Reference to mesh
108  const fvMesh& mesh_;
109 
110  const scalarField& pVals_;
111 
112  //- Input volScalarField with separated coupled patches rewritten
114 
115  //- Isosurface value
116  const scalar iso_;
117 
118  //- Regularise?
119  const Switch regularise_;
120 
121  //- Optional bounds
122  const boundBox bounds_;
123 
124  //- When to merge points
125  const scalar mergeDistance_;
126 
127  //- Whether face might be cut
129 
130  //- Whether cell might be cut
132 
133  //- Estimated number of cut cells
135 
136  //- For every triangle the original cell in mesh
138 
139  //- For every unmerged triangle point the point in the triSurface
141 
142  //- triSurface points that have weighted interpolation
144 
145  //- corresponding original, unmerged points
147 
148  //- corresponding weights
150 
151 
152  // Private Member Functions
153 
154  // Point synchronisation
155 
156  //- Does tensor differ (to within mergeTolerance) from identity
157  bool noTransform(const tensor& tt) const;
158 
159  //- Is patch a collocated (i.e. non-separated) coupled patch?
160  static bool collocatedPatch(const polyPatch&);
161 
162  //- Per face whether is collocated
164 
165  //- Synchonise points on all non-separated coupled patches
167  (
168  pointField& collapsedPoint,
169  const point& nullValue
170  ) const;
171 
172 
173  //- Get location of iso value as fraction inbetween s0,s1
174  scalar isoFraction
175  (
176  const scalar s0,
177  const scalar s1
178  ) const;
179 
180  //- Check if any edge of a face is cut
181  bool isEdgeOfFaceCut
182  (
183  const scalarField& pVals,
184  const face& f,
185  const bool ownLower,
186  const bool neiLower
187  ) const;
188 
189  void getNeighbour
190  (
191  const labelList& boundaryRegion,
192  const volVectorField& meshC,
193  const volScalarField& cVals,
194  const label cellI,
195  const label faceI,
196  scalar& nbrValue,
197  point& nbrPoint
198  ) const;
199 
200  //- Set faceCutType,cellCutType.
201  void calcCutTypes
202  (
203  const labelList& boundaryRegion,
204  const volVectorField& meshC,
205  const volScalarField& cVals,
206  const scalarField& pVals
207  );
208 
209  static point calcCentre(const triSurface&);
210 
211  //- Determine per cc whether all near cuts can be snapped to single
212  // point.
213  void calcSnappedCc
214  (
215  const labelList& boundaryRegion,
216  const volVectorField& meshC,
217  const volScalarField& cVals,
218  const scalarField& pVals,
219  DynamicList<point>& snappedPoints,
220  labelList& snappedCc
221  ) const;
222 
223  //- Determine per point whether all near cuts can be snapped to single
224  // point.
225  void calcSnappedPoint
226  (
227  const PackedBoolList& isBoundaryPoint,
228  const labelList& boundaryRegion,
229  const volVectorField& meshC,
230  const volScalarField& cVals,
231  const scalarField& pVals,
232  DynamicList<point>& snappedPoints,
233  labelList& snappedPoint
234  ) const;
235 
236 
237  //- Return input field with coupled (and empty) patch values rewritten
238  template<class Type>
242  (
244  ) const;
245 
246  //- Generate single point by interpolation or snapping
247  template<class Type>
248  Type generatePoint
249  (
250  const scalar s0,
251  const Type& p0,
252  const bool hasSnap0,
253  const Type& snapP0,
254 
255  const scalar s1,
256  const Type& p1,
257  const bool hasSnap1,
258  const Type& snapP1
259  ) const;
260 
261  template<class Type>
262  void generateTriPoints
263  (
264  const scalar s0,
265  const Type& p0,
266  const bool hasSnap0,
267  const Type& snapP0,
268 
269  const scalar s1,
270  const Type& p1,
271  const bool hasSnap1,
272  const Type& snapP1,
273 
274  const scalar s2,
275  const Type& p2,
276  const bool hasSnap2,
277  const Type& snapP2,
278 
279  const scalar s3,
280  const Type& p3,
281  const bool hasSnap3,
282  const Type& snapP3,
283 
285  ) const;
286 
287  template<class Type>
289  (
290  const volScalarField& cVals,
291  const scalarField& pVals,
292 
294  const Field<Type>& pCoords,
295 
296  const DynamicList<Type>& snappedPoints,
297  const labelList& snappedCc,
298  const labelList& snappedPoint,
299  const label faceI,
300 
301  const scalar neiVal,
302  const Type& neiPt,
303  const bool hasNeiSnap,
304  const Type& neiSnapPt,
305 
307  DynamicList<label>& triMeshCells
308  ) const;
309 
310  template<class Type>
311  void generateTriPoints
312  (
313  const volScalarField& cVals,
314  const scalarField& pVals,
315 
317  const Field<Type>& pCoords,
318 
319  const DynamicList<Type>& snappedPoints,
320  const labelList& snappedCc,
321  const labelList& snappedPoint,
322 
324  DynamicList<label>& triMeshCells
325  ) const;
326 
327  template<class Type>
329  (
330  const label nPoints,
331  const labelList& triPointMergeMap,
332  const labelList& interpolatedPoints,
333  const List<FixedList<label, 3> >& interpolatedOldPoints,
335  const DynamicList<Type>& unmergedValues
336  );
337 
339  (
340  const bool checkDuplicates,
341  const List<point>& triPoints,
342  labelList& triPointReverseMap, // unmerged to merged point
343  labelList& triMap // merged to unmerged triangle
344  ) const;
345 
346  //- Trim triangle to planes
347  static void trimToPlanes
348  (
349  const PtrList<plane>& planes,
350  const triPointRef& tri,
351  DynamicList<point>& newTriPoints
352  );
353 
354  //- Trim all triangles to box
355  static void trimToBox
356  (
357  const treeBoundBox& bb,
359  DynamicList<label>& triMeshCells
360  );
361 
362  //- Trim all triangles to box. Determine interpolation
363  // for existing and new points
364  static void trimToBox
365  (
366  const treeBoundBox& bb,
368  DynamicList<label>& triMap,
369  labelList& triPointMap,
370  labelList& interpolatedPoints,
371  List<FixedList<label, 3> >& interpolatedOldPoints,
373  );
374 
375  //- Check single triangle for (topological) validity
376  static bool validTri(const triSurface&, const label);
377 
378  static triSurface subsetMesh
379  (
380  const triSurface& s,
381  const labelList& newToOldFaces,
382  labelList& oldToNewPoints,
383  labelList& newToOldPoints
384  );
385 
386 public:
387 
388  //- Declare friendship with isoSurfaceCell to share some functionality
389  friend class isoSurfaceCell;
390 
391 
392  //- Runtime type information
393  TypeName("isoSurface");
394 
395 
396  // Constructors
397 
398  //- Construct from cell values and point values. Uses boundaryField
399  // for boundary values. Holds reference to cellIsoVals and
400  // pointIsoVals.
401  isoSurface
402  (
403  const volScalarField& cellIsoVals,
404  const scalarField& pointIsoVals,
405  const scalar iso,
406  const bool regularise,
407  const boundBox& bounds = boundBox::greatBox,
408  const scalar mergeTol = 1e-6 // fraction of bounding box
409  );
410 
411 
412  // Member Functions
413 
414  //- For every triangle the original cell in mesh
415  const labelList& meshCells() const
416  {
417  return meshCells_;
418  }
419 
420  //- Interpolates cCoords,pCoords. Uses the references to the original
421  // fields used to create the iso surface.
422  template<class Type>
424  (
426  const Field<Type>& pCoords
427  ) const;
428 
429 };
430 
431 
432 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
433 
434 } // End namespace Foam
435 
436 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
437 
438 #ifdef NoRepository
439 # include "isoSurfaceTemplates.C"
440 #endif
441 
442 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
443 
444 #endif
445 
446 // ************************************************************************* //
Foam::fvPatchField
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:65
volFields.H
Foam::isoSurface::calcSnappedPoint
void calcSnappedPoint(const PackedBoolList &isBoundaryPoint, const labelList &boundaryRegion, const volVectorField &meshC, const volScalarField &cVals, const scalarField &pVals, DynamicList< point > &snappedPoints, labelList &snappedPoint) const
Determine per point whether all near cuts can be snapped to single.
Definition: isoSurface.C:681
Foam::isoSurface::pVals_
const scalarField & pVals_
Definition: isoSurface.H:109
Foam::Tensor
Templated 3D tensor derived from VectorSpace adding construction from 9 components,...
Definition: complexI.H:224
Foam::isoSurface::collocatedFaces
PackedBoolList collocatedFaces(const coupledPolyPatch &) const
Per face whether is collocated.
Definition: isoSurface.C:95
Foam::PackedBoolList
A bit-packed bool list.
Definition: PackedBoolList.H:63
Foam::Switch
A simple wrapper around bool so that it can be read as a word: true/false, on/off,...
Definition: Switch.H:60
pointIndexHit.H
Foam::PrimitivePatch< labelledTri, List, pointField, point >::points
const Field< point > & points() const
Return reference to global points.
Definition: PrimitivePatchTemplate.H:282
Foam::isoSurface::NOTNEAR
@ NOTNEAR
Definition: isoSurface.H:95
Foam::isoSurface::TypeName
TypeName("isoSurface")
Runtime type information.
Foam::isoSurface::interpolatedPoints_
DynamicList< label > interpolatedPoints_
triSurface points that have weighted interpolation
Definition: isoSurface.H:142
Foam::isoSurface::collocatedPatch
static bool collocatedPatch(const polyPatch &)
Is patch a collocated (i.e. non-separated) coupled patch?
Definition: isoSurface.C:86
Foam::isoSurface::cellCutType
cellCutType
Definition: isoSurface.H:98
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:118
isoSurfaceTemplates.C
Foam::DynamicList< label >
slicedVolFields.H
Foam::volMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: volMesh.H:47
Foam::isoSurface::calcCentre
static point calcCentre(const triSurface &)
Definition: isoSurface.C:499
Foam::isoSurface::isoFraction
scalar isoFraction(const scalar s0, const scalar s1) const
Get location of iso value as fraction inbetween s0,s1.
Definition: isoSurface.C:281
Foam::treeBoundBox
Standard boundBox + extra functionality for use in octree.
Definition: treeBoundBox.H:75
Foam::isoSurface::NEARFIRST
@ NEARFIRST
Definition: isoSurface.H:93
Foam::isoSurface::stitchTriPoints
triSurface stitchTriPoints(const bool checkDuplicates, const List< point > &triPoints, labelList &triPointReverseMap, labelList &triMap) const
Definition: isoSurface.C:877
Foam::isoSurface::mesh_
const fvMesh & mesh_
Reference to mesh.
Definition: isoSurface.H:107
Foam::boundaryRegion
The boundaryRegion persistent data saved as a Map<dictionary>.
Definition: boundaryRegion.H:70
Foam::isoSurface::iso_
const scalar iso_
Isosurface value.
Definition: isoSurface.H:115
Foam::isoSurface::adaptPatchFields
tmp< SlicedGeometricField< Type, fvPatchField, slicedFvPatchField, volMesh > > adaptPatchFields(const GeometricField< Type, fvPatchField, volMesh > &fld) const
Return input field with coupled (and empty) patch values rewritten.
Foam::isoSurface::nCutCells_
label nCutCells_
Estimated number of cut cells.
Definition: isoSurface.H:133
Foam::isoSurface::calcSnappedCc
void calcSnappedCc(const labelList &boundaryRegion, const volVectorField &meshC, const volScalarField &cVals, const scalarField &pVals, DynamicList< point > &snappedPoints, labelList &snappedCc) const
Determine per cc whether all near cuts can be snapped to single.
Definition: isoSurface.C:514
Foam::coupledPolyPatch
The coupledPolyPatch is an abstract base class for patches that couple regions of the computational d...
Definition: coupledPolyPatch.H:51
Foam::isoSurface::generateFaceTriPoints
label generateFaceTriPoints(const volScalarField &cVals, const scalarField &pVals, const GeometricField< Type, fvPatchField, volMesh > &cCoords, const Field< Type > &pCoords, const DynamicList< Type > &snappedPoints, const labelList &snappedCc, const labelList &snappedPoint, const label faceI, const scalar neiVal, const Type &neiPt, const bool hasNeiSnap, const Type &neiSnapPt, DynamicList< Type > &triPoints, DynamicList< label > &triMeshCells) const
Foam::isoSurface::mergeDistance_
const scalar mergeDistance_
When to merge points.
Definition: isoSurface.H:124
Foam::isoSurfaceCell
A surface formed by the iso value. After "Polygonising A Scalar Field Using Tetrahedrons",...
Definition: isoSurfaceCell.H:64
Foam::isoSurface::faceCutType_
List< cellCutType > faceCutType_
Whether face might be cut.
Definition: isoSurface.H:127
Foam::isoSurface::NOTCUT
@ NOTCUT
Definition: isoSurface.H:100
Foam::triangle
A triangle primitive used to calculate face normals and swept volumes.
Definition: triangle.H:59
Foam::isoSurface::meshCells
const labelList & meshCells() const
For every triangle the original cell in mesh.
Definition: isoSurface.H:414
Foam::triPoints
Triangle storage. Null constructable (unfortunately triangle<point, point> is not)
Definition: triPoints.H:49
Foam::isoSurface::calcCutTypes
void calcCutTypes(const labelList &boundaryRegion, const volVectorField &meshC, const volScalarField &cVals, const scalarField &pVals)
Set faceCutType,cellCutType.
Definition: isoSurface.C:360
Foam::isoSurface::triPointMergeMap_
labelList triPointMergeMap_
For every unmerged triangle point the point in the triSurface.
Definition: isoSurface.H:139
Foam::isoSurface
A surface formed by the iso value. After "Regularised Marching Tetrahedra: improved iso-surface extra...
Definition: isoSurface.H:85
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:59
Foam::isoSurface::getNeighbour
void getNeighbour(const labelList &boundaryRegion, const volVectorField &meshC, const volScalarField &cVals, const label cellI, const label faceI, scalar &nbrValue, point &nbrPoint) const
Definition: isoSurface.C:326
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::triSurface
Triangulated surface description with patch information.
Definition: triSurface.H:57
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
Foam::isoSurface::regularise_
const Switch regularise_
Regularise?
Definition: isoSurface.H:118
PackedBoolList.H
Foam::isoSurface::subsetMesh
static triSurface subsetMesh(const triSurface &s, const labelList &newToOldFaces, labelList &oldToNewPoints, labelList &newToOldPoints)
Definition: isoSurface.C:1340
Foam::PtrList
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: List.H:61
Foam::PrimitivePatch< labelledTri, List, pointField, point >::nPoints
label nPoints() const
Return number of points supporting patch faces.
Definition: PrimitivePatchTemplate.H:293
Foam::isoSurface::interpolate
static tmp< Field< Type > > interpolate(const label nPoints, const labelList &triPointMergeMap, const labelList &interpolatedPoints, const List< FixedList< label, 3 > > &interpolatedOldPoints, const List< FixedList< scalar, 3 > > &interpolationWeights, const DynamicList< Type > &unmergedValues)
Foam::interpolationWeights
Abstract base class for interpolating in 1D.
Definition: interpolationWeights.H:55
Foam::isoSurface::trimToBox
static void trimToBox(const treeBoundBox &bb, DynamicList< point > &triPoints, DynamicList< label > &triMeshCells)
Trim all triangles to box.
Definition: isoSurface.C:1128
Foam::isoSurface::cellCutType_
List< cellCutType > cellCutType_
Whether cell might be cut.
Definition: isoSurface.H:130
fld
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< ' ';}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< ' ';}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< ' ';}gmvFile<< nl;forAll(lagrangianScalarNames, i){ const word &name=lagrangianScalarNames[i];IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Foam::isoSurface::bounds_
const boundBox bounds_
Optional bounds.
Definition: isoSurface.H:121
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::e
const double e
Elementary charge.
Definition: doubleFloat.H:94
s
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Foam::slicedFvPatchField
Specialization of fvPatchField which creates the underlying fvPatchField as a slice of the given comp...
Definition: slicedFvPatchField.H:61
Foam::isoSurface::generatePoint
Type generatePoint(const scalar s0, const Type &p0, const bool hasSnap0, const Type &snapP0, const scalar s1, const Type &p1, const bool hasSnap1, const Type &snapP1) const
Generate single point by interpolation or snapping.
Definition: isoSurfaceTemplates.C:152
Foam::autoPtr
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:117
Foam::isoSurface::cValsPtr_
autoPtr< slicedVolScalarField > cValsPtr_
Input volScalarField with separated coupled patches rewritten.
Definition: isoSurface.H:112
Foam::isoSurface::interpolationWeights_
DynamicList< FixedList< scalar, 3 > > interpolationWeights_
corresponding weights
Definition: isoSurface.H:148
Foam::isoSurface::meshCells_
labelList meshCells_
For every triangle the original cell in mesh.
Definition: isoSurface.H:136
Foam::boundBox::greatBox
static const boundBox greatBox
A very large boundBox: min/max == -/+ VGREAT.
Definition: boundBox.H:76
f
labelList f(nPoints)
Foam::isoSurface::trimToPlanes
static void trimToPlanes(const PtrList< plane > &planes, const triPointRef &tri, DynamicList< point > &newTriPoints)
Trim triangle to planes.
Definition: isoSurface.C:1055
Foam::isoSurface::noTransform
bool noTransform(const tensor &tt) const
Does tensor differ (to within mergeTolerance) from identity.
Definition: isoSurface.C:70
Foam::Vector< scalar >
Foam::isoSurface::SPHERE
@ SPHERE
Definition: isoSurface.H:101
Foam::List< cellCutType >
Foam::isoSurface::segmentCutType
segmentCutType
Definition: isoSurface.H:91
Foam::FixedList< label, 3 >
Foam::boundBox
A bounding box defined in terms of the points at its extremities.
Definition: boundBox.H:55
Foam::isoSurface::interpolatedOldPoints_
DynamicList< FixedList< label, 3 > > interpolatedOldPoints_
corresponding original, unmerged points
Definition: isoSurface.H:145
Foam::SlicedGeometricField
Specialization of GeometricField which holds slices of given complete fields in a form that they act ...
Definition: slicedSurfaceFieldsFwd.H:56
Foam::face
A face is a list of labels corresponding to mesh vertices.
Definition: face.H:75
Foam::isoSurface::validTri
static bool validTri(const triSurface &, const label)
Check single triangle for (topological) validity.
Definition: isoSurface.C:1269
Foam::isoSurface::CUT
@ CUT
Definition: isoSurface.H:102
Foam::isoSurface::generateTriPoints
void generateTriPoints(const scalar s0, const Type &p0, const bool hasSnap0, const Type &snapP0, const scalar s1, const Type &p1, const bool hasSnap1, const Type &snapP1, const scalar s2, const Type &p2, const bool hasSnap2, const Type &snapP2, const scalar s3, const Type &p3, const bool hasSnap3, const Type &snapP3, DynamicList< Type > &points) const
Definition: isoSurfaceTemplates.C:196
Foam::isoSurface::isoSurface
isoSurface(const volScalarField &cellIsoVals, const scalarField &pointIsoVals, const scalar iso, const bool regularise, const boundBox &bounds=boundBox::greatBox, const scalar mergeTol=1e-6)
Construct from cell values and point values. Uses boundaryField.
Definition: isoSurface.C:1414
Foam::isoSurface::syncUnseparatedPoints
void syncUnseparatedPoints(pointField &collapsedPoint, const point &nullValue) const
Synchonise points on all non-separated coupled patches.
Definition: isoSurface.C:133
Foam::isoSurface::NEARSECOND
@ NEARSECOND
Definition: isoSurface.H:94
Foam::GeometricField
Generic GeometricField class.
Definition: surfaceFieldsFwd.H:52
Foam::isoSurface::isEdgeOfFaceCut
bool isEdgeOfFaceCut(const scalarField &pVals, const face &f, const bool ownLower, const bool neiLower) const
Check if any edge of a face is cut.
Definition: isoSurface.C:300
labelPair.H