Merge branch 'PhasicFlow:main' into main

This commit is contained in:
Omid Khosravi 2023-03-17 00:17:23 +03:30 committed by GitHub
commit fe5f550d17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 135 additions and 68 deletions

View File

@ -25,8 +25,6 @@ bool pFlow::sphereDEMSystem::loop()
do do
{ {
Control().timers().start();
// //
if(! insertion_().insertParticles( if(! insertion_().insertParticles(
@ -55,9 +53,6 @@ bool pFlow::sphereDEMSystem::loop()
particles_->afterIteration(); particles_->afterIteration();
geometry_->afterIteration(); geometry_->afterIteration();
Control().timers().end();
}while(Control()++); }while(Control()++);
@ -80,9 +75,11 @@ pFlow::sphereDEMSystem::sphereDEMSystem(
REPORT(0)<< "\nCreating surface geometry for sphereDEMSystem . . . "<<endREPORT; REPORT(0)<< "\nCreating surface geometry for sphereDEMSystem . . . "<<endREPORT;
geometry_ = geometry::create(Control(), Property()); geometry_ = geometry::create(Control(), Property());
REPORT(0)<<"\nReading sphere particles . . ."<<endREPORT; REPORT(0)<<"\nReading sphere particles . . ."<<endREPORT;
particles_ = makeUnique<sphereFluidParticles>(Control(), Property()); particles_ = makeUnique<sphereFluidParticles>(Control(), Property());
insertion_ = makeUnique<sphereInsertion>( insertion_ = makeUnique<sphereInsertion>(
Control().caseSetup().path()+insertionFile__, Control().caseSetup().path()+insertionFile__,
particles_(), particles_(),

View File

@ -54,6 +54,13 @@ pFlow::sphereFluidParticles::sphereFluidParticles(
) )
{} {}
bool pFlow::sphereFluidParticles::beforeIteration()
{
sphereParticles::beforeIteration();
zeroFluidForce_H();
zeroFluidTorque_H();
return true;
}
bool pFlow::sphereFluidParticles::iterate() bool pFlow::sphereFluidParticles::iterate()

View File

@ -48,12 +48,24 @@ protected:
realx3PointField_HD& fluidTorque_; realx3PointField_HD& fluidTorque_;
void zeroFluidForce_H()
{
fluidForce_.fillHost(zero3);
}
void zeroFluidTorque_H()
{
fluidTorque_.fillHost(zero3);
}
public: public:
/// construct from systemControl and property /// construct from systemControl and property
sphereFluidParticles(systemControl &control, const property& prop); sphereFluidParticles(systemControl &control, const property& prop);
/// before iteration step
bool beforeIteration() override;
/// iterate particles /// iterate particles
bool iterate() override; bool iterate() override;

View File

@ -65,7 +65,6 @@ if(!cmds.parse(argc, argv)) return 0;
do do
{ {
Control.timers().start();
if(! sphInsertion.insertParticles( if(! sphInsertion.insertParticles(
Control.time().currentTime(), Control.time().currentTime(),
@ -94,8 +93,6 @@ if(!cmds.parse(argc, argv)) return 0;
surfGeometry.afterIteration(); surfGeometry.afterIteration();
Control.timers().end();
}while(Control++); }while(Control++);
REPORT(0)<<"\nEnd of time loop.\n"<<endREPORT; REPORT(0)<<"\nEnd of time loop.\n"<<endREPORT;

View File

@ -72,8 +72,11 @@ bool pFlow::sphereParticles::diameterMassInertiaPropId
bool pFlow::sphereParticles::initializeParticles() bool pFlow::sphereParticles::initializeParticles()
{ {
int32IndexContainer indices(0, shapeName_.size()); int32IndexContainer indices(
0,
static_cast<int32>(shapeName_.size()));
return insertSphereParticles(shapeName_, indices); return insertSphereParticles(shapeName_, indices);
} }
@ -148,7 +151,7 @@ bool pFlow::sphereParticles::insertSphereParticles(
} }
auto len = names.size(); auto len = names.size();
realVector diamVec(len, RESERVE()); realVector diamVec(len, RESERVE());
realVector massVec(len, RESERVE()); realVector massVec(len, RESERVE());
realVector IVec(len, RESERVE()); realVector IVec(len, RESERVE());
@ -160,6 +163,7 @@ bool pFlow::sphereParticles::insertSphereParticles(
ForAll(i, names ) ForAll(i, names )
{ {
if (diameterMassInertiaPropId(names[i], d, m, I, pId)) if (diameterMassInertiaPropId(names[i], d, m, I, pId))
{ {
diamVec.push_back(d); diamVec.push_back(d);
@ -297,7 +301,6 @@ pFlow::sphereParticles::sphereParticles(
fatalExit; fatalExit;
} }
if(rVelIntegration_->needSetInitialVals()) if(rVelIntegration_->needSetInitialVals())
{ {
@ -320,6 +323,7 @@ pFlow::sphereParticles::sphereParticles(
} }
if(!initializeParticles()) if(!initializeParticles())
{ {
fatalExit; fatalExit;

View File

@ -77,18 +77,24 @@ bool pFlow::Timer::write(iOstream& os, bool subTree)const
if(lvl==0) if(lvl==0)
os<<greenColor<<boldChar; os<<greenColor<<boldChar;
else if(master())
os<<yellowColor;
os<<name_; os<<name_;
if(timerActive()) auto tt = accTimersTotal();
if(master()) if(abs(tt)>smallValue)
os<<" execution time (s): total ("<< {
totalTime()<<"), av. ("<< os<<" execution time (s): total ("<<
averageTime()<<")."; tt<<")";
else
os<<" execution time (s): total ("<< if(!master())
cyanText(totalTime())<<"), av. ("<< {
cyanText(averageTime())<<")."; os<<", av. ("<<
averageTime()<<").";
}
}
os<<defaultColor; os<<defaultColor;
os<<'\n'; os<<'\n';

View File

@ -109,31 +109,40 @@ public:
accTime_ += lastTime_; accTime_ += lastTime_;
} }
inline
bool timerActive()const bool timerActive()const
{ {
return numIteration_!=0; return numIteration_!=0;
} }
inline
real lastTime()const real lastTime()const
{ {
return lastTime_; return lastTime_;
} }
inline
real totalTime()const real totalTime()const
{ {
return accTime_; return accTime_;
} }
inline
real averageTime()const real averageTime()const
{ {
return accTime_/max(numIteration_, 1); return accTime_/max(numIteration_, 1);
} }
virtual
real accTimersTotal()const
{
return totalTime();
}
//// - IO operations //// - IO operations
virtual bool write(iOstream& os, bool subTree)const; virtual bool write(iOstream& os, bool subTree)const;
virtual bool read(iIstream& is) virtual bool read(iIstream& is)
{ {

View File

@ -21,6 +21,27 @@ Licence:
#include "Timers.hpp" #include "Timers.hpp"
pFlow::real pFlow::Timers::accTimersTotal()const
{
// first this timer
real total = 0;
if(this->timerActive()) total += this->totalTime();
for(const auto tmr:timers_)
{
if(tmr -> master())
{
total += dynamic_cast<const Timers*>(tmr)->accTimersTotal();
}
else if(tmr->timerActive())
{
total += tmr->totalTime();
}
}
return total;
}
bool pFlow::Timers::write(iOstream& os, bool subTree)const bool pFlow::Timers::write(iOstream& os, bool subTree)const
{ {

View File

@ -18,8 +18,8 @@ Licence:
-----------------------------------------------------------------------------*/ -----------------------------------------------------------------------------*/
#ifndef __Timers_hpp__ #ifndef __Timerss_hpp__
#define __Timers_hpp__ #define __Timerss_hpp__
#include "Timer.hpp" #include "Timer.hpp"
@ -30,11 +30,11 @@ namespace pFlow
class Timers class Timers
: :
public Timer public pFlow::Timer
{ {
protected: protected:
List<Timer*> timers_; List<pFlow::Timer*> timers_;
int32 level_ = 0; int32 level_ = 0;
@ -93,6 +93,8 @@ public:
return true; return true;
} }
real accTimersTotal()const override;
virtual bool write(iOstream& os, bool subTree = true)const; virtual bool write(iOstream& os, bool subTree = true)const;

View File

@ -26,6 +26,7 @@ Licence:
#include "KokkosUtilities.hpp" #include "KokkosUtilities.hpp"
#include "ViewAlgorithms.hpp" #include "ViewAlgorithms.hpp"
namespace pFlow namespace pFlow
{ {
@ -79,8 +80,8 @@ public:
size_(end-begin), size_(end-begin),
views_("indexContainer", size_) views_("indexContainer", size_)
{ {
pFlow::fillSequence(views_.d_view, 0, size_, min_); pFlow::fillSequence(views_.h_view, 0, size_, min_);
copy(views_.h_view, views_.d_view); copy(views_.d_view, views_.h_view);
} }

View File

@ -100,6 +100,19 @@ pFlow::timeControl::timeControl(
checkForOutputToFile(); checkForOutputToFile();
} }
bool pFlow::timeControl::finalTime()const
{
if( currentTime_ >= endTime_ ) return true;
if( abs(currentTime_-endTime_) < 0.5*dt_ )return true;
return false;
}
bool pFlow::timeControl::reachedStopAt()const
{
if( currentTime_ >= stopAt_ ) return true;
if( abs(currentTime_-stopAt_) < 0.5*dt_ )return true;
return false;
}
void pFlow::timeControl::checkForOutputToFile() void pFlow::timeControl::checkForOutputToFile()
{ {
@ -124,10 +137,13 @@ void pFlow::timeControl::checkForOutputToFile()
{ {
lastSaved_ = currentTime_; lastSaved_ = currentTime_;
save = true; save = true;
} }
} }
outputToFile_ = save; outputToFile_ = save;
} }
bool pFlow::timeControl::timersReportTime()const bool pFlow::timeControl::timersReportTime()const

View File

@ -152,18 +152,9 @@ public:
return currentIter_; return currentIter_;
} }
bool finalTime()const bool finalTime()const;
{
if( currentTime_ >= endTime_ ) return true; bool reachedStopAt()const;
if( abs(currentTime_-endTime_) < 0.5*dt_ )return true;
return false;
}
bool reachedStopAt()const
{
if( currentTime_ >= stopAt_ ) return true;
if( abs(currentTime_-stopAt_) < 0.5*dt_ )return true;
return false;
}
bool outputToFile()const bool outputToFile()const
{ {

View File

@ -235,39 +235,43 @@ pFlow::systemControl::systemControl(
bool pFlow::systemControl::operator ++(int) bool pFlow::systemControl::operator ++(int)
{ {
// skip writing to file for the first iteration auto toContinue = time()++;
//output<< "time()++"<<endl;
auto finished = time()++;
writeToFileTimer_.start();
if(time().currentIter() != 0)
{
//- save the results to file
if( !time().write() )
{
fatalErrorInFunction;
return false;
}
}
else if( time().finalTime() )
{
if( !time().write() )
{
fatalErrorInFunction;
return false;
}
}
writeToFileTimer_.end();
//output<< "after finalTime()"<<endl; if(toContinue)
{
writeToFileTimer_.start();
//if(time().currentIter() != 0 )
{
//- save the results to file
if( !time().write() )
{
fatalErrorInFunction;
return false;
}
}
writeToFileTimer_.end();
if( time().timersReportTime() && if( time().timersReportTime() &&
timersReport() ) timersReport() )
{
timers_.write(output, true);
}
}
else if (time().finalTime())
{ {
writeToFileTimer_.start();
if( !time().write() )
{
fatalErrorInFunction;
return false;
}
writeToFileTimer_.end();
timers_.write(output, true); timers_.write(output, true);
} }
return finished; return toContinue;
} }