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
@ -77,7 +78,7 @@ setFields
Default value for fields defined for particles Default value for fields defined for particles
These fields should always be defined for simulations with These fields should always be defined for simulations with
spherical particles. spherical particles.
*/ */
defaultValue defaultValue
{ {
@ -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,8 +146,8 @@ 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()
) )