Compare commits

..

No commits in common. "774afd5f37b889c09e12045cfe33782af7e97e88" and "8466e02d8119e7ccd10a1bcc356cb53b9911eaed" have entirely different histories.

14 changed files with 137 additions and 98 deletions

View File

@ -74,7 +74,7 @@ pFlow::initialize_pFlowProcessors();
do do
{ {
//Ping;
if(! sphInsertion.insertParticles( if(! sphInsertion.insertParticles(
Control.time().currentIter(), Control.time().currentIter(),
Control.time().currentTime(), Control.time().currentTime(),
@ -90,25 +90,21 @@ pFlow::initialize_pFlowProcessors();
// set force to zero, predict, particle deletion and etc. // set force to zero, predict, particle deletion and etc.
sphParticles.beforeIteration(); sphParticles.beforeIteration();
//Ping;
sphInteraction.beforeIteration(); sphInteraction.beforeIteration();
sphInteraction.iterate(); sphInteraction.iterate();
surfGeometry.iterate(); surfGeometry.iterate();
//Ping;
sphParticles.iterate(); sphParticles.iterate();
//Ping;
sphInteraction.afterIteration(); sphInteraction.afterIteration();
//Ping;
surfGeometry.afterIteration(); surfGeometry.afterIteration();
//Ping;
sphParticles.afterIteration(); sphParticles.afterIteration();
//Ping;
}while(Control++); }while(Control++);

View File

@ -35,14 +35,10 @@ pFlow::globalDamping::globalDamping(const systemControl& control)
performDamping_ = !equal(dampingFactor_, static_cast<real>(1.0)); performDamping_ = !equal(dampingFactor_, static_cast<real>(1.0));
if( performDamping_ ) if( performDamping_ )
{
REPORT(2)<<"Global damping "<<Yellow_Text("is active")<< REPORT(2)<<"Global damping "<<Yellow_Text("is active")<<
" and damping factor is "<<dampingFactor_<<END_REPORT; " and damping factor is "<<dampingFactor_<<END_REPORT;
}
else else
{
REPORT(2)<<"Global damping "<<Yellow_Text("is not active")<<"."<<END_REPORT; REPORT(2)<<"Global damping "<<Yellow_Text("is not active")<<"."<<END_REPORT;
}
} }

View File

@ -27,7 +27,6 @@ Licence:
#include "pFlowMacros.hpp" #include "pFlowMacros.hpp"
#include "error.hpp" #include "error.hpp"
#include "iOstream.hpp"
// just for preventing the use of std namespace and adding some minor functionalities // just for preventing the use of std namespace and adding some minor functionalities

View File

@ -45,6 +45,7 @@ in <b>settings/particlesDict</b> file
positionParticles positionParticles
{ {
method ordered; // other options: random or empty method ordered; // other options: random or empty
orderedInfo orderedInfo
{ {
diameter 0.005; // minimum space between centers of particles diameter 0.005; // minimum space between centers of particles
@ -99,7 +100,6 @@ setFields
end 30000; // end index of points end 30000; // end index of points
stride 3; // stride for selector stride 3; // stride for selector
} }
fieldValue // fields that the selector is applied to fieldValue // fields that the selector is applied to
{ {
/* /*

View File

@ -55,20 +55,15 @@ surfaces
belt belt
{ {
type stlWall; // type of the wall type stlWall; // type of the wall
file belt.stl; // file name in stl folder file belt.stl; // file name in stl folder
material wallMat; // material name of this wall material wallMat; // material name of this wall
motion conveyorBelt1; // motion component name motion conveyorBelt1; // motion component name
} }
box box
{ {
type stlWall; // type of the wall type stlWall; // type of the wall
file box.stl; // file name in stl folder file box.stl; // file name in stl folder
material wallMat; // material name of this wall material wallMat; // material name of this wall
} }
} }

View File

@ -30,7 +30,7 @@ pFlow::empty::empty(
positionParticles(control, dict), positionParticles(control, dict),
position_ position_
( (
"empty",1, 0, RESERVE() "empty",maxNumberOfParticles(), 0, RESERVE()
) )
{ {
} }

View File

@ -146,7 +146,7 @@ pFlow::positionOrdered::positionOrdered
position_ position_
( (
"positionOrdered", "positionOrdered",
numPoints_, max(maxNumberOfParticles(), numPoints_),
numPoints_ , numPoints_ ,
RESERVE() RESERVE()
) )

View File

@ -32,10 +32,45 @@ pFlow::realx3Vector pFlow::positionParticles::sortByMortonCode(
uint64 index; uint64 index;
}; };
/*realx3 minP = min(position);
realx3 maxP = max(position);
real cellsize = maxDiameter();
cells<uint64> allCells( box(minP, maxP), cellsize);
Vector<indexMorton> indMor(position.size(),RESERVE());
indMor.clear();
uint64 ind=0;
for(const auto& p:position)
{
auto cellInd = allCells.pointIndex(p);
indMor.push_back(
{ xyzToMortonCode64(cellInd.x(), cellInd.y(), cellInd.z()),
ind++});
}
INFORMATION<<"Performing morton sorting."<<END_INFO;
std::sort(
indMor.begin(),
indMor.end(),
[]( const indexMorton &lhs, const indexMorton &rhs){
return lhs.morton < rhs.morton; } );
realx3Vector sortedPos(position.capacity(), RESERVE());
sortedPos.clear();
for(auto& ind:indMor)
{
sortedPos.push_back( position[ind.index] );
}*/
WARNING<<"Morton sorting is inactive!"<<END_WARNING; WARNING<<"Morton sorting is inactive!"<<END_WARNING;
return position; return position;
} }
pFlow::positionParticles::positionParticles pFlow::positionParticles::positionParticles
( (
systemControl& control, systemControl& control,
@ -43,8 +78,12 @@ pFlow::positionParticles::positionParticles
) )
: :
regionType_(dict.getValOrSet<word>("regionType", "domain")), regionType_(dict.getValOrSet<word>("regionType", "domain")),
maxNumberOfParticles_(dict.getValOrSet(
"maxNumberOfParticles",
static_cast<uint32>(10000))),
mortonSorting_(dict.getValOrSet("mortonSorting", Logical("Yes"))) mortonSorting_(dict.getValOrSet("mortonSorting", Logical("Yes")))
{ {
if( regionType_ != "domain" ) if( regionType_ != "domain" )
{ {
pRegion_ = peakableRegion::create( pRegion_ = peakableRegion::create(
@ -53,7 +92,7 @@ pFlow::positionParticles::positionParticles
} }
else else
{ {
fileDictionary domainDictionary fileDictionary domainDict
( (
objectFile objectFile
{ {
@ -64,10 +103,12 @@ pFlow::positionParticles::positionParticles
}, },
&control.settings() &control.settings()
); );
pRegion_ = peakableRegion::create("box", domainDictionary.subDict("globalBox")); pRegion_ = peakableRegion::create(regionType_,domainDict.subDict("globalBox"));
} }
} }
pFlow::realx3Vector pFlow::positionParticles::getFinalPosition() pFlow::realx3Vector pFlow::positionParticles::getFinalPosition()
{ {
if(mortonSorting_) if(mortonSorting_)
@ -89,8 +130,10 @@ pFlow::uniquePtr<pFlow::positionParticles>
const dictionary & dict const dictionary & dict
) )
{ {
word method = dict.getVal<word>("method"); word method = dict.getVal<word>("method");
if( dictionaryvCtorSelector_.search(method) ) if( dictionaryvCtorSelector_.search(method) )
{ {
return dictionaryvCtorSelector_[method] (control, dict); return dictionaryvCtorSelector_[method] (control, dict);

View File

@ -40,8 +40,12 @@ private:
word regionType_; word regionType_;
uint32 maxNumberOfParticles_ = 10000;
Logical mortonSorting_; Logical mortonSorting_;
realx3Vector sortByMortonCode(const realx3Vector& position)const; realx3Vector sortByMortonCode(const realx3Vector& position)const;
protected: protected:
@ -79,6 +83,12 @@ public:
return mortonSorting_(); return mortonSorting_();
} }
inline
auto maxNumberOfParticles()const
{
return maxNumberOfParticles_;
}
virtual uint32 numPoints()const = 0; virtual uint32 numPoints()const = 0;
virtual uint32 size()const = 0; virtual uint32 size()const = 0;

View File

@ -122,14 +122,14 @@ pFlow::positionRandom::positionRandom
position_ position_
( (
"position", "position",
1, maxNumberOfParticles(),
0, 0,
RESERVE() RESERVE()
), ),
diameters_ diameters_
( (
"diameters", "diameters",
1, maxNumberOfParticles(),
0, 0,
RESERVE() RESERVE()
) )