positionParticles-ordered modified to accept cylinder&sphere region

This commit is contained in:
hamidrezanorouzi
2022-09-07 22:22:23 +04:30
parent 370e3b8b1b
commit ceb3e0596c
26 changed files with 1138 additions and 39 deletions

View File

@ -19,6 +19,9 @@ Licence:
-----------------------------------------------------------------------------*/
#include "positionParticles.H"
#include "box.H"
#include "cylinder.H"
#include "sphere.H"
#include "cells.H"
#include "contactSearchFunctions.H"
@ -78,7 +81,20 @@ pFlow::positionParticles::positionParticles
{
maxNumberOfParticles_ = dict.getValOrSet("maxNumberOfParticles", static_cast<size_t>(10000));
mortonSorting_ = dict.getValOrSet("mortonSorting", Logical("Yes"));
mortonSorting_ = dict.getValOrSet("mortonSorting", Logical("Yes"));
if( dict.containsDictionay("box") )
{
region_ = makeUnique<region<box>>(dict.subDict("box"));
}
else if(dict.containsDictionay("cylinder"))
{
region_ = makeUnique<region<cylinder>>(dict.subDict("cylinder"));
}
else if(dict.containsDictionay("sphere"))
{
region_ = makeUnique<region<sphere>>(dict.subDict("sphere"));
}
}

View File

@ -28,11 +28,77 @@ Licence:
namespace pFlow
{
class regionBase
{
public:
regionBase() = default;
regionBase(const regionBase&) = default;
regionBase& operator =(const regionBase&) = default;
virtual ~regionBase() = default;
virtual bool isInside(const realx3 point)const = 0;
virtual realx3 minPoint()const =0;
virtual realx3 maxPoint()const =0;
};
template<typename T>
class region
:
public regionBase
{
protected:
T region_;
public:
region(const T& rgn)
:
region_(rgn)
{}
region(const dictionary& dict)
:
region_(dict)
{}
region(const region&) = default;
region& operator =(const region&) = default;
virtual ~region()=default;
bool isInside(const realx3 point) const override
{
return region_.isInside(point);
}
realx3 minPoint()const override
{
return region_.minPoint();
}
realx3 maxPoint()const override
{
return region_.maxPoint();
}
};
class positionParticles
{
protected:
uniquePtr<regionBase> region_ = nullptr;
size_t maxNumberOfParticles_ = 10000;
Logical mortonSorting_;