ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / lagrangian / solidParticle / solidParticle.H
blob7fdf17a9b10d2b76d71a91bd37a0736e811fc11d
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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.
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.
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/>.
24 Class
25     Foam::solidParticle
27 Description
28     Simple solid spherical particle class with one-way coupling with the
29     continuous phase.
31 SourceFiles
32     solidParticleI.H
33     solidParticle.C
34     solidParticleIO.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef solidParticle_H
39 #define solidParticle_H
41 #include "particle.H"
42 #include "IOstream.H"
43 #include "autoPtr.H"
44 #include "interpolationCellPoint.H"
45 #include "contiguous.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 class solidParticleCloud;
54 /*---------------------------------------------------------------------------*\
55                            Class solidParticle Declaration
56 \*---------------------------------------------------------------------------*/
58 class solidParticle
60     public particle
62     // Private member data
64         //- Diameter
65         scalar d_;
67         //- Velocity of parcel
68         vector U_;
71 public:
73     friend class Cloud<solidParticle>;
75     //- Class used to pass tracking data to the trackToFace function
76     class trackingData
77     :
78         public particle::TrackingData<solidParticleCloud>
79     {
80         // Interpolators for continuous phase fields
82             const interpolationCellPoint<scalar>& rhoInterp_;
83             const interpolationCellPoint<vector>& UInterp_;
84             const interpolationCellPoint<scalar>& nuInterp_;
86         //- Local gravitational or other body-force acceleration
87         const vector& g_;
90     public:
92         // Constructors
94             inline trackingData
95             (
96                 solidParticleCloud& spc,
97                 const interpolationCellPoint<scalar>& rhoInterp,
98                 const interpolationCellPoint<vector>& UInterp,
99                 const interpolationCellPoint<scalar>& nuInterp,
100                 const vector& g
101             );
104         // Member functions
106             inline const interpolationCellPoint<scalar>& rhoInterp() const;
108             inline const interpolationCellPoint<vector>& UInterp() const;
110             inline const interpolationCellPoint<scalar>& nuInterp() const;
112             inline const vector& g() const;
113     };
116     // Constructors
118         //- Construct from components
119         inline solidParticle
120         (
121             const polyMesh& mesh,
122             const vector& position,
123             const label cellI,
124             const label tetFaceI,
125             const label tetPtI,
126             const scalar d,
127             const vector& U
128         );
130         //- Construct from Istream
131         solidParticle
132         (
133             const polyMesh& mesh,
134             Istream& is,
135             bool readFields = true
136         );
138         //- Construct and return a clone
139         virtual autoPtr<particle> clone() const
140         {
141             return autoPtr<particle>(new solidParticle(*this));
142         }
144         //- Factory class to read-construct particles used for
145         //  parallel transfer
146         class iNew
147         {
148             const polyMesh& mesh_;
150         public:
152             iNew(const polyMesh& mesh)
153             :
154                 mesh_(mesh)
155             {}
157             autoPtr<solidParticle> operator()(Istream& is) const
158             {
159                 return autoPtr<solidParticle>
160                 (
161                     new solidParticle(mesh_, is, true)
162                 );
163             }
164         };
167     // Member Functions
169         // Access
171             //- Return diameter
172             inline scalar d() const;
174             //- Return velocity
175             inline const vector& U() const;
178         // Tracking
180             //- Move
181             bool move(trackingData&, const scalar);
184         // Patch interactions
186             //- Overridable function to handle the particle hitting a patch
187             //  Executed before other patch-hitting functions
188             bool hitPatch
189             (
190                 const polyPatch&,
191                 trackingData& td,
192                 const label patchI,
193                 const scalar trackFraction,
194                 const tetIndices& tetIs
195             );
197             //- Overridable function to handle the particle hitting a
198             //  processorPatch
199             void hitProcessorPatch
200             (
201                 const processorPolyPatch&,
202                 trackingData& td
203             );
205             //- Overridable function to handle the particle hitting a wallPatch
206             void hitWallPatch
207             (
208                 const wallPolyPatch&,
209                 trackingData& td,
210                 const tetIndices&
211             );
213             //- Overridable function to handle the particle hitting a polyPatch
214             void hitPatch
215             (
216                 const polyPatch&,
217                 trackingData& td
218             );
220             //- Transform the physical properties of the particle
221             //  according to the given transformation tensor
222             virtual void transformProperties(const tensor& T);
224             //- Transform the physical properties of the particle
225             //  according to the given separation vector
226             virtual void transformProperties(const vector& separation);
228             //- The nearest distance to a wall that
229             //  the particle can be in the n direction
230             virtual scalar wallImpactDistance(const vector& n) const;
233     // I-O
235         static void readFields(Cloud<solidParticle>& c);
237         static void writeFields(const Cloud<solidParticle>& c);
240     // Ostream Operator
242         friend Ostream& operator<<(Ostream&, const solidParticle&);
246 template<>
247 inline bool contiguous<solidParticle>()
249     return true;
253 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
255 } // End namespace Foam
257 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
259 #include "solidParticleI.H"
261 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
263 #endif
265 // ************************************************************************* //