/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Class Foam::solidParticle Description Simple solid spherical particle class with one-way coupling with the continuous phase. SourceFiles solidParticleI.H solidParticle.C solidParticleIO.C \*---------------------------------------------------------------------------*/ #ifndef solidParticle_H #define solidParticle_H #include "particle.H" #include "IOstream.H" #include "autoPtr.H" #include "interpolationCellPoint.H" #include "contiguous.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { class solidParticleCloud; /*---------------------------------------------------------------------------*\ Class solidParticle Declaration \*---------------------------------------------------------------------------*/ class solidParticle : public particle { // Private data //- Size in bytes of the fields static const std::size_t sizeofFields_; //- Diameter scalar d_; //- Velocity of parcel vector U_; public: friend class Cloud; //- Class used to pass tracking data to the trackToFace function class trackingData : public particle::TrackingData { // Interpolators for continuous phase fields const interpolationCellPoint& rhoInterp_; const interpolationCellPoint& UInterp_; const interpolationCellPoint& nuInterp_; //- Local gravitational or other body-force acceleration const vector& g_; public: // Constructors inline trackingData ( solidParticleCloud& spc, const interpolationCellPoint& rhoInterp, const interpolationCellPoint& UInterp, const interpolationCellPoint& nuInterp, const vector& g ); // Member functions inline const interpolationCellPoint& rhoInterp() const; inline const interpolationCellPoint& UInterp() const; inline const interpolationCellPoint& nuInterp() const; inline const vector& g() const; }; // Constructors //- Construct from components inline solidParticle ( const polyMesh& mesh, const vector& position, const label cellI, const label tetFaceI, const label tetPtI, const scalar d, const vector& U ); //- Construct from Istream solidParticle ( const polyMesh& mesh, Istream& is, bool readFields = true ); //- Construct and return a clone virtual autoPtr clone() const { return autoPtr(new solidParticle(*this)); } //- Factory class to read-construct particles used for // parallel transfer class iNew { const polyMesh& mesh_; public: iNew(const polyMesh& mesh) : mesh_(mesh) {} autoPtr operator()(Istream& is) const { return autoPtr ( new solidParticle(mesh_, is, true) ); } }; // Member Functions // Access //- Return diameter inline scalar d() const; //- Return velocity inline const vector& U() const; // Tracking //- Move bool move(trackingData&, const scalar); // Patch interactions //- Overridable function to handle the particle hitting a patch // Executed before other patch-hitting functions bool hitPatch ( const polyPatch&, trackingData& td, const label patchI, const scalar trackFraction, const tetIndices& tetIs ); //- Overridable function to handle the particle hitting a // processorPatch void hitProcessorPatch ( const processorPolyPatch&, trackingData& td ); //- Overridable function to handle the particle hitting a wallPatch void hitWallPatch ( const wallPolyPatch&, trackingData& td, const tetIndices& ); //- Overridable function to handle the particle hitting a polyPatch void hitPatch ( const polyPatch&, trackingData& td ); //- Transform the physical properties of the particle // according to the given transformation tensor virtual void transformProperties(const tensor& T); //- Transform the physical properties of the particle // according to the given separation vector virtual void transformProperties(const vector& separation); //- The nearest distance to a wall that // the particle can be in the n direction virtual scalar wallImpactDistance(const vector& n) const; // I-O static void readFields(Cloud& c); static void writeFields(const Cloud& c); // Ostream Operator friend Ostream& operator<<(Ostream&, const solidParticle&); }; template<> inline bool contiguous() { return true; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "solidParticleI.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //