diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H index 488fc63f3d..b7d39f61f4 100644 --- a/src/lagrangian/basic/Cloud/Cloud.H +++ b/src/lagrangian/basic/Cloud/Cloud.H @@ -207,7 +207,7 @@ public: //- Switch to specify if particles of the cloud can return // non-zero wall distance values. By default, assume // that they can't (default for wallImpactDistance in - // Particle is 0.0). + // particle is 0.0). virtual bool hasWallImpactDistance() const { return false; diff --git a/src/lagrangian/basic/particle/particle.C b/src/lagrangian/basic/particle/particle.C index c2ae9af0d2..c4ed3fd7d6 100644 --- a/src/lagrangian/basic/particle/particle.C +++ b/src/lagrangian/basic/particle/particle.C @@ -130,6 +130,14 @@ void Foam::particle::transformProperties(const vector&) {} +Foam::scalar Foam::particle::wallImpactDistance(const vector&) const +{ + Info<< "particle::wallImpactDistance" << endl; + + return 0.0; +} + + // * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * * // bool Foam::operator==(const particle& pA, const particle& pB) diff --git a/src/lagrangian/basic/particle/particle.H b/src/lagrangian/basic/particle/particle.H index f9b832348f..d6d9210d35 100644 --- a/src/lagrangian/basic/particle/particle.H +++ b/src/lagrangian/basic/particle/particle.H @@ -38,7 +38,6 @@ Description #include "labelList.H" #include "pointField.H" #include "faceList.H" -//#include "typeInfo.H" #include "OFstream.H" #include "tetPointRef.H" #include "FixedList.H" @@ -445,10 +444,6 @@ public: const label faceI ) const; - //- The nearest distance to a wall that - // the particle can be in the n direction - inline scalar wallImpactDistance(const vector& n) const; - //- Return the fraction of time-step completed inline scalar& stepFraction(); @@ -508,6 +503,10 @@ public: // 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; + // Parallel transfer diff --git a/src/lagrangian/basic/particle/particleI.H b/src/lagrangian/basic/particle/particleI.H index ebb72c7cb5..8d9b1e3f20 100644 --- a/src/lagrangian/basic/particle/particleI.H +++ b/src/lagrangian/basic/particle/particleI.H @@ -888,7 +888,6 @@ bool Foam::particle::boundaryFace(const label faceI) const inline Foam::label Foam::particle::patch(const label faceI) const { -// return cloud_.facePatch(faceI); return mesh_.boundaryMesh().whichPatch(faceI); } @@ -899,18 +898,10 @@ inline Foam::label Foam::particle::patchFace const label faceI ) const { -// return cloud_.patchFace(patchI, faceI); return mesh_.boundaryMesh()[patchI].whichFace(faceI); } -inline Foam::scalar -Foam::particle::wallImpactDistance(const vector&) const -{ - return 0.0; -} - - inline Foam::label Foam::particle::faceInterpolation() const { return faceI_; diff --git a/src/lagrangian/basic/particle/particleTemplates.C b/src/lagrangian/basic/particle/particleTemplates.C index dbe8457a5c..f497313b64 100644 --- a/src/lagrangian/basic/particle/particleTemplates.C +++ b/src/lagrangian/basic/particle/particleTemplates.C @@ -689,11 +689,15 @@ void Foam::particle::hitWallFaces tetIndices& closestTetIs ) { + typedef typename CloudType::particleType particleType; + if (!(cloud.hasWallImpactDistance() && cloud.cellHasWallFaces()[cellI_])) { return; } + particleType& p = static_cast(*this); + const faceList& pFaces = mesh_.faces(); const Foam::cell& thisCell = mesh_.cells()[cellI_]; @@ -734,7 +738,7 @@ void Foam::particle::hitWallFaces // triangle. Assuming that the wallImpactDistance // does not change as the particle or the mesh moves // forward in time. - scalar r = wallImpactDistance(nHat); + scalar r = p.wallImpactDistance(nHat); vector toPlusRNHat = to + r*nHat; diff --git a/src/lagrangian/dieselSpray/parcel/parcel.H b/src/lagrangian/dieselSpray/parcel/parcel.H index 295f4ccac7..136fd51125 100644 --- a/src/lagrangian/dieselSpray/parcel/parcel.H +++ b/src/lagrangian/dieselSpray/parcel/parcel.H @@ -52,8 +52,9 @@ class parcel { // Private member data - // Reference to the names of the liquid components - List liquidComponents_; + //- Reference to the names of the liquid components + List liquidComponents_; + // Defining data (read and written to field files) @@ -384,11 +385,11 @@ public: //- Transform the position and physical properties of the particle // according to the given transformation tensor - void transformProperties(const tensor& T); + virtual void transformProperties(const tensor& T); //- Transform the position and physical properties of the particle // according to the given separation vector - void transformProperties(const vector& separation); + virtual void transformProperties(const vector& separation); //- fix the 2D plane normal, // when particle hits a face it is slightly perturbed diff --git a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H index 2ddd8ef060..54dc027235 100644 --- a/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H +++ b/src/lagrangian/dsmc/parcels/Templates/DsmcParcel/DsmcParcel.H @@ -293,11 +293,11 @@ public: //- Transform the physical properties of the particle // according to the given transformation tensor - void transformProperties(const tensor& T); + virtual void transformProperties(const tensor& T); //- Transform the physical properties of the particle // according to the given separation vector - void transformProperties(const vector& separation); + virtual void transformProperties(const vector& separation); // I-O diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C index 10f7f5c1e8..6554dda83b 100644 --- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C @@ -157,6 +157,13 @@ Foam::CollidingCloud::~CollidingCloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template +bool Foam::CollidingCloud::hasWallImpactDistance() const +{ + return !collision().controlsWallInteraction(); +} + + template void Foam::CollidingCloud::storeState() { diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H index 68fbc0000e..efc9890fec 100644 --- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.H @@ -180,7 +180,7 @@ public: // then the wall impact distance should be zero. // Otherwise, it should be allowed to be the value from // the Parcel. - inline bool hasWallImpactDistance() const; + virtual bool hasWallImpactDistance() const; // Sub-models diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H index fb473bc0b3..bdfe101bda 100644 --- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloudI.H @@ -33,13 +33,6 @@ Foam::CollidingCloud::cloudCopy() const } -template -inline bool Foam::CollidingCloud::hasWallImpactDistance() const -{ - return !collision().controlsWallInteraction(); -} - - template inline const Foam::CollisionModel >& Foam::CollidingCloud::collision() const diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index 26cae658c6..37b8569d92 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -491,6 +491,13 @@ Foam::KinematicCloud::~KinematicCloud() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template +bool Foam::KinematicCloud::hasWallImpactDistance() const +{ + return true; +} + + template void Foam::KinematicCloud::checkParcelProperties ( diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 5a124609f6..3f628e644f 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -304,6 +304,10 @@ public: //- Return a reference to the cloud copy inline const KinematicCloud& cloudCopy() const; + //- Switch to specify if particles of the cloud can return + // non-zero wall distance values - true for kinematic parcels + virtual bool hasWallImpactDistance() const; + // References to the mesh and databases diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index 40e3efcb73..b75b20f845 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -470,6 +470,16 @@ void Foam::KinematicParcel::transformProperties } +template +Foam::scalar Foam::KinematicParcel::wallImpactDistance +( + const vector& +) const +{ + return 0.5*d_; +} + + // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * // #include "KinematicParcelIO.C" diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H index 9c230a49d5..a937ba3f7a 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H @@ -496,10 +496,6 @@ public: // Helper functions - //- The nearest distance to a wall that - // the particle can be in the n direction - inline scalar wallImpactDistance(const vector& n) const; - //- Return the index of the face to be used in the interpolation // routine inline label faceInterpolation() const; @@ -631,11 +627,15 @@ public: //- Transform the physical properties of the particle // according to the given transformation tensor - void transformProperties(const tensor& T); + virtual void transformProperties(const tensor& T); //- Transform the physical properties of the particle // according to the given separation vector - void transformProperties(const vector& separation); + 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 diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H index 74ae8492d3..754677803c 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelI.H @@ -421,16 +421,6 @@ inline Foam::vector& Foam::KinematicParcel::UTurb() } -template -inline Foam::scalar Foam::KinematicParcel::wallImpactDistance -( - const vector& -) const -{ - return 0.5*d_; -} - - template inline Foam::label Foam::KinematicParcel::faceInterpolation() const { diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H index f2d5d758aa..54bdb51b9f 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H @@ -281,9 +281,9 @@ public: bool move(trackingData&, const scalar trackTime); - void transformProperties(const tensor& T); + virtual void transformProperties(const tensor& T); - void transformProperties(const vector& separation); + virtual void transformProperties(const vector& separation); void setSitePositions(const constantProperties& constProps); diff --git a/src/lagrangian/solidParticle/solidParticle.C b/src/lagrangian/solidParticle/solidParticle.C index e477e3bdc4..19dca67cab 100644 --- a/src/lagrangian/solidParticle/solidParticle.C +++ b/src/lagrangian/solidParticle/solidParticle.C @@ -171,4 +171,10 @@ void Foam::solidParticle::transformProperties(const vector& separation) } +Foam::scalar Foam::solidParticle::wallImpactDistance(const vector&) const +{ + return 0.5*d_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/solidParticle/solidParticle.H b/src/lagrangian/solidParticle/solidParticle.H index 017b05a71b..2b07f8c0a7 100644 --- a/src/lagrangian/solidParticle/solidParticle.H +++ b/src/lagrangian/solidParticle/solidParticle.H @@ -174,10 +174,6 @@ public: //- Return velocity inline const vector& U() const; - //- The nearest distance to a wall that - // the particle can be in the n direction - inline scalar wallImpactDistance(const vector& n) const; - // Tracking @@ -223,17 +219,15 @@ public: //- Transform the physical properties of the particle // according to the given transformation tensor - void transformProperties - ( - const tensor& T - ); + virtual void transformProperties(const tensor& T); //- Transform the physical properties of the particle // according to the given separation vector - void transformProperties - ( - const vector& separation - ); + 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 diff --git a/src/lagrangian/solidParticle/solidParticleCloud.C b/src/lagrangian/solidParticle/solidParticleCloud.C index 364f448546..4292a97ccf 100644 --- a/src/lagrangian/solidParticle/solidParticleCloud.C +++ b/src/lagrangian/solidParticle/solidParticleCloud.C @@ -28,14 +28,6 @@ License #include "volFields.H" #include "interpolationCellPoint.H" -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -// defineParticleTypeNameAndDebug(solidParticle, 0); -// defineTemplateTypeNameAndDebug(Cloud, 0); -} - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::solidParticleCloud::solidParticleCloud @@ -71,6 +63,12 @@ Foam::solidParticleCloud::solidParticleCloud // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +bool Foam::solidParticleCloud::hasWallImpactDistance() const +{ + return true; +} + + void Foam::solidParticleCloud::move(const dimensionedVector& g) { const volScalarField& rho = mesh_.lookupObject("rho"); diff --git a/src/lagrangian/solidParticle/solidParticleCloud.H b/src/lagrangian/solidParticle/solidParticleCloud.H index d99d7b0eee..c5dffdd4aa 100644 --- a/src/lagrangian/solidParticle/solidParticleCloud.H +++ b/src/lagrangian/solidParticle/solidParticleCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -94,7 +94,7 @@ public: // Access - inline bool hasWallImpactDistance() const; + virtual bool hasWallImpactDistance() const; inline const fvMesh& mesh() const; diff --git a/src/lagrangian/solidParticle/solidParticleCloudI.H b/src/lagrangian/solidParticle/solidParticleCloudI.H index 15dd6d7ebf..76c36a37ac 100644 --- a/src/lagrangian/solidParticle/solidParticleCloudI.H +++ b/src/lagrangian/solidParticle/solidParticleCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,12 +25,6 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -inline bool Foam::solidParticleCloud::hasWallImpactDistance() const -{ - return true; -} - - inline const Foam::fvMesh& Foam::solidParticleCloud::mesh() const { return mesh_; diff --git a/src/lagrangian/solidParticle/solidParticleI.H b/src/lagrangian/solidParticle/solidParticleI.H index 83f5120ea7..ec661f95ee 100644 --- a/src/lagrangian/solidParticle/solidParticleI.H +++ b/src/lagrangian/solidParticle/solidParticleI.H @@ -93,12 +93,6 @@ inline Foam::scalar Foam::solidParticle::d() const } -inline Foam::scalar Foam::solidParticle::wallImpactDistance(const vector&) const -{ - return 0.5*d_; -} - - inline const Foam::vector& Foam::solidParticle::U() const { return U_;