Merge branch 'PhasicFlow:main' into main
This commit is contained in:
commit
fe5f550d17
|
@ -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_(),
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue