diff --git a/src/Particles/GrainParticles/grainParticles/grainParticles.cpp b/src/Particles/GrainParticles/grainParticles/grainParticles.cpp index 93e8312b..1e6cc065 100644 --- a/src/Particles/GrainParticles/grainParticles/grainParticles.cpp +++ b/src/Particles/GrainParticles/grainParticles/grainParticles.cpp @@ -324,10 +324,12 @@ bool pFlow::grainParticles::iterate() { return false; } + real damping = dynPointStruct().dampingFactor(ti); if(!rVelIntegration_().correct( ti.dt(), rVelocity_, - rAcceleration_)) + rAcceleration_, + damping)) { return false; } diff --git a/src/Particles/Insertion/insertionRegion/insertionRegion.hpp b/src/Particles/Insertion/insertionRegion/insertionRegion.hpp index 9b4a73db..d6588edd 100644 --- a/src/Particles/Insertion/insertionRegion/insertionRegion.hpp +++ b/src/Particles/Insertion/insertionRegion/insertionRegion.hpp @@ -173,7 +173,7 @@ public: inline bool insertionTime(uint32 iter, real t, real dt) const { - return tControl_.timeEvent(iter, t, dt); + return tControl_.eventTime(iter, t, dt); } uint32 numberToBeInserted(uint32 iter, real t, real dt); diff --git a/src/Particles/SphereParticles/sphereParticles/sphereParticles.cpp b/src/Particles/SphereParticles/sphereParticles/sphereParticles.cpp index 744fd97d..f63177b1 100644 --- a/src/Particles/SphereParticles/sphereParticles/sphereParticles.cpp +++ b/src/Particles/SphereParticles/sphereParticles/sphereParticles.cpp @@ -300,10 +300,12 @@ bool pFlow::sphereParticles::iterate() { return false; } + real damping = dynPointStruct().dampingFactor(ti); if(!rVelIntegration_().correct( - dt(), + ti.dt(), rVelocity_, - rAcceleration_)) + rAcceleration_, + damping)) { return false; } diff --git a/src/Particles/dynamicPointStructure/dynamicPointStructure.cpp b/src/Particles/dynamicPointStructure/dynamicPointStructure.cpp index 8d7489c9..fb465bcb 100644 --- a/src/Particles/dynamicPointStructure/dynamicPointStructure.cpp +++ b/src/Particles/dynamicPointStructure/dynamicPointStructure.cpp @@ -89,9 +89,11 @@ pFlow::dynamicPointStructure::dynamicPointStructure fatalExit; } - REPORT(1)<<"Reading globalDamping dictionary ..."<(control); - + if(control.settingsDict().containsDictionay("globalDamping")) + { + REPORT(1)<<"Reading globalDamping dictionary ..."<(control); + } } @@ -111,10 +113,6 @@ bool pFlow::dynamicPointStructure::iterate() { return pointStructure::iterate(); - /*real dt = this->dt(); - - auto& acc = time().lookupObject("acceleration"); - return correct(dt, acc);*/ } bool pFlow::dynamicPointStructure::afterIteration() @@ -122,14 +120,13 @@ bool pFlow::dynamicPointStructure::afterIteration() //const auto ti = TimeInfo(); auto succs = pointStructure::afterIteration(); - //velDamping_().applyDamping(ti, velocity_); return succs; } bool pFlow::dynamicPointStructure::predict(real dt) { - + if(!integrationPos_().predict(dt, pointPosition(), velocity_ ))return false; if(!integrationVel_().predict(dt, velocity_, acceleration_))return false; @@ -141,7 +138,7 @@ bool pFlow::dynamicPointStructure::correct(real dt) const auto& ti = TimeInfo(); if(!integrationPos_().correctPStruct(dt, *this, velocity_) )return false; - if(!integrationVel_().correct(dt, velocity_, acceleration_, velDamping_().dampingFactor(ti)))return false; + if(!integrationVel_().correct(dt, velocity_, acceleration_, dampingFactor(ti)))return false; return true; } diff --git a/src/Particles/dynamicPointStructure/dynamicPointStructure.hpp b/src/Particles/dynamicPointStructure/dynamicPointStructure.hpp index 8abd66b5..2208ca35 100644 --- a/src/Particles/dynamicPointStructure/dynamicPointStructure.hpp +++ b/src/Particles/dynamicPointStructure/dynamicPointStructure.hpp @@ -101,6 +101,16 @@ public: return acceleration_; } + inline + real dampingFactor(const timeInfo& ti)const + { + if(velDamping_) + { + return velDamping_().dampingFactor(ti); + } + return 1.0; + } + /// In the time loop before iterate bool beforeIteration() override; diff --git a/src/Particles/globalDamping/globalDamping.cpp b/src/Particles/globalDamping/globalDamping.cpp index dd45f00e..f277beec 100644 --- a/src/Particles/globalDamping/globalDamping.cpp +++ b/src/Particles/globalDamping/globalDamping.cpp @@ -23,13 +23,12 @@ Licence: pFlow::globalDamping::globalDamping(const systemControl& control) -{} -/*: +: timeControl_(control.settingsDict().subDict("globalDamping"), control.time().dt(), "damping") { const dictionary& dict = control.settingsDict().subDict("globalDamping"); - dampingFactor_ = dict.getValOrSetMin("dampingFactor", static_cast(1.0)); + dampingFactor_ = dict.getValMin("dampingFactor", static_cast(1.0)); dampingFactor_ = max( dampingFactor_ , static_cast(0.01)); @@ -41,36 +40,11 @@ pFlow::globalDamping::globalDamping(const systemControl& control) else REPORT(2)<<"Global damping "<("startTime", defStartTime)); - auto endTime = (dict.getValOrSet("endTime", largeValue)); - auto interval = dict.getVal(intervalWord); - rRange_ = realStridedRange(startTime, endTime, interval); + auto startTime = (dict.getValOrSet("startTime", defStartTime)); + auto endTime = (dict.getValOrSet("endTime", largeValue)); + auto interval = dict.getVal(intervalWord); + rRange_ = stridedRange(startTime, endTime, interval); } else @@ -68,9 +68,9 @@ pFlow::baseTimeControl::baseTimeControl pFlow::baseTimeControl::baseTimeControl ( const dictionary& dict, - const real defInterval, - const word& intervalPrefix, - const real defStartTime + const timeValue defInterval, + const word& intervalPrefix, + const timeValue defStartTime ) : intervalPrefix_(intervalPrefix) @@ -94,10 +94,10 @@ pFlow::baseTimeControl::baseTimeControl if(!isTimeStep_) { - auto startTime = (dict.getValOrSet("startTime", defStartTime)); - auto endTime = (dict.getValOrSet("endTime", largeValue)); - auto interval = dict.getValOrSet(intervalWord, defInterval); - rRange_ = realStridedRange(startTime, endTime, interval); + auto startTime = (dict.getValOrSet("startTime", defStartTime)); + auto endTime = (dict.getValOrSet("endTime", largeValue)); + auto interval = dict.getValOrSet(intervalWord, defInterval); + rRange_ = stridedRange(startTime, endTime, interval); } else @@ -119,7 +119,7 @@ pFlow::baseTimeControl::baseTimeControl(int32 start, int32 end, int32 stride, co { } -bool pFlow::baseTimeControl::timeEvent(uint32 iter, real t, real dt) const +bool pFlow::baseTimeControl::eventTime(uint32 iter, timeValue t, timeValue dt) const { if(isTimeStep_) { @@ -132,8 +132,13 @@ bool pFlow::baseTimeControl::timeEvent(uint32 iter, real t, real dt) const return false; } +bool pFlow::baseTimeControl::eventTime(const timeInfo &ti) const +{ + return eventTime(ti.iter(), ti.t(), ti.dt()); +} + bool -pFlow::baseTimeControl::isInRange(uint32 iter, real t, real dt) const +pFlow::baseTimeControl::isInRange(uint32 iter, timeValue t, timeValue dt) const { if(isTimeStep_) { @@ -145,7 +150,7 @@ pFlow::baseTimeControl::isInRange(uint32 iter, real t, real dt) const } } -pFlow::real +pFlow::timeValue pFlow::baseTimeControl::startTime() const { if(!isTimeStep_) @@ -158,7 +163,7 @@ pFlow::baseTimeControl::startTime() const return 0; } -pFlow::real +pFlow::timeValue pFlow::baseTimeControl::endTime() const { if(!isTimeStep_) @@ -171,7 +176,7 @@ pFlow::baseTimeControl::endTime() const return 0; } -pFlow::real +pFlow::timeValue pFlow::baseTimeControl::rInterval() const { if(!isTimeStep_) diff --git a/src/phasicFlow/repository/Time/baseTimeControl.hpp b/src/phasicFlow/repository/Time/baseTimeControl.hpp index cb0e5d3e..f49d97be 100644 --- a/src/phasicFlow/repository/Time/baseTimeControl.hpp +++ b/src/phasicFlow/repository/Time/baseTimeControl.hpp @@ -26,6 +26,8 @@ under the terms of GNU General Public License v3 or any other later versions. namespace pFlow { +class timeInfo; + class baseTimeControl { private: @@ -34,7 +36,7 @@ private: int32StridedRagne iRange_; - realStridedRange rRange_; + stridedRange rRange_; const word intervalPrefix_; @@ -43,14 +45,14 @@ public: baseTimeControl( const dictionary& dict, const word& intervalPrefix = "", - real defStartTime = 0.0 + timeValue defStartTime = 0.0 ); baseTimeControl( - const dictionary& dict, - const real defInterval, - const word& intervalPrefix="", - const real defStartTime=0.0); + const dictionary& dict, + const timeValue defInterval, + const word& intervalPrefix="", + const timeValue defStartTime=0.0); baseTimeControl( int32 start, @@ -64,15 +66,17 @@ public: return isTimeStep_; } - bool timeEvent(uint32 iter, real t, real dt) const; + bool eventTime(uint32 iter, timeValue t, timeValue dt) const; - bool isInRange(uint32 iter, real t, real dt) const; + bool eventTime(const timeInfo& ti)const; - real startTime() const; + bool isInRange(uint32 iter, timeValue t, timeValue dt) const; - real endTime() const; + timeValue startTime() const; - real rInterval() const; + timeValue endTime() const; + + timeValue rInterval() const; int32 startIter() const; diff --git a/src/phasicFlow/structuredData/pointStructure/pointStructure/pointSorting/pointSorting.hpp b/src/phasicFlow/structuredData/pointStructure/pointStructure/pointSorting/pointSorting.hpp index d8d9f195..2c2b596f 100644 --- a/src/phasicFlow/structuredData/pointStructure/pointStructure/pointSorting/pointSorting.hpp +++ b/src/phasicFlow/structuredData/pointStructure/pointStructure/pointSorting/pointSorting.hpp @@ -52,7 +52,7 @@ public: bool sortTime(uint32 iter, real t, real dt)const { - return performSorting_() && timeControl_.timeEvent(iter, t, dt); + return performSorting_() && timeControl_.eventTime(iter, t, dt); } uint32IndexContainer getSortedIndices(