Merge /u/wyldckat/foam-extend32/ branch master into master
[foam-extend-3.2.git] / src / lagrangian / solidParticle / solidParticle.H
blobf83ad4b56a43ec010e5e518d93a60532a948a539
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  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<solidParticle>
62     // Private member data
64         //- Diameter
65         scalar d_;
67         //- Velocity of particle
68         vector U_;
71 public:
73     friend class Cloud<solidParticle>;
75     //- Class used to pass tracking data to the trackToFace function
76     class trackData
77     {
78         //- Reference to the cloud containing this particle
79         solidParticleCloud& spc_;
81         // Interpolators for continuous phase fields
83             const interpolationCellPoint<scalar>& rhoInterp_;
84             const interpolationCellPoint<vector>& UInterp_;
85             const interpolationCellPoint<scalar>& nuInterp_;
87         //- Local gravitational or other body-force acceleration
88         const vector& g_;
91     public:
93         bool switchProcessor;
94         bool keepParticle;
97         // Constructors
99             inline trackData
100             (
101                 solidParticleCloud& spc,
102                 const interpolationCellPoint<scalar>& rhoInterp,
103                 const interpolationCellPoint<vector>& UInterp,
104                 const interpolationCellPoint<scalar>& nuInterp,
105                 const vector& g
106             );
109         // Member functions
111             inline solidParticleCloud& spc();
113             inline const interpolationCellPoint<scalar>& rhoInterp() const;
115             inline const interpolationCellPoint<vector>& UInterp() const;
117             inline const interpolationCellPoint<scalar>& nuInterp() const;
119             inline const vector& g() const;
120     };
123     // Constructors
125         //- Construct from components
126         inline solidParticle
127         (
128             const Cloud<solidParticle>& c,
129             const vector& position,
130             const label celli,
131             const scalar m,
132             const vector& U
133         );
135         //- Construct from Istream
136         solidParticle
137         (
138             const Cloud<solidParticle>& c,
139             Istream& is,
140             bool readFields = true
141         );
143         //- Construct and return a clone
144         autoPtr<solidParticle> clone() const
145         {
146             return autoPtr<solidParticle>(new solidParticle(*this));
147         }
150     // Member Functions
152         // Access
154             //- Return diameter
155             inline scalar d() const;
157             //- Return velocity
158             inline const vector& U() const;
160             //- The nearest distance to a wall that
161             //  the particle can be in the n direction
162             inline scalar wallImpactDistance(const vector& n) const;
165         // Tracking
167             //- Move
168             bool move(trackData&);
171         // Patch interactions
173             //- Overridable function to handle the particle hitting a patch
174             //  Executed before other patch-hitting functions
175             bool hitPatch
176             (
177                 const polyPatch&,
178                 solidParticle::trackData& td,
179                 const label patchI
180             );
182             //- Overridable function to handle the particle hitting a patch
183             //  Executed before other patch-hitting functions without trackData
184             bool hitPatch
185             (
186                 const polyPatch& p,
187                 int& td,
188                 const label patchI
189             );
191             //- Overridable function to handle the particle hitting a
192             //  processorPatch
193             void hitProcessorPatch
194             (
195                 const processorPolyPatch&,
196                 solidParticle::trackData& td
197             );
199             //- Overridable function to handle the particle hitting a
200             //  processorPatch without trackData
201             void hitProcessorPatch
202             (
203                 const processorPolyPatch&,
204                 int&
205             );
207             //- Overridable function to handle the particle hitting a wallPatch
208             void hitWallPatch
209             (
210                 const wallPolyPatch&,
211                 solidParticle::trackData& td
212             );
214             //- Overridable function to handle the particle hitting a wallPatch
215             //- without trackData
216             void hitWallPatch
217             (
218                 const wallPolyPatch&,
219                 int&
220             );
222             //- Overridable function to handle the particle hitting a polyPatch
223             void hitPatch
224             (
225                 const polyPatch&,
226                 solidParticle::trackData& td
227             );
229             //- Overridable function to handle the particle hitting a polyPatch
230             //- without trackData
231             void hitPatch
232             (
233                 const polyPatch&,
234                 int&
235             );
237             //- Transform the physical properties of the particle
238             //  according to the given transformation tensor
239             void transformProperties
240             (
241                 const tensor& T
242             );
244             //- Transform the physical properties of the particle
245             //  according to the given separation vector
246             void transformProperties
247             (
248                 const vector& separation
249             );
252     // I-O
254         static void readFields(Cloud<solidParticle>& c);
256         static void writeFields(const Cloud<solidParticle>& c);
259     // Ostream Operator
261         friend Ostream& operator<<(Ostream&, const solidParticle&);
265 template<>
266 inline bool contiguous<solidParticle>()
268     return true;
272 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
274 } // End namespace Foam
276 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
278 #include "solidParticleI.H"
280 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
282 #endif
284 // ************************************************************************* //