diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index b72af41e731114200cd0ccad826095f60c5b2256..486c0959dddfb299e64c1c7747ebc2ff3f98a62f 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -99,6 +99,8 @@ void Foam::KinematicCloud<ParcelType>::evolveCloud() if (nSubCycles > 1) { + Info<< " " << nSubCycles << " move-collide subCycles" << endl; + subCycleTime moveCollideSubCycle ( const_cast<Time&>(this->db().time()), diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C index 76ca569acd32c28908e6ce0f53250e62fbafec63..e4c4c299e3f1f796162177cbb412a816347c904b 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairCollision.C @@ -521,24 +521,29 @@ Foam::PairCollision<CloudType>::~PairCollision() template<class CloudType> Foam::label Foam::PairCollision<CloudType>::nSubCycles() const { + label nSubCycles = 1; + if (pairModel_->controlsTimestep()) { - label nSubCycles = returnReduce + label nPairSubCycles = returnReduce ( pairModel_->nSubCycles(), maxOp<label>() ); - if(nSubCycles > 1) - { - Info<< " " << nSubCycles << " move-collide subCycles" << endl; - } - - return nSubCycles; + nSubCycles = max(nSubCycles, nPairSubCycles); } - else + + if (wallModel_->controlsTimestep()) { - return 1; + label nWallSubCycles = returnReduce + ( + wallModel_->nSubCycles(), maxOp<label>() + ); + + nSubCycles = max(nSubCycles, nWallSubCycles); } + + return nSubCycles; } 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 2c86e64ad401fa896ee676fe6417ab5dfcbef3dc..207e657826728a5f8f8b5a1e94079e43d0e90eb2 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 @@ -30,12 +30,12 @@ License template <class CloudType> void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties ( - scalar& RMin, + scalar& rMin, scalar& rhoMax, scalar& UMagMax ) const { - RMin = VGREAT; + rMin = VGREAT; rhoMax = -VGREAT; UMagMax = -VGREAT; @@ -44,7 +44,7 @@ void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties const typename CloudType::parcelType& p = iter(); // Finding minimum diameter to avoid excessive arithmetic - RMin = min(p.d(), RMin); + rMin = min(p.d(), rMin); rhoMax = max(p.rho(), rhoMax); @@ -57,11 +57,8 @@ void Foam::WallSpringSliderDashpot<CloudType>::findMinMaxProperties // Transform the minimum diameter into minimum radius // rMin = dMin/2 - // then rMin into minimum R, - // 1/RMin = 1/rMin + 1/rMin, - // RMin = rMin/2 = dMin/4 - RMin /= 4.0; + rMin /= 2.0; } @@ -109,27 +106,31 @@ bool Foam::WallSpringSliderDashpot<CloudType>::controlsTimestep() const template<class CloudType> Foam::label Foam::WallSpringSliderDashpot<CloudType>::nSubCycles() const { - // if (!(this->owner().size())) - // { - // return 1; - // } + if (!(this->owner().size())) + { + return 1; + } - // scalar RMin; - // scalar rhoMax; - // scalar UMagMax; + scalar rMin; + scalar rhoMax; + scalar UMagMax; - // findMinMaxProperties(RMin, rhoMax, UMagMax); + findMinMaxProperties(rMin, rhoMax, UMagMax); + + scalar pNu = this->owner().constProps().poissonsRatio(); - // // Note: pi^(7/5)*(5/4)^(2/5) = 5.429675 - // scalar minCollisionDeltaT = - // 5.429675 - // *RMin - // *pow(rhoMax/(Estar_*sqrt(UMagMax) + VSMALL), 0.4) - // /collisionResolutionSteps_; + scalar pE = this->owner().constProps().youngsModulus(); + + scalar Estar = 1/((1 - sqr(pNu))/pE + (1 - sqr(nu_))/E_); - // return ceil(this->owner().time().deltaTValue()/minCollisionDeltaT); + // Note: pi^(7/5)*(5/4)^(2/5) = 5.429675 + scalar minCollisionDeltaT = + 5.429675 + *rMin + *pow(rhoMax/(Estar*sqrt(UMagMax) + VSMALL), 0.4) + /collisionResolutionSteps_; - return 1; + return ceil(this->owner().time().deltaTValue()/minCollisionDeltaT); } 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 49a99397f2aeff9ba44290defcf6c227beb04984..e01ae072eea08b247df241edb5486f8eb8d1fb1d 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 @@ -76,7 +76,7 @@ class WallSpringSliderDashpot //- allowable timestep void findMinMaxProperties ( - scalar& RMin, + scalar& rMin, scalar& rhoMax, scalar& vMagMax ) const;