particle.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2026 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::particle
26 
27 Description
28  Base particle class
29 
30 \*---------------------------------------------------------------------------*/
31 
32 #ifndef particle_H
33 #define particle_H
34 
35 #include "vector.H"
36 #include "barycentric.H"
37 #include "barycentricTensor.H"
38 #include "IDLList.H"
39 #include "pointField.H"
40 #include "faceList.H"
41 #include "OFstream.H"
42 #include "tetPointRef.H"
43 #include "FixedList.H"
45 #include "particleMacros.H"
46 #include "transformer.H"
47 
48 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 
50 namespace Foam
51 {
52 
53 // Forward declaration of classes
54 class particle;
55 
56 class polyPatch;
57 
58 class meshSearch;
59 
60 class cyclicPolyPatch;
61 class processorPolyPatch;
62 class symmetryPlanePolyPatch;
63 class symmetryPolyPatch;
64 class wallPolyPatch;
65 class wedgePolyPatch;
66 
67 // Forward declaration of friend functions and operators
68 
69 Ostream& operator<<
70 (
71  Ostream&,
72  const particle&
73 );
74 
75 bool operator==(const particle&, const particle&);
76 
77 bool operator!=(const particle&, const particle&);
78 
79 /*---------------------------------------------------------------------------*\
80  Class Particle Declaration
81 \*---------------------------------------------------------------------------*/
82 
83 class particle
84 :
85  public IDLList<particle>::link
86 {
87  // Private Static Member Data
88 
89  //- Size in bytes of the position data
90  static const std::size_t sizeofPosition_;
91 
92  //- Size in bytes of the fields
93  static const std::size_t sizeofFields_;
94 
95 
96 public:
97 
98  class trackingData
99  {
100  public:
101 
102  // Public data
103 
104  //- Reference to the mesh
105  const polyMesh& mesh;
106 
107  //- Flag to indicate whether to keep particle (false = delete)
108  bool keepParticle;
109 
110  //- Processor to send the particle to. -1 indicates that this
111  // particle is not to be transferred.
113 
114  //- Patch from which to send the particle
116 
117  //- Patch to which to send the particle
119 
120  //- Patch face to which to send the particle
122 
123  //- Position to which to send
125 
126  //- Number of boundary hits that occurred during locate executions
127  // following (non-conformal) patch transfers. For reporting.
129 
130 
131  // Constructor
132  template <class TrackCloudType>
133  trackingData(const TrackCloudType& cloud)
134  :
135  mesh(cloud.pMesh()),
136  keepParticle(false),
137  sendToProc(-1),
138  sendFromPatch(-1),
139  sendToPatch(-1),
140  sendToPatchFace(-1),
141  sendToPosition(vector::uniform(NaN)),
143  (
144  mesh.boundary().size()
145  - mesh.globalData().processorPatches().size(),
146  0
147  )
148  {}
149  };
150 
151 
152 private:
153 
154  // Private Data
155 
156  //- Coordinates of particle
157  barycentric coordinates_;
158 
159  //- Index of the cell it is in
160  label celli_;
161 
162  //- Index of the face that owns the decomposed tet that the
163  // particle is in
164  label tetFacei_;
165 
166  //- Index of the point on the face that defines the decomposed
167  // tet that the particle is in. Relative to the face base
168  // point.
169  label tetPti_;
170 
171  //- Face index if the particle is on a face otherwise -1
172  label facei_;
173 
174  //- Fraction of time-step completed
175  scalar stepFraction_;
176 
177  //- The step fraction less than the maximum reached so far. See
178  // tracking.H for details.
179  scalar stepFractionBehind_;
180 
181  //- The number of tracks carried out that ended in a step fraction less
182  // than the maximum reached so far. See tracking.H for details.
183  // maxNTracksBehind_.
184  label nTracksBehind_;
185 
186  //- Originating processor id
187  label origProc_;
188 
189  //- Local particle id on originating processor
190  label origId_;
191 
192 
193  // Private Member Functions
194 
195  //- Locate the particle at the given position. Returns whether or not a
196  // boundary was hit. The cell index must be valid.
197  bool locate
198  (
199  const polyMesh& mesh,
200  const vector& position,
201  label celli
202  );
203 
204 
205 public:
206 
207  // Static Data Members
208 
209  //- Runtime type information
210  TypeName("particle");
211 
212  //- String representation of properties
214  (
215  "(coordinatesa coordinatesb coordinatesc coordinatesd) "
216  "celli tetFacei tetPti facei stepFraction "
217  "behind nBehind origProc origId"
218  );
219 
220  //- Cumulative particle counter - used to provide unique ID
221  static label particleCount;
222 
223  //- Particles are not instantaneous by default
224  static const bool instantaneous = false;
225 
226 
227  // Constructors
228 
229  //- Construct from components
230  particle
231  (
232  const polyMesh& mesh,
233  const barycentric& coordinates,
234  const label celli,
235  const label tetFacei,
236  const label tetPti,
237  const label facei
238  );
239 
240  //- Construct from a position and a cell, searching for the rest of the
241  // required topology
242  particle
243  (
244  const meshSearch& searchEngine,
245  const vector& position,
246  const label celli,
247  label& nLocateBoundaryHits
248  );
249 
250  //- Construct from Istream
251  particle(Istream&, bool readFields = true);
252 
253  //- Construct as a copy
254  particle(const particle& p);
255 
256  //- Construct and return a clone
257  virtual autoPtr<particle> clone() const
258  {
259  return autoPtr<particle>(new particle(*this));
260  }
261 
262  //- Construct from Istream and return
263  static autoPtr<particle> New(Istream& is)
264  {
265  return autoPtr<particle>(new particle(is));
266  }
267 
268 
269  //- Destructor
270  virtual ~particle()
271  {}
272 
273 
274  // Member Functions
275 
276  // Access
277 
278  //- Get unique particle creation id
279  inline label getNewParticleIndex() const;
280 
281  //- Return current particle coordinates
282  inline const barycentric& coordinates() const;
283 
284  //- Return current cell particle is in
285  inline label cell() const;
286 
287  //- Return current tet face particle is in
288  inline label tetFace() const;
289 
290  //- Return current tet face particle is in
291  inline label tetPt() const;
292 
293  //- Return current face particle is on otherwise -1
294  inline label face() const;
295 
296  //- Return current face particle is on otherwise -1
297  inline label& face();
298 
299  //- Return the fraction of time-step completed
300  inline scalar stepFraction() const;
301 
302  //- Return the fraction of time-step completed
303  inline scalar& stepFraction();
304 
305  //- Return the originating processor ID
306  inline label origProc() const;
307 
308  //- Return the originating processor ID
309  inline label& origProc();
310 
311  //- Return the particle ID on the originating processor
312  inline label origId() const;
313 
314  //- Return the particle ID on the originating processor
315  inline label& origId();
316 
317 
318  // Check
319 
320  //- Return the indices of the current tet that the
321  // particle occupies.
322  inline tetIndices currentTetIndices(const polyMesh& mesh) const;
323 
324  //- Return the normal of the tri on tetFacei_ for the
325  // current tet.
326  inline vector normal(const polyMesh& mesh) const;
327 
328  //- Is the particle on a face?
329  inline bool onFace() const;
330 
331  //- Is the particle on an internal face?
332  inline bool onInternalFace(const polyMesh& mesh) const;
333 
334  //- Is the particle on a boundary face?
335  inline bool onBoundaryFace(const polyMesh& mesh) const;
336 
337  //- Return the index of patch that the particle is on
338  inline label patch(const polyMesh& mesh) const;
339 
340  //- Return current particle position
341  inline vector position(const polyMesh& mesh) const;
342 
343 
344  // Track
345 
346  //- Set the step fraction and clear the behind data in preparation
347  // for a new track
348  inline void reset(const scalar stepFraction);
349 
350  //- Locate the particle at the given position. Returns whether or
351  // not a boundary was hit. The cell index may be invalid, in which
352  // case a tree search is performed to find the cell containing the
353  // position.
354  bool locate
355  (
356  const meshSearch& searchEngine,
357  const vector& position,
358  label celli
359  );
360 
361  //- Track along the displacement for a given fraction of the overall
362  // step. End when the track is complete, or when a boundary is hit.
363  // On exit, stepFraction_ will have been incremented to the current
364  // position, and facei_ will be set to the index of the boundary
365  // face that was hit, or -1 if the track completed within a cell.
366  // The proportion of the displacement still to be completed is
367  // returned.
368  scalar track
369  (
370  const polyMesh& mesh,
371  const vector& displacement,
372  const scalar fraction
373  );
374 
375  //- As particle::track, but stops when a new cell is reached.
376  scalar trackToCell
377  (
378  const polyMesh& mesh,
379  const vector& displacement,
380  const scalar fraction
381  );
382 
383  //- As particle::track, but stops when a face is hit.
384  scalar trackToFace
385  (
386  const polyMesh& mesh,
387  const vector& displacement,
388  const scalar fraction
389  );
390 
391  //- Hit the current face. If the current face is internal than this
392  // crosses into the next cell. If it is a boundary face then this
393  // will interact the particle with the relevant patch.
394  template<class TrackCloudType>
395  void hitFace
396  (
397  const vector& displacement,
398  const scalar fraction,
399  TrackCloudType& cloud,
400  trackingData& td
401  );
402 
403  //- Convenience function. Combines trackToFace and hitFace
404  template<class TrackCloudType>
405  scalar trackToAndHitFace
406  (
407  const vector& displacement,
408  const scalar fraction,
409  TrackCloudType& cloud,
410  trackingData& td
411  );
412 
413  //- Get the displacement from the mesh centre. Used to correct the
414  // particle position in cases with reduced dimensionality. Returns
415  // a zero vector for three-dimensional cases.
417 
418 
419  // Patch data
420 
421  //- Get the normal and displacement of the current patch location
422  inline void patchData
423  (
424  const polyMesh& mesh,
425  vector& normal,
426  vector& displacement
427  ) const;
428 
429 
430  // Transformations
431 
432  //- Transform the physical properties of the particle
433  // according to the given transformation tensor
434  virtual void transformProperties(const transformer&);
435 
436 
437  // Transfers
438 
439  //- Make changes prior to a parallel transfer. Runs either
440  // processor or nonConformalCyclic variant below.
441  template<class TrackCloudType>
442  void prepareForParallelTransfer(TrackCloudType&, trackingData&);
443 
444  //- Make changes following a parallel transfer. Runs either
445  // processor or nonConformalCyclic variant below.
446  template<class TrackCloudType>
447  void correctAfterParallelTransfer(TrackCloudType&, trackingData&);
448 
449  //- Make changes prior to a transfer across a processor boundary.
450  // Stores the local patch face index (in facei_) so that the mesh
451  // face index can be determined on the other side.
453 
454  //- Make changes following a transfer across a processor boundary.
455  // Converts the stored patch index to a mesh index. Accounts for
456  // the receiving face being reversed relative to the sending face.
458 
459  //- Make changes prior to a transfer across a non conformal cyclic
460  // boundary. Stores the receiving patch face (in facei_). Breaks
461  // the topology and stores the cartesian position.
463  (
464  const polyMesh& mesh,
465  const label sendToPatch,
466  const label sendToPatchFace,
467  const vector& sendToPosition
468  );
469 
470  //- Make changes following a transfer across a non conformal cyclic
471  // boundary. Locates the particle using the stored face index and
472  // cartesian position.
474  (
475  const polyMesh& mesh,
476  const label sendToPatch,
477  labelList& patchNLocateBoundaryHits
478  );
479 
480 
481  // Patch interactions
482 
483  //- Overridable function to handle the particle hitting a patch.
484  // Executed before other patch-hitting functions.
485  template<class TrackCloudType>
486  bool hitPatch(TrackCloudType&, trackingData&);
487 
488  //- Overridable function to handle the particle hitting a wedgePatch
489  template<class TrackCloudType>
490  void hitWedgePatch(TrackCloudType&, trackingData&);
491 
492  //- Overridable function to handle the particle hitting a
493  // symmetryPlanePatch
494  template<class TrackCloudType>
495  void hitSymmetryPlanePatch(TrackCloudType&, trackingData&);
496 
497  //- Overridable function to handle the particle hitting a
498  // symmetryPatch
499  template<class TrackCloudType>
500  void hitSymmetryPatch(TrackCloudType&, trackingData&);
501 
502  //- Overridable function to handle the particle hitting a
503  // cyclicPatch
504  template<class TrackCloudType>
505  void hitCyclicPatch(TrackCloudType&, trackingData&);
506 
507  //- Overridable function to handle the particle hitting an
508  // nonConformalCyclicPolyPatch
509  template<class TrackCloudType>
511  (
512  const vector& displacement,
513  const scalar fraction,
514  const label patchi,
515  TrackCloudType& cloud,
516  trackingData& td
517  );
518 
519  //- Overridable function to handle the particle hitting a
520  // processorPatch
521  template<class TrackCloudType>
522  void hitProcessorPatch(TrackCloudType&, trackingData&);
523 
524  //- Overridable function to handle the particle hitting a wallPatch
525  template<class TrackCloudType>
526  void hitWallPatch(TrackCloudType&, trackingData&);
527 
528  //- Overridable function to handle the particle hitting a basic
529  // patch. Fall-through for the above.
530  template<class TrackCloudType>
531  void hitBasicPatch(TrackCloudType&, trackingData&);
532 
533 
534  // Interaction list referral
535 
536  //- Break the topology and store the cartesian position so that the
537  // particle can be referred.
539  (
540  const polyMesh& mesh,
541  const transformer& transform
542  );
543 
544  //- Correct the topology after referral. Locates the particle
545  // relative to a nearby cell/tet. The particle may end up outside
546  // this cell/tet and cannot therefore be tracked.
548  (
549  const polyMesh& mesh,
550  const label celli
551  );
552 
553 
554  // Decompose and reconstruct
555 
556  //- Return the tet point appropriate for decomposition or
557  // reconstruction to or from the given mesh.
559  (
560  const polyMesh& mesh,
561  const polyMesh& procMesh,
562  const label procCell,
563  const label procTetFace
564  ) const;
565 
566 
567  // I-O
568 
569  //- Read the fields associated with the owner cloud
570  template<class TrackCloudType>
571  static void readFields(TrackCloudType& c);
572 
573  //- Write the fields associated with the owner cloud
574  template<class TrackCloudType>
575  static void writeFields(const TrackCloudType& c);
576 
577  //- Write the particle position and cell
578  void writePosition(Ostream&) const;
579 
580 
581  // Friend Operators
582 
583  friend Ostream& operator<<(Ostream&, const particle&);
584 
585  friend bool operator==(const particle& pA, const particle& pB);
586 
587  friend bool operator!=(const particle& pA, const particle& pB);
588 };
589 
590 
591 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
592 
593 } // End namespace Foam
594 
595 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
596 
597 #include "particleI.H"
598 
599 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
600 
601 #ifdef NoRepository
602  #include "particleTemplates.C"
603 #endif
604 
605 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
606 
607 #endif
608 
609 // ************************************************************************* //
Intrusive doubly-linked list.
Template class for intrusive linked lists.
Definition: ILList.H:67
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:60
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:57
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: autoPtr.H:51
Base class for clouds. Provides a basic evolution algorithm, models, and a database for caching deriv...
Definition: cloud.H:61
Mesh object that implements searches within the local cells and faces.
Definition: meshSearch.H:59
labelList patchNLocateBoundaryHits
Number of boundary hits that occurred during locate executions.
Definition: particle.H:127
label sendToProc
Processor to send the particle to. -1 indicates that this.
Definition: particle.H:111
trackingData(const TrackCloudType &cloud)
Definition: particle.H:132
label sendFromPatch
Patch from which to send the particle.
Definition: particle.H:114
vector sendToPosition
Position to which to send.
Definition: particle.H:123
bool keepParticle
Flag to indicate whether to keep particle (false = delete)
Definition: particle.H:107
label sendToPatch
Patch to which to send the particle.
Definition: particle.H:117
const polyMesh & mesh
Reference to the mesh.
Definition: particle.H:104
label sendToPatchFace
Patch face to which to send the particle.
Definition: particle.H:120
Base particle class.
Definition: particle.H:85
label face() const
Return current face particle is on otherwise -1.
Definition: particleI.H:72
void prepareForParallelTransfer(TrackCloudType &, trackingData &)
Make changes prior to a parallel transfer. Runs either.
vector normal(const polyMesh &mesh) const
Return the normal of the tri on tetFacei_ for the.
Definition: particleI.H:129
label tetPt() const
Return current tet face particle is in.
Definition: particleI.H:66
label origProc() const
Return the originating processor ID.
Definition: particleI.H:96
const barycentric & coordinates() const
Return current particle coordinates.
Definition: particleI.H:48
void prepareForNonConformalCyclicTransfer(const polyMesh &mesh, const label sendToPatch, const label sendToPatchFace, const vector &sendToPosition)
Make changes prior to a transfer across a non conformal cyclic.
Definition: particle.C:282
virtual ~particle()
Destructor.
Definition: particle.H:269
scalar trackToCell(const polyMesh &mesh, const vector &displacement, const scalar fraction)
As particle::track, but stops when a new cell is reached.
Definition: particle.C:179
label cell() const
Return current cell particle is in.
Definition: particleI.H:54
void hitBasicPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a basic.
static void readFields(TrackCloudType &c)
Read the fields associated with the owner cloud.
void prepareForProcessorTransfer(trackingData &td)
Make changes prior to a transfer across a processor boundary.
Definition: particle.C:248
void reset(const scalar stepFraction)
Set the step fraction and clear the behind data in preparation.
Definition: particleI.H:174
static const bool instantaneous
Particles are not instantaneous by default.
Definition: particle.H:223
label patch(const polyMesh &mesh) const
Return the index of patch that the particle is on.
Definition: particleI.H:153
void hitCyclicPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a.
void hitProcessorPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a.
particle(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti, const label facei)
Construct from components.
Definition: particle.C:68
void correctAfterInteractionListReferral(const polyMesh &mesh, const label celli)
Correct the topology after referral. Locates the particle.
Definition: particle.C:381
scalar trackToAndHitFace(const vector &displacement, const scalar fraction, TrackCloudType &cloud, trackingData &td)
Convenience function. Combines trackToFace and hitFace.
void correctAfterNonConformalCyclicTransfer(const polyMesh &mesh, const label sendToPatch, labelList &patchNLocateBoundaryHits)
Make changes following a transfer across a non conformal cyclic.
Definition: particle.C:322
friend bool operator!=(const particle &pA, const particle &pB)
scalar track(const polyMesh &mesh, const vector &displacement, const scalar fraction)
Track along the displacement for a given fraction of the overall.
Definition: particle.C:155
scalar trackToFace(const polyMesh &mesh, const vector &displacement, const scalar fraction)
As particle::track, but stops when a face is hit.
Definition: particle.C:203
bool hitPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a patch.
scalar stepFraction() const
Return the fraction of time-step completed.
Definition: particleI.H:84
void hitFace(const vector &displacement, const scalar fraction, TrackCloudType &cloud, trackingData &td)
Hit the current face. If the current face is internal than this.
friend bool operator==(const particle &pA, const particle &pB)
void prepareForInteractionListReferral(const polyMesh &mesh, const transformer &transform)
Break the topology and store the cartesian position so that the.
Definition: particle.C:356
bool onFace() const
Is the particle on a face?
Definition: particleI.H:135
void hitSymmetryPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a.
static autoPtr< particle > New(Istream &is)
Construct from Istream and return.
Definition: particle.H:262
friend Ostream & operator<<(Ostream &, const particle &)
virtual autoPtr< particle > clone() const
Construct and return a clone.
Definition: particle.H:256
void patchData(const polyMesh &mesh, vector &normal, vector &displacement) const
Get the normal and displacement of the current patch location.
Definition: particleI.H:183
void hitSymmetryPlanePatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a.
vector deviationFromMeshCentre(const polyMesh &mesh) const
Get the displacement from the mesh centre. Used to correct the.
Definition: particle.C:227
void correctAfterProcessorTransfer(trackingData &td)
Make changes following a transfer across a processor boundary.
Definition: particle.C:260
void writePosition(Ostream &) const
Write the particle position and cell.
Definition: particleIO.C:86
TypeName("particle")
Runtime type information.
bool onBoundaryFace(const polyMesh &mesh) const
Is the particle on a boundary face?
Definition: particleI.H:147
void hitWedgePatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a wedgePatch.
tetIndices currentTetIndices(const polyMesh &mesh) const
Return the indices of the current tet that the.
Definition: particleI.H:121
label procTetPt(const polyMesh &mesh, const polyMesh &procMesh, const label procCell, const label procTetFace) const
Return the tet point appropriate for decomposition or.
Definition: particle.C:410
bool onInternalFace(const polyMesh &mesh) const
Is the particle on an internal face?
Definition: particleI.H:141
vector position(const polyMesh &mesh) const
Return current particle position.
Definition: particleI.H:159
void correctAfterParallelTransfer(TrackCloudType &, trackingData &)
Make changes following a parallel transfer. Runs either.
label getNewParticleIndex() const
Get unique particle creation id.
Definition: particleI.H:33
bool hitNonConformalCyclicPatch(const vector &displacement, const scalar fraction, const label patchi, TrackCloudType &cloud, trackingData &td)
Overridable function to handle the particle hitting an.
virtual void transformProperties(const transformer &)
Transform the physical properties of the particle.
Definition: particle.C:244
label origId() const
Return the particle ID on the originating processor.
Definition: particleI.H:108
void hitWallPatch(TrackCloudType &, trackingData &)
Overridable function to handle the particle hitting a wallPatch.
static label particleCount
Cumulative particle counter - used to provide unique ID.
Definition: particle.H:217
static void writeFields(const TrackCloudType &c)
Write the fields associated with the owner cloud.
label tetFace() const
Return current tet face particle is in.
Definition: particleI.H:60
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:78
Storage and named access for the indices of a tet which is part of the decomposition of a cell.
Definition: tetIndices.H:82
Vector-tensor class used to perform translations, rotations and scaling operations in 3D space.
Definition: transformer.H:84
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
label patchi
const dimensionedScalar c
Speed of light in a vacuum.
const unitSet fraction
Namespace for OpenFOAM.
bool operator!=(const particle &, const particle &)
Definition: particle.C:445
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
tmp< fvMatrix< Type > > operator==(const fvMatrix< Type > &, const fvMatrix< Type > &)
void transform(GeometricField< Type, GeoMesh > &rtf, const GeometricField< tensor, GeoMesh > &trf, const GeometricField< Type, GeoMesh > &tf)
Macros for adding to particle property lists.
#define DefinePropertyList(str)
faceListList boundary(nPatches)
volScalarField & p