diff --git a/src/lagrangian/basic/InteractionLists/InteractionLists.C b/src/lagrangian/basic/InteractionLists/InteractionLists.C index a12e3392583184a1a86508fced06dbf79ae61ec6..1dcfed86c3c67e410380441e6e44a92352de8f56 100644 --- a/src/lagrangian/basic/InteractionLists/InteractionLists.C +++ b/src/lagrangian/basic/InteractionLists/InteractionLists.C @@ -372,7 +372,8 @@ void Foam::InteractionLists<ParticleType>::fillReferredParticleCloud() { forAll(referredParticles_, refCellI) { - const IDLList<ParticleType>& refCell = referredParticles_[refCellI]; + const IDLList<ParticleType>& refCell = + referredParticles_[refCellI]; forAllConstIter(typename IDLList<ParticleType>, refCell, iter) { @@ -383,6 +384,43 @@ void Foam::InteractionLists<ParticleType>::fillReferredParticleCloud() } +template<class ParticleType> +void Foam::InteractionLists<ParticleType>::prepareWallDataToRefer() +{ + referredWallData_.setSize + ( + wallFaceIndexAndTransformToDistribute_.size() + ); + + const volVectorField& U = mesh_.lookupObject<volVectorField>(UName_); + + forAll(referredWallData_, rWVI) + { + const labelPair& wfiat = wallFaceIndexAndTransformToDistribute_[rWVI]; + + label wallFaceIndex = globalTransforms_.index(wfiat); + + // const vector& transform = globalTransforms_.transform + // ( + // globalTransforms_.transformIndex(wfiat) + // ); + + label patchI = mesh_.boundaryMesh().patchID() + [ + wallFaceIndex - mesh_.nInternalFaces() + ]; + + label patchFaceI = + wallFaceIndex + - mesh_.boundaryMesh()[patchI].start(); + + // Need to transform velocity when tensor transforms are + // supported + referredWallData_[rWVI] = U.boundaryField()[patchI][patchFaceI]; + } +} + + template<class ParticleType> void Foam::InteractionLists<ParticleType>::writeReferredWallFaces() const { @@ -394,27 +432,23 @@ void Foam::InteractionLists<ParticleType>::writeReferredWallFaces() const forAll(referredWallFaces_, rWFI) { - const Tuple2<face, pointField>& rwf = referredWallFaces_[rWFI]; + const referredWallFace& rwf = referredWallFaces_[rWFI]; - forAll(rwf.first(), fPtI) + forAll(rwf, fPtI) { - meshTools::writeOBJ - ( - str, - rwf.second()[rwf.first()[fPtI]] - ); + meshTools::writeOBJ(str, rwf.points()[rwf[fPtI]]); } str<< 'f'; - forAll(rwf.first(), fPtI) + forAll(rwf, fPtI) { str<< ' ' << fPtI + offset; } str<< nl; - offset += rwf.first().size(); + offset += rwf.size(); } } @@ -426,7 +460,8 @@ Foam::InteractionLists<ParticleType>::InteractionLists ( const polyMesh& mesh, scalar maxDistance, - Switch writeCloud + Switch writeCloud, + const word& UName ) : mesh_(mesh), @@ -443,9 +478,12 @@ Foam::InteractionLists<ParticleType>::InteractionLists cellIndexAndTransformToDistribute_(), wallFaceIndexAndTransformToDistribute_(), referredWallFaces_(), + UName_(UName), + referredWallData_(), referredParticles_() { - Info<< "Building InteractionLists" << endl; + Info<< "Building InteractionLists with interaction distance " + << maxDistance_ << endl; Random rndGen(419715); @@ -704,6 +742,10 @@ Foam::InteractionLists<ParticleType>::InteractionLists // Determine which wall faces to refer + // The referring of wall patch data relies on patches having the same + // index on each processor. + mesh_.boundaryMesh().checkParallelSync(true); + // Determine the index of all of the wall faces on this processor DynamicList<label> localWallFaces; @@ -913,9 +955,9 @@ Foam::InteractionLists<ParticleType>::InteractionLists // Refer wall faces to the appropriate processor referredWallFaces_.setSize(wallFaceIndexAndTransformToDistribute_.size()); - forAll(referredWallFaces_, rwfI) + forAll(referredWallFaces_, rWFI) { - const labelPair& wfiat = wallFaceIndexAndTransformToDistribute_[rwfI]; + const labelPair& wfiat = wallFaceIndexAndTransformToDistribute_[rWFI]; label wallFaceIndex = globalTransforms_.index(wfiat); @@ -924,18 +966,19 @@ Foam::InteractionLists<ParticleType>::InteractionLists globalTransforms_.transformIndex(wfiat) ); - Tuple2<face, pointField>& rwf = referredWallFaces_[rwfI]; - - const labelList& facePts = mesh_.faces()[wallFaceIndex]; + const face& f = mesh_.faces()[wallFaceIndex]; - rwf.first() = face(identity(facePts.size())); + label patchI = mesh_.boundaryMesh().patchID() + [ + wallFaceIndex - mesh_.nInternalFaces() + ]; - rwf.second().setSize(facePts.size()); - - forAll(facePts, fPtI) - { - rwf.second()[fPtI] = mesh_.points()[facePts[fPtI]] - transform; - } + referredWallFaces_[rWFI] = referredWallFace + ( + face(identity(f.size())), + f.points(mesh_.points()) - transform, + patchI + ); } wallFaceMap().distribute(referredWallFaces_); @@ -1034,6 +1077,8 @@ void Foam::InteractionLists<ParticleType>::sendReferredData PstreamBuffers& pBufs ) { + prepareWallDataToRefer(); + prepareParticlesToRefer(cellOccupancy); for (label domain = 0; domain < Pstream::nProcs(); domain++) @@ -1057,8 +1102,10 @@ void Foam::InteractionLists<ParticleType>::sendReferredData } } - // Start sending and receiving but do not block. - pBufs.finishedSends(false); + // Using the mapDistribute to start sending and receiving the + // buffer but not block, i.e. it is calling + // pBufs.finishedSends(false); + wallFaceMap().send(pBufs, referredWallData_); }; @@ -1092,6 +1139,8 @@ void Foam::InteractionLists<ParticleType>::receiveReferredData } fillReferredParticleCloud(); + + wallFaceMap().receive(pBufs, referredWallData_); } diff --git a/src/lagrangian/basic/InteractionLists/InteractionLists.H b/src/lagrangian/basic/InteractionLists/InteractionLists.H index 7c7e405e13660c3653660e71d75aa32e5a76ed39..fea63c4c216baea7cf831fcdb462ac6d30b246b5 100644 --- a/src/lagrangian/basic/InteractionLists/InteractionLists.H +++ b/src/lagrangian/basic/InteractionLists/InteractionLists.H @@ -61,6 +61,7 @@ SourceFiles #include "polyMesh.H" #include "globalIndexAndTransform.H" +#include "referredWallFace.H" #include "indexedOctree.H" #include "Tuple2.H" #include "treeDataCell.H" @@ -142,7 +143,13 @@ class InteractionLists List<labelPair> wallFaceIndexAndTransformToDistribute_; //- Referred wall faces - List<Tuple2<face, pointField> > referredWallFaces_; + List<referredWallFace> referredWallFaces_; + + //- Velocity field name, default to "U" + const word UName_; + + //- Referred wall face velocity field values; + List<vector> referredWallData_; //- Referred particle container List<IDLList<ParticleType> > referredParticles_; @@ -187,6 +194,10 @@ class InteractionLists //- Fill the referredParticles so that it will be written out void fillReferredParticleCloud(); + //- Populate the referredWallData container with data that + // will be referred. + void prepareWallDataToRefer(); + //- Write the referred wall faces out for debug void writeReferredWallFaces() const; @@ -206,7 +217,8 @@ public: ( const polyMesh& mesh, scalar maxDistance, - Switch writeCloud = false + Switch writeCloud = false, + const word& UName = "U" ); // Destructor @@ -270,7 +282,10 @@ public: wallFaceIndexAndTransformToDistribute() const; //- Return access to the referred wall faces - const List<Tuple2<face, pointField> >& referredWallFaces() const; + const List<referredWallFace>& referredWallFaces() const; + + //- Return access to the referred wall data + const List<vector>& referredWallData() const; //- Return access to the referred particle container inline const List<IDLList<ParticleType> >& @@ -278,7 +293,6 @@ public: //- Return non-const access to the referred particle container inline List<IDLList<ParticleType> >& referredParticles(); - }; diff --git a/src/lagrangian/basic/InteractionLists/InteractionListsI.H b/src/lagrangian/basic/InteractionLists/InteractionListsI.H index 5175ecdb465cfd64213ce3375f7383cdb63b9196..ad28f696c5b1df3b6204d092889aefa1e49ccc79 100644 --- a/src/lagrangian/basic/InteractionLists/InteractionListsI.H +++ b/src/lagrangian/basic/InteractionLists/InteractionListsI.H @@ -121,13 +121,21 @@ wallFaceIndexAndTransformToDistribute() const template<class ParticleType> -const Foam::List<Foam::Tuple2<Foam::face, Foam::pointField> >& +const Foam::List<Foam::referredWallFace>& Foam::InteractionLists<ParticleType>::referredWallFaces() const { return referredWallFaces_; } +template<class ParticleType> +const Foam::List<Foam::vector>& +Foam::InteractionLists<ParticleType>::referredWallData() const +{ + return referredWallData_; +} + + template<class ParticleType> const Foam::List<Foam::IDLList<ParticleType> >& Foam::InteractionLists<ParticleType>::referredParticles() const diff --git a/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.C b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.C new file mode 100644 index 0000000000000000000000000000000000000000..8b836e0ad8a0d22f8bdb2de33bcd2135d3b18917 --- /dev/null +++ b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.C @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ 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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "referredWallFace.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::referredWallFace::referredWallFace() +: + face(), + pts_(), + patchI_() +{} + + +Foam::referredWallFace::referredWallFace +( + const face& f, + const pointField& pts, + label patchI +) +: + face(f), + pts_(pts), + patchI_(patchI) +{ + if (this->size() != pts_.size()) + { + FatalErrorIn + ( + "Foam::referredWallFace::referredWallFace" + "(" + "const face& f, " + "const pointField& pts, " + "label patchI" + ")" + ) << "Face and pointField are not the same size. " << nl << (*this) + << abort(FatalError); + } +} + + +Foam::referredWallFace::referredWallFace(const referredWallFace& rWF) +: + face(rWF), + pts_(rWF.pts_), + patchI_(rWF.patchI_) +{ + if (this->size() != pts_.size()) + { + FatalErrorIn + ( + "Foam::referredWallFace::referredWallFace" + "(" + "const referredWallFace& rWF" + ")" + ) << "Face and pointField are not the same size. " << nl << (*this) + << abort(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::referredWallFace::~referredWallFace() +{} + + +// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * // + +bool Foam::referredWallFace::operator==(const referredWallFace& rhs) const +{ + return + ( + static_cast<const face&>(rhs) == static_cast<face>(*this) + && rhs.pts_ == pts_ + && rhs.patchI_ == patchI_ + ); +} + + +bool Foam::referredWallFace::operator!=(const referredWallFace& rhs) const +{ + return !(*this == rhs); +} + + +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // + +Foam::Istream& Foam::operator>>(Istream& is, referredWallFace& rWF) +{ + is >> static_cast<face&>(rWF) >> rWF.pts_ >> rWF.patchI_; + + // Check state of Istream + is.check + ( + "Foam::Istream& " + "Foam::operator>>(Foam::Istream&, Foam::referredWallFace&)" + ); + + return is; +} + + +Foam::Ostream& Foam::operator<<(Ostream& os, const referredWallFace& rWF) +{ + os << static_cast<const face&>(rWF) << token::SPACE + << rWF.pts_ << token::SPACE + << rWF.patchI_; + + // Check state of Ostream + os.check + ( + "Foam::Ostream& Foam::operator<<(Foam::Ostream&, " + "const Foam::referredWallFace&)" + ); + + return os; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.H b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.H new file mode 100644 index 0000000000000000000000000000000000000000..4806be711f5a8d1b1a024458aaf6b13029cc660c --- /dev/null +++ b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFace.H @@ -0,0 +1,139 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ 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 <http://www.gnu.org/licenses/>. + +Class + Foam::referredWallFace + +Description + Storage for referred wall faces. Stores patch index, face and + associated points + +SourceFiles + referredWallFaceI.H + referredWallFace.C + +\*---------------------------------------------------------------------------*/ + +#ifndef referredWallFace_H +#define referredWallFace_H + +#include "face.H" +#include "pointField.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class Istream; +class Ostream; + +// Forward declaration of friend functions and operators +class referredWallFace; +Istream& operator>>(Istream&, referredWallFace&); +Ostream& operator<<(Ostream&, const referredWallFace&); + + +/*---------------------------------------------------------------------------*\ + Class referredWallFace Declaration +\*---------------------------------------------------------------------------*/ + +class referredWallFace +: + public face +{ + // Private data + + //- Points of face + pointField pts_; + + //- Index of originating patch + label patchI_; + + +public: + + // Constructors + + //- Construct null + referredWallFace(); + + //- Construct from components + referredWallFace + ( + const face& f, + const pointField& pts, + label patchI + ); + + //- Construct as copy + referredWallFace(const referredWallFace&); + + + //- Destructor + ~referredWallFace(); + + + // Member Functions + + // Access + + //- Return access to the stored points + inline const pointField& points() const; + + //- Return non-const access to the stored points + inline pointField& points(); + + //- Return access to the patch index + inline label patchIndex() const; + + //- Return non-const access to the patch index + inline label& patchIndex(); + + + // Member Operators + + bool operator==(const referredWallFace&) const; + bool operator!=(const referredWallFace&) const; + + // IOstream Operators + + friend Istream& operator>>(Istream&, referredWallFace&); + friend Ostream& operator<<(Ostream&, const referredWallFace&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "referredWallFaceI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFaceI.H b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFaceI.H new file mode 100644 index 0000000000000000000000000000000000000000..3cf42d8eb8b0f5d87bbe50f6f9f66a83b2b6f24a --- /dev/null +++ b/src/lagrangian/basic/InteractionLists/referredWallFace/referredWallFaceI.H @@ -0,0 +1,54 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. + \\/ 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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::pointField& Foam::referredWallFace::points() const +{ + return pts_; +} + + +Foam::pointField& Foam::referredWallFace::points() +{ + return pts_; +} + + +Foam::label Foam::referredWallFace::patchIndex() const +{ + return patchI_; +} + + +Foam::label& Foam::referredWallFace::patchIndex() +{ + return patchI_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/basic/Make/files b/src/lagrangian/basic/Make/files index 79f19bf48034b98297595a523b934324940c9db5..574adb603c93189c8ec67302fcb409acc4dd9c50 100644 --- a/src/lagrangian/basic/Make/files +++ b/src/lagrangian/basic/Make/files @@ -5,5 +5,6 @@ $(passiveParticle)/passiveParticleCloud.C $(indexedParticle)/indexedParticleCloud.C InteractionLists/globalIndexAndTransform/globalIndexAndTransform.C +InteractionLists/referredWallFace/referredWallFace.C LIB = $(FOAM_LIBBIN)/liblagrangian diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C index e4c4c299e3f1f796162177cbb412a816347c904b..967acf06401671c9cb4c47dd9e560f9d5ccc01d3 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C @@ -269,18 +269,16 @@ void Foam::PairCollision<CloudType>::wallInteraction() forAll(cellRefWallFaces, rWFI) { - const Tuple2<face, pointField>& rwf = + const referredWallFace& rwf = il_.referredWallFaces()[cellRefWallFaces[rWFI]]; - const face& f = rwf.first(); + const pointField& pts = rwf.points(); - const pointField& pts = rwf.second(); - - pointHit nearest = f.nearestPoint(pos, pts); + pointHit nearest = rwf.nearestPoint(pos, pts); if (nearest.distance() < r) { - vector normal = f.normal(pts); + vector normal = rwf.normal(pts); normal /= mag(normal); diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H index e0ccd6c9b156a0ef69dc9a5e056905680780aad0..7088c4df05116381982734d5155c62b37bb78700 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallModel/WallModel.H @@ -129,7 +129,7 @@ public: // allowable timestep virtual label nSubCycles() const = 0; - //- Calculate the wall interaction between parcels + //- Calculate the wall interaction for a parcel virtual void evaluateWall ( typename CloudType::parcelType& p, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.C index 207e657826728a5f8f8b5a1e94079e43d0e90eb2..ba22ef38429ea87d3e9447423b3d2fb7a7d6dcb6 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.C @@ -61,6 +61,32 @@ void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties rMin /= 2.0; } +template <class CloudType> +void Foam::WallSpringSliderDashpot<CloudType>::evaluateWall +( + typename CloudType::parcelType& p, + const point& site, + scalar pNu, + scalar pE, + scalar Estar, + scalar kN +) const +{ + vector r_PW = p.position() - site; + + scalar normalOverlapMag = p.d()/2 - mag(r_PW); + + vector rHat_PW = r_PW/(mag(r_PW) + VSMALL); + + scalar etaN = alpha_*sqrt(p.mass()*kN)*pow025(normalOverlapMag); + + vector fN_PW = + rHat_PW + *(kN*pow(normalOverlapMag, b_) - etaN*(p.U() & rHat_PW)); + + p.f() += fN_PW; +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -152,38 +178,14 @@ void Foam::WallSpringSliderDashpot<CloudType>::evaluateWall forAll(flatSites, siteI) { - vector r_PW = p.position() - flatSites[siteI]; - - scalar normalOverlapMag = p.d()/2 - mag(r_PW); - - vector rHat_PW = r_PW/(mag(r_PW) + VSMALL); - - scalar etaN = alpha_*sqrt(p.mass()*kN)*pow025(normalOverlapMag); - - vector fN_PW = - rHat_PW - *(kN*pow(normalOverlapMag, b_) - etaN*(p.U() & rHat_PW)); - - p.f() += fN_PW; + evaluateWall(p, flatSites[siteI], pNu, pE, Estar, kN); } - // Treating sharp sites like flat sites - forAll(sharpSites, siteI) { - vector r_PW = p.position() - sharpSites[siteI]; - - scalar normalOverlapMag = p.d()/2 - mag(r_PW); - - vector rHat_PW = r_PW/(mag(r_PW) + VSMALL); - - scalar etaN = alpha_*sqrt(p.mass()*kN)*pow025(normalOverlapMag); - - vector fN_PW = - rHat_PW - *(kN*pow(normalOverlapMag, b_) - etaN*(p.U() & rHat_PW)); + // Treating sharp sites like flat sites - p.f() += fN_PW; + evaluateWall(p, sharpSites[siteI], pNu, pE, Estar, kN); } } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H index e01ae072eea08b247df241edb5486f8eb8d1fb1d..fcc83e22e6cb6278b13ba01960cfce9883a6fae9 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H @@ -81,6 +81,18 @@ class WallSpringSliderDashpot scalar& vMagMax ) const; + //- Calculate the wall interaction for a parcel at a given site + void evaluateWall + ( + typename CloudType::parcelType& p, + const point& site, + scalar pNu, + scalar pE, + scalar Estar, + scalar kN + ) const; + + public: //- Runtime type information @@ -108,7 +120,7 @@ public: // allowable timestep virtual label nSubCycles() const; - //- Calculate the wall interaction between parcels + //- Calculate the wall interaction for a parcel virtual void evaluateWall ( typename CloudType::parcelType& p,