Loading...
Searching...
No Matches
triSurface.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-2016 OpenFOAM Foundation
9 Copyright (C) 2016-2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
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
27Class
28 Foam::triSurface
29
30Description
31 Triangulated surface description with patch information.
32
33SourceFiles
34 triSurface.C
35 triSurfaceAddressing.C
36 triSurfaceIO.C
37 triSurfaceStitch.C
38
39\*---------------------------------------------------------------------------*/
40
41#ifndef Foam_triSurface_H
42#define Foam_triSurface_H
43
44#include "primitivePatch.H"
45#include "PatchTools.H"
46#include "labelledTri.H"
47#include "boolList.H"
48#include "bitSet.H"
49#include "HashSet.H"
51#include "surfacePatchList.H"
52#include "triFaceList.H"
53
54// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
55
56namespace Foam
57{
58
59// Forward Declarations
60class Time;
61class IOobject;
62class IFstream;
63class surfZone;
64class triSurface;
65
66template<class Face> class MeshedSurface;
67
70
72/*---------------------------------------------------------------------------*\
73 Class triSurface Declaration
74\*---------------------------------------------------------------------------*/
75
76class triSurface
77:
78 public PrimitivePatch<::Foam::List<labelledTri>, pointField>
79{
80 // Private Typedefs
81
82 //- Internal mesh storage type
84 MeshReference;
85
86
87 // Private Data
88
89 //- Patch information
90 // (face ordering nFaces/startFace only used during reading, writing)
92
93
94 // Demand Driven
95
96 //- Edge-face addressing (sorted)
97 mutable std::unique_ptr<labelListList> sortedEdgeFacesPtr_;
98
99 //- Label of face that 'owns' edge
100 //- i.e. e.vec() is righthanded walk along face
101 mutable std::unique_ptr<labelList> edgeOwnerPtr_;
102
103
104 // Private Member Functions
105
106 //- Calculate sorted edgeFaces
107 void calcSortedEdgeFaces() const;
108
109 //- Calculate owner
110 void calcEdgeOwner() const;
111
112 //- Sort faces according to region.
113 // Returns patch list and sets faceMap to index of labelledTri
114 // inside *this.
115 surfacePatchList calcPatches(labelList& faceMap) const;
116
117 //- Sets default values for patches
118 void setDefaultPatches();
119
120 //- Function to stitch the triangles by removing duplicate points.
121 // Returns true if any points merged
122 bool stitchTriangles
123 (
124 const scalar tol = SMALL,
125 const bool verbose = false
126 );
127
128 //- Read in OpenFOAM format
129 bool readNative(Istream& is);
130
131 //- Write in OpenFOAM format
132 void writeNative(Ostream& os) const;
133
134 //- Read in STL format
135 bool readSTL(const fileName& filename, bool forceBinary=false);
136
137 //- Generic read routine for given format type.
138 // If the format type is "", uses the file extension.
139 bool read
140 (
141 const fileName& filename,
142 const word& fileType,
143 const bool check = true
144 );
145
146 //- Write STL ASCII format.
147 // Each region becomes a 'solid' 'endsolid' block.
148 void writeSTLASCII(const fileName& filename, const bool sort) const;
149
150 //- Write STL BINARY format
151 void writeSTLBINARY(const fileName& filename) const;
152
153 //- Write GTS (Gnu Tri Surface library) format.
154 void writeGTS(const fileName& filename, const bool sort) const;
155
156
157 // Static Private Functions
158
159 //- Convert faces to labelledTri. All get same region.
160 static List<labelledTri> convertToTri
161 (
162 const faceList& faces,
163 const label defaultRegion = 0
164 );
165
166 //- Convert triFaces to labelledTri. All get same region.
167 static List<labelledTri> convertToTri
168 (
169 const triFaceList& faces,
170 const label defaultRegion = 0
171 );
172
173 //- Return a new surface using specified pointMap and faceMap
174 //
175 // \param[in] pointMap from subsetMeshMap
176 // \param[in] faceMap from subsetMeshMap
177 triSurface subsetMeshImpl
178 (
179 const labelList& pointMap,
180 const labelList& faceMap
181 ) const;
182
183
184protected:
185
186 // Protected Member Functions
187
188 //- Non-const access to global points
190 {
191 return const_cast<pointField&>(MeshReference::points());
192 }
193
194 //- Non-const access to the faces
196 {
197 return static_cast<List<labelledTri>&>(*this);
198 }
199
200
201public:
202
203 // Public Typedefs
204
205 //- Placeholder only, but do not remove - it is needed for GeoMesh
206 typedef bool BoundaryMesh;
207
208 //- The face type (same as the underlying PrimitivePatch)
209 typedef labelledTri face_type;
210
211 //- The point type (same as the underlying PrimitivePatch)
212 typedef point point_type;
213
214
215 //- Runtime type information
216 ClassName("triSurface");
217
218
219 // Static
220
221 //- Name of triSurface directory to use.
222 static fileName triSurfInstance(const Time&);
223
224 //- Known readable file-types, including via friends or proxies
225 static wordHashSet readTypes();
226
227 //- Known writable file-types, including via friends or proxies
228 static wordHashSet writeTypes();
229
230 //- Can we read this file format?
231 static bool canReadType(const word& fileType, bool verbose=false);
232
233 //- Can we write this file format?
234 static bool canWriteType(const word& fileType, bool verbose=false);
235
236 //- Can we read this file format?
237 static bool canRead(const fileName& name, bool verbose=false);
239
240 // IO helpers
241
242 //- Return fileName.
243 // If fileName is relative gets treated as local to IOobject.
245 (
246 const IOobject& io,
247 const fileName& f,
248 const bool isGlobal = true
249 );
250
251 //- Return fileName to load IOobject from.
252 // Fatal if the file does not exist
253 static fileName checkFile
254 (
255 const IOobject& io,
256 const bool isGlobal = true
257 );
258
259 //- Return fileName to load IOobject from.
260 // Supports optional override of fileName with "file" entry
261 // Fatal if the file does not exist
262 static fileName checkFile
263 (
264 const IOobject& io,
265 const dictionary& dict,
266 const bool isGlobal = true
267 );
268
269 //- Use IOobject information to resolve file to load from,
270 //- or empty if the file does not exist.
271 static fileName findFile
272 (
273 const IOobject& io,
274 const bool isGlobal = true
275 );
276
277 //- Use IOobject information to resolve file to load from,
278 //- or empty if the file does not exist.
279 // Supports optional override of fileName with "file" entry
280 static fileName findFile
281 (
282 const IOobject& io,
283 const dictionary& dict,
284 const bool isGlobal = true
285 );
286
287
288 // Constructors
289
290 //- Default construct
291 triSurface();
292
293 //- Copy construct
294 triSurface(const triSurface& surf);
295
296 //- Move construct
297 triSurface(triSurface&& surf);
298
299 //- Construct from triangles, patches, points.
301 (
304 const pointField& pts
305 );
306
307 //- Construct from triangles, patches, points. Reuse storage.
309 (
313 const bool reuse
314 );
315
316 //- Construct from triangles, points.
317 //- Set patch names to default.
319 (
321 const pointField& pts
322 );
323
324 //- Construct from triangles, points.
325 //- Set region to 0 and default patchName.
327 (
328 const triFaceList& triangles,
329 const pointField& pts
330 );
331
332 //- Construct from file name (uses extension to determine type).
333 // Optional (positive, non-zero) point scaling is possible.
334 explicit triSurface
335 (
336 const fileName& name,
337 const scalar scaleFactor = -1
338 );
339
340 //- Construct from file name with given format type.
341 // If the format type is "", uses the file extension.
343 (
344 const fileName& name,
345 const word& fileType,
346 const scalar scaleFactor = -1
347 );
348
349 //- Construct from Istream
350 explicit triSurface(Istream& is);
351
352 //- Construct from objectRegistry by reading an ".ftr" file
353 explicit triSurface(const Time& d);
354
355 //- Read construct using IO to find the file location.
356 // Dictionary may contain the following entries:
357 // - \c file = alternative file name (default is dictionary name)
358 // - \c fileType = file format (default is from file extension)
359 // - \c scale (eg, 0.001: mm to m)
360 // .
362 (
363 const IOobject& io,
364 const dictionary& dict,
365 const bool isGlobal = true
366 );
367
368
369 // Selectors
370
371 //- Read construct from filename with given file type
373 (
374 const fileName& name,
375 const word& fileType
376 );
377
378 //- Read construct from filename (file type implicit from extension)
379 static autoPtr<triSurface> New(const fileName& name);
380
381
382 //- Destructor
383 virtual ~triSurface();
384
385
386 // Member Functions
387
388 void clearOut();
389
390 void clearTopology();
391
392 void clearPatchMeshAddr();
393
394 void swap(triSurface& surf);
395
396
397 // Access
398
400 {
401 return patches_;
402 }
403
405 {
406 return patches_;
407 }
408
409 //- Return const access to the faces
410 const List<labelledTri>& surfFaces() const noexcept
411 {
412 return static_cast<const List<labelledTri>&>(*this);
413 }
414
415 //- Return edge-face addressing sorted (for edges with more than
416 // 2 faces) according to the angle around the edge.
417 // Orientation is anticlockwise looking from
418 // edge.vec(localPoints())
419 const labelListList& sortedEdgeFaces() const;
420
421 //- If 2 face neighbours: label of face where ordering of edge
422 // is consistent with righthand walk.
423 // If 1 neighbour: label of only face.
424 // If >2 neighbours: undetermined.
425 const labelList& edgeOwner() const;
426
427
428 //- Face area vectors (normals)
429 const vectorField& Sf() const
430 {
432 }
433
434 //- Face area magnitudes
435 const scalarField& magSf() const
436 {
438 }
439
440 //- Face centres
441 const vectorField& Cf() const
442 {
444 }
445
446
447 // Interoperability with other surface mesh classes
448
449 //- Sort faces according to zoneIds
450 // Returns a surfZoneList and sets faceMap to index within faces()
451 // (i.e. map from original,unsorted to sorted)
452 List<surfZone> sortedZones(labelList& faceMap) const;
453
454 //- Create a list of faces from the triFaces
455 void triFaceFaces(List<face>& plainFaceList) const;
456
457
458 // Edit
459
460 //- Move points
461 virtual void movePoints(const pointField& pts);
462
463 //- Swap points. Similar to movePoints, but returns the old points
464 virtual void swapPoints(pointField& pts);
465
466 //- Scale points. A non-positive factor is ignored.
467 virtual void scalePoints(const scalar scaleFactor);
468
469 //- Check/remove duplicate/degenerate triangles
470 void checkTriangles(const bool verbose);
471
472 //- Check triply (or more) connected edges.
473 void checkEdges(const bool verbose);
474
475 //- Remove non-valid triangles
476 void cleanup(const bool verbose);
477
478 //- Remove unused points and renumber faces in local visit order
479 //
480 // \param[out] pointMap from new to old points (optional)
481 void compactPoints
482 (
483 labelList& pointMap = const_cast<labelList&>(labelList::null())
484 );
485
486 //- Fill faceZone with currentZone for every face reachable
487 // from facei without crossing edge marked in borderEdge.
488 // Note: faceZone has to be sized nFaces before calling this fun.
489 void markZone
490 (
491 const boolList& borderEdge,
492 const label facei,
493 const label currentZone,
494 labelList& faceZone
495 ) const;
496
497 //- (size and) fills faceZone with zone of face. Zone is area
498 // reachable by edge crossing without crossing borderEdge
499 // (bool for every edge in surface). Returns number of zones.
500 label markZones
501 (
502 const boolList& borderEdge,
503 labelList& faceZone
504 ) const;
505
506 //- Create mappings for a sub-surface
507 //
508 // \param[in] include the faces to select
509 // \param[out] pointMap from new to old localPoints
510 // \param[out] faceMap from new to old localFaces
511 template<class BoolListType>
512 void subsetMeshMap
513 (
514 const BoolListType& include,
515 labelList& pointMap,
517 ) const
518 {
519 PatchTools::subsetMap(*this, include, pointMap, faceMap);
520 }
521
522 //- Return a new surface subsetted on the selected faces.
523 //
524 // \param[in] include the faces to select
525 // \param[out] pointMap from new to old localPoints
526 // \param[out] faceMap from new to old localFaces
528 (
529 const UList<bool>& include,
530 labelList& pointMap,
532 ) const;
533
534 //- Return a new surface subsetted on the selected faces.
535 //
536 // \param[in] include the faces to select
537 // \param[out] pointMap from subsetMeshMap
538 // \param[out] faceMap from subsetMeshMap
540 (
541 const bitSet& include,
542 labelList& pointMap,
544 ) const;
545
546 //- Return a new surface subsetted on the selected faces.
547 //
548 // \param[in] include the faces to select
549 triSurface subsetMesh(const UList<bool>& include) const;
550
551 //- Return a new surface subsetted on the selected faces.
552 //
553 // \param[in] include the faces to select
554 triSurface subsetMesh(const bitSet& include) const;
555
556 //- Return a new surface subsetted on the selected patch names
557 //
558 // \param[in] includeNames surface patch names to include
559 // \param[in] excludeNames surface patch names to exclude
560 //
561 // \see Foam::stringListOps::findMatching for details about matching
563 (
564 const wordRes& includeNames,
565 const wordRes& excludeNames = wordRes()
566 ) const;
567
568 //- Swap the list of faces being addressed
569 void swapFaces(List<labelledTri>& faceLst);
570
571 //- Alter contents by transferring (triangles, points) components.
572 // Patch information is small and therefore just copied.
573 void transfer(triSurface& surf);
574
575 //- Alter contents by transferring (triangles, points) components.
576 // Patch information is small and therefore just copied.
578
579
580 // Write
581
582 //- Write to Ostream in simple OpenFOAM format
583 void write(Ostream& os) const;
584
585 //- Generic write routine (uses extension to determine type).
586 // The sort option may not have an effect.
587 void write(const fileName&, const bool sortByRegion = false) const;
588
589 //- Generic write routine for given format type.
590 // If the format type is "", uses the file extension.
591 // The sort option may not have an effect.
592 void write
593 (
594 const fileName& filename,
595 const word& fileType,
596 const bool sortByRegion = false
597 ) const;
598
599 //- Write to database
600 void write(const Time& d) const;
601
602 //- Write some statistics
603 void writeStats(Ostream& os) const;
604
605
606 // Member Operators
607
608 //- Copy assignment
609 void operator=(const triSurface& surf);
610
611 //- Move assignment
612 void operator=(triSurface&& surf);
613
614 //- Move assignment
616
617
618 // IOstream Operators
619
620 friend Istream& operator>>(Istream& is, triSurface& s);
621 friend Ostream& operator<<(Ostream& os, const triSurface& s);
622};
623
624
625// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
626
627} // End namespace Foam
628
629// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
630
631#endif
632
633// ************************************************************************* //
Input from file stream as an ISstream, normally using std::ifstream for the actual input.
Definition IFstream.H:55
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition IOobject.H:191
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition Istream.H:60
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition List.H:72
static const List< label > & null() noexcept
Definition List.H:138
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition Ostream.H:59
static void subsetMap(const PrimitivePatch< FaceList, PointField > &p, const BoolListType &includeFaces, labelList &pointMap, labelList &faceMap)
Determine the mapping for a sub-patch.
PrimitivePatch(const ::Foam::List< labelledTri > &faces, const pointField &points)
const Field< point_type > & points() const noexcept
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition Time.H:75
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
Definition UList.H:89
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition autoPtr.H:65
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
Definition bitSet.H:61
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
A subset of mesh faces organised as a primitive patch.
Definition faceZone.H:63
A class for handling file names.
Definition fileName.H:75
A triFace with additional (region) index.
Definition labelledTri.H:56
A surface zone on a MeshedSurface.
Definition surfZone.H:55
Triangulated surface description with patch information.
Definition triSurface.H:74
geometricSurfacePatchList & patches() noexcept
Definition triSurface.H:514
static fileName triSurfInstance(const Time &)
Name of triSurface directory to use.
Definition triSurface.C:67
static fileName checkFile(const IOobject &io, const bool isGlobal=true)
Return fileName to load IOobject from.
triSurface()
Default construct.
Definition triSurface.C:426
static bool canWriteType(const word &fileType, bool verbose=false)
Can we write this file format?
const vectorField & Sf() const
Face area vectors (normals).
Definition triSurface.H:549
List< surfZone > sortedZones(labelList &faceMap) const
Sort faces according to zoneIds.
Definition triSurface.C:703
pointField & storedPoints()
Non-const access to global points.
Definition triSurface.H:230
void transfer(triSurface &surf)
Alter contents by transferring (triangles, points) components.
Definition triSurface.C:955
static wordHashSet writeTypes()
Known writable file-types, including via friends or proxies.
static fileName findFile(const IOobject &io, const bool isGlobal=true)
Use IOobject information to resolve file to load from, or empty if the file does not exist.
label markZones(const boolList &borderEdge, labelList &faceZone) const
(size and) fills faceZone with zone of face. Zone is area
Definition triSurface.C:790
friend Istream & operator>>(Istream &is, triSurface &s)
const scalarField & magSf() const
Face area magnitudes.
Definition triSurface.H:557
void swap(triSurface &surf)
Definition triSurface.C:568
static autoPtr< triSurface > New(const fileName &name, const word &fileType)
Read construct from filename with given file type.
labelledTri face_type
The face type (same as the underlying PrimitivePatch).
Definition triSurface.H:256
void triFaceFaces(List< face > &plainFaceList) const
Create a list of faces from the triFaces.
Definition triSurface.C:717
triSurface subsetMesh(const UList< bool > &include, labelList &pointMap, labelList &faceMap) const
Return a new surface subsetted on the selected faces.
Definition triSurface.C:873
static bool canReadType(const word &fileType, bool verbose=false)
Can we read this file format?
void cleanup(const bool verbose)
Remove non-valid triangles.
Definition triSurface.C:649
const geometricSurfacePatchList & patches() const noexcept
Definition triSurface.H:509
void checkTriangles(const bool verbose)
Check/remove duplicate/degenerate triangles.
Definition triSurface.C:176
virtual void swapPoints(pointField &pts)
Swap points. Similar to movePoints, but returns the old points.
Definition triSurface.C:619
void checkEdges(const bool verbose)
Check triply (or more) connected edges.
Definition triSurface.C:295
List< labelledTri > & storedFaces()
Non-const access to the faces.
Definition triSurface.H:238
void compactPoints(labelList &pointMap=const_cast< labelList & >(labelList::null()))
Remove unused points and renumber faces in local visit order.
Definition triSurface.C:663
const vectorField & Cf() const
Face centres.
Definition triSurface.H:565
void markZone(const boolList &borderEdge, const label facei, const label currentZone, labelList &faceZone) const
Fill faceZone with currentZone for every face reachable.
Definition triSurface.C:731
static bool canRead(const fileName &name, bool verbose=false)
Can we read this file format?
static fileName relativeFilePath(const IOobject &io, const fileName &f, const bool isGlobal=true)
Return fileName.
friend Ostream & operator<<(Ostream &os, const triSurface &s)
const labelList & edgeOwner() const
If 2 face neighbours: label of face where ordering of edge.
Definition triSurface.C:595
void subsetMeshMap(const BoolListType &include, labelList &pointMap, labelList &faceMap) const
Create mappings for a sub-surface.
Definition triSurface.H:666
void writeStats(Ostream &os) const
Write some statistics.
virtual void movePoints(const pointField &pts)
Move points.
Definition triSurface.C:606
point point_type
The point type (same as the underlying PrimitivePatch).
Definition triSurface.H:261
void clearPatchMeshAddr()
Definition triSurface.C:554
virtual void scalePoints(const scalar scaleFactor)
Scale points. A non-positive factor is ignored.
Definition triSurface.C:632
const labelListList & sortedEdgeFaces() const
Return edge-face addressing sorted (for edges with more than.
Definition triSurface.C:584
const List< labelledTri > & surfFaces() const noexcept
Return const access to the faces.
Definition triSurface.H:522
void swapFaces(List< labelledTri > &faceLst)
Swap the list of faces being addressed.
Definition triSurface.C:947
void operator=(const triSurface &surf)
Copy assignment.
Definition triSurface.C:993
ClassName("triSurface")
Runtime type information.
bool BoundaryMesh
Placeholder only, but do not remove - it is needed for GeoMesh.
Definition triSurface.H:251
virtual ~triSurface()
Destructor.
Definition triSurface.C:538
static wordHashSet readTypes()
Known readable file-types, including via friends or proxies.
A List of wordRe with additional matching capabilities.
Definition wordRes.H:56
A class for handling words, derived from Foam::string.
Definition word.H:66
#define ClassName(TypeNameString)
Add typeName information from argument TypeNameString to a class.
Definition className.H:74
OBJstream os(runTime.globalPath()/outputName)
const auto & io
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.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))
Namespace for OpenFOAM.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
List< surfacePatch > surfacePatchList
List of surfacePatch.
HashSet< word, Hash< word > > wordHashSet
A HashSet of words, uses string hasher.
Definition HashSet.H:80
List< labelList > labelListList
List of labelList.
Definition labelList.H:38
List< label > labelList
A List of labels.
Definition List.H:62
List< face > faceList
List of faces.
Definition faceListFwd.H:41
static void check(const int retVal, const char *what)
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces).
Istream & operator>>(Istream &, directionInfo &)
void sort(UList< T > &list)
Sort the list.
Definition UList.C:283
Field< vector > vectorField
Specialisation of Field<T> for vector.
vector point
Point is a vector.
Definition point.H:37
List< geometricSurfacePatch > geometricSurfacePatchList
List of geometricSurfacePatch.
List< bool > boolList
A List of bools.
Definition List.H:60
const direction noexcept
Definition scalarImpl.H:265
List< triFace > triFaceList
List of triFace.
Definition triFaceList.H:31
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition exprTraits.C:127
vectorField pointField
pointField is a vectorField.
runTime write()
labelList f(nPoints)
dictionary dict
const pointField & pts
std::vector< Triangle > triangles