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 -------------------------------------------------------------------------------
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 Class
28  Foam::triSurface
29 
30 Description
31  Triangulated surface description with patch information.
32 
33 SourceFiles
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 
56 namespace Foam
57 {
58 
59 // Forward Declarations
60 class Time;
61 class IOobject;
62 class IFstream;
63 class surfZone;
64 class triSurface;
65 
66 template<class Face> class MeshedSurface;
67 
68 Istream& operator>>(Istream&, triSurface&);
69 Ostream& operator<<(Ostream&, const triSurface&);
70 
71 
72 /*---------------------------------------------------------------------------*\
73  Class triSurface Declaration
74 \*---------------------------------------------------------------------------*/
75 
76 class triSurface
77 :
78  public PrimitivePatch<::Foam::List<labelledTri>, pointField>
79 {
80  // Private Typedefs
81 
82  //- Internal mesh storage type
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 
184 protected:
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 
201 public:
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.
300  triSurface
301  (
304  const pointField& pts
305  );
306 
307  //- Construct from triangles, patches, points. Reuse storage.
308  triSurface
309  (
312  pointField& pts,
313  const bool reuse
314  );
315 
316  //- Construct from triangles, points.
317  //- Set patch names to default.
318  triSurface
319  (
321  const pointField& pts
322  );
323 
324  //- Construct from triangles, points.
325  //- Set region to 0 and default patchName.
326  triSurface
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.
342  triSurface
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  // .
361  triSurface
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
372  static autoPtr<triSurface> New
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  {
431  return MeshReference::faceAreas();
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 // ************************************************************************* //
const Field< point_type > & faceAreas() const
Return face area vectors for patch.
triSurface subsetMesh(const UList< bool > &include, labelList &pointMap, labelList &faceMap) const
Return a new surface subsetted on the selected faces.
Definition: triSurface.C:872
void cleanup(const bool verbose)
Remove non-valid triangles.
Definition: triSurface.C:648
dictionary dict
A class for handling file names.
Definition: fileName.H:72
const scalarField & magSf() const
Face area magnitudes.
Definition: triSurface.H:557
static fileName checkFile(const IOobject &io, const bool isGlobal=true)
Return fileName to load IOobject from.
Definition: triSurfaceIO.C:117
void writeStats(Ostream &os) const
Write some statistics.
Definition: triSurfaceIO.C:348
friend Istream & operator>>(Istream &is, triSurface &s)
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
void compactPoints(labelList &pointMap=const_cast< labelList &>(labelList::null()))
Remove unused points and renumber faces in local visit order.
Definition: triSurface.C:662
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
Definition: Istream.H:57
virtual void movePoints(const pointField &pts)
Move points.
Definition: triSurface.C:605
void transfer(triSurface &surf)
Alter contents by transferring (triangles, points) components.
Definition: triSurface.C:954
void subsetMeshMap(const BoolListType &include, labelList &pointMap, labelList &faceMap) const
Create mappings for a sub-surface.
Definition: triSurface.H:666
std::vector< Triangle > triangles
static bool canWriteType(const word &fileType, bool verbose=false)
Can we write this file format?
Definition: triSurfaceIO.C:80
static const List< label > & null()
Return a null List.
Definition: ListI.H:130
void clearPatchMeshAddr()
Definition: triSurface.C:553
const Field< scalar > & magFaceAreas() const
Return face area magnitudes for patch.
List< labelList > labelListList
List of labelList.
Definition: labelList.H:38
List< labelledTri > & storedFaces()
Non-const access to the faces.
Definition: triSurface.H:238
const List< labelledTri > & surfFaces() const noexcept
Return const access to the faces.
Definition: triSurface.H:522
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:69
void write(Ostream &os) const
Write to Ostream in simple OpenFOAM format.
Definition: triSurfaceIO.C:331
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
static fileName relativeFilePath(const IOobject &io, const fileName &f, const bool isGlobal=true)
Return fileName.
Definition: triSurfaceIO.C:106
A list of faces which address into the list of points.
static fileName triSurfInstance(const Time &)
Name of triSurface directory to use.
Definition: triSurface.C:66
ClassName("triSurface")
Runtime type information.
const geometricSurfacePatchList & patches() const noexcept
Definition: triSurface.H:509
vectorField pointField
pointField is a vectorField.
Definition: pointFieldFwd.H:38
const labelListList & sortedEdgeFaces() const
Return edge-face addressing sorted (for edges with more than.
Definition: triSurface.C:583
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition: exprTraits.C:127
A class for handling words, derived from Foam::string.
Definition: word.H:63
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
void sort(UList< T > &list)
Sort the list.
Definition: UList.C:296
Istream & operator>>(Istream &, directionInfo &)
void checkTriangles(const bool verbose)
Check/remove duplicate/degenerate triangles.
Definition: triSurface.C:175
labelledTri face_type
The face type (same as the underlying PrimitivePatch)
Definition: triSurface.H:256
const Field< point_type > & faceCentres() const
Return face centres for patch.
void checkEdges(const bool verbose)
Check triply (or more) connected edges.
Definition: triSurface.C:294
A List of wordRe with additional matching capabilities.
Definition: wordRes.H:53
void swapFaces(List< labelledTri > &faceLst)
Swap the list of faces being addressed.
Definition: triSurface.C:946
A triFace with additional (region) index.
Definition: labelledTri.H:53
const Field< point_type > & points() const noexcept
Return reference to global points.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
Definition: HashTable.H:105
pointField & storedPoints()
Non-const access to global points.
Definition: triSurface.H:230
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:56
const direction noexcept
Definition: Scalar.H:258
A Vector of values with scalar precision, where scalar is float/double depending on the compilation f...
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:730
static bool canReadType(const word &fileType, bool verbose=false)
Can we read this file format?
Definition: triSurfaceIO.C:68
static autoPtr< triSurface > New(const fileName &name, const word &fileType)
Read construct from filename with given file type.
Definition: triSurfaceNew.C:30
void triFaceFaces(List< face > &plainFaceList) const
Create a list of faces from the triFaces.
Definition: triSurface.C:716
OBJstream os(runTime.globalPath()/outputName)
static void check(const int retVal, const char *what)
labelList f(nPoints)
const vectorField & Sf() const
Face area vectors (normals)
Definition: triSurface.H:549
static wordHashSet writeTypes()
Known writable file-types, including via friends or proxies.
Definition: triSurfaceIO.C:51
virtual void swapPoints(pointField &pts)
Swap points. Similar to movePoints, but returns the old points.
Definition: triSurface.C:618
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:77
triSurface()
Default construct.
Definition: triSurface.C:425
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...
Definition: triSurfaceIO.C:138
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
Definition: bitSet.H:59
List< surfZone > sortedZones(labelList &faceMap) const
Sort faces according to zoneIds.
Definition: triSurface.C:702
void swap(triSurface &surf)
Definition: triSurface.C:567
bool BoundaryMesh
Placeholder only, but do not remove - it is needed for GeoMesh.
Definition: triSurface.H:251
static void subsetMap(const PrimitivePatch< FaceList, PointField > &p, const BoolListType &includeFaces, labelList &pointMap, labelList &faceMap)
Determine the mapping for a sub-patch.
virtual void scalePoints(const scalar scaleFactor)
Scale points. A non-positive factor is ignored.
Definition: triSurface.C:631
Field< vector > vectorField
Specialisation of Field<T> for vector.
Pointer management similar to std::unique_ptr, with some additional methods and type checking...
Definition: HashPtrTable.H:48
static bool canRead(const fileName &name, bool verbose=false)
Can we read this file format?
Definition: triSurfaceIO.C:92
label markZones(const boolList &borderEdge, labelList &faceZone) const
(size and) fills faceZone with zone of face. Zone is area
Definition: triSurface.C:789
virtual ~triSurface()
Destructor.
Definition: triSurface.C:537
void clearTopology()
Definition: triSurface.C:545
List< label > labelList
A List of labels.
Definition: List.H:62
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, IOobject::NO_REGISTER)
Triangulated surface description with patch information.
Definition: triSurface.H:71
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))
point point_type
The point type (same as the underlying PrimitivePatch)
Definition: triSurface.H:261
static wordHashSet readTypes()
Known readable file-types, including via friends or proxies.
Definition: triSurfaceIO.C:33
void operator=(const triSurface &surf)
Copy assignment.
Definition: triSurface.C:992
Defines the attributes of an object for which implicit objectRegistry management is supported...
Definition: IOobject.H:172
const labelList & edgeOwner() const
If 2 face neighbours: label of face where ordering of edge.
Definition: triSurface.C:594
List< bool > boolList
A List of bools.
Definition: List.H:60
friend Ostream & operator<<(Ostream &os, const triSurface &s)
const vectorField & Cf() const
Face centres.
Definition: triSurface.H:565
Namespace for OpenFOAM.
const pointField & pts