mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-12 16:26:23 +00:00
.github
DEMSystems
benchmarks
cmake
doc
solvers
src
tutorials
utilities
Utilities
geometryPhasicFlow
Wall
cuboidWall
cylinderWall
cylinderWall.cpp
cylinderWall.hpp
planeWall
stlWall
vtkFile
CMakeLists.txt
readControlDict.cpp
readControlDict.hpp
readFromTimeFolder.cpp
readFromTimeFolder.hpp
utilityFunctions.hpp
checkPhasicFlow
geometryPhasicFlow
pFlowToVTK
particlesPhasicFlow
postprocessPhasicFlow
CMakeLists.txt
.gitignore
CMakeLists.txt
LICENSE
README.md
phasicFlowConfig.H.in
120 lines
2.3 KiB
C++
120 lines
2.3 KiB
C++
#include "cylinderWall.hpp"
|
|
#include "Vectors.hpp"
|
|
#include "line.hpp"
|
|
|
|
|
|
bool pFlow::cylinderWall::readCylinderWall(const dictionary& dict)
|
|
{
|
|
auto p1 = dict.getVal<realx3>("p1");
|
|
auto p2 = dict.getVal<realx3>("p2");
|
|
auto radius1 = dict.getVal<real>("radius1");
|
|
auto radius2 = dict.getVal<real>("radius2") ;
|
|
|
|
int32 resolution = dict.getValOrSet("resolution", 24 );
|
|
int32 zResolution = dict.getValOrSet("zResolution", 1);
|
|
|
|
|
|
triangles_.clear();
|
|
triangles_.reserve(2*resolution*zResolution);
|
|
|
|
|
|
line cylAxis(p1, p2);
|
|
auto lp1 = p1;
|
|
|
|
auto dt = static_cast<real>(1.0/zResolution);
|
|
real t = 0;
|
|
for(int32 i=0; i<zResolution; i++)
|
|
{
|
|
t += dt;
|
|
auto lp2 = cylAxis.point(t);
|
|
if(!createCylinder(lp1, lp2, radius1, radius2, resolution))
|
|
return false;
|
|
|
|
lp1 = lp2;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool pFlow::cylinderWall::createCylinder(
|
|
const realx3& p1,
|
|
const realx3& p2,
|
|
real rad1,
|
|
real rad2,
|
|
int32 numDiv)
|
|
{
|
|
|
|
zAxis zAx(p1, p2);
|
|
|
|
real L = zAx.length();
|
|
|
|
|
|
realx3Vector r1P("r1P",numDiv + 1), r2P("r1P",numDiv + 1);
|
|
real dTheta = 2 * Pi / numDiv;
|
|
real theta = 0;
|
|
|
|
for (int32 i = 0; i < numDiv + 1; i++)
|
|
{
|
|
r1P[i] = realx3(rad1*cos(theta), rad1*sin(theta), 0);
|
|
r2P[i] = realx3(rad2*cos(theta), rad2*sin(theta), L);
|
|
theta += dTheta;
|
|
}
|
|
|
|
// transferring back all points to the original axis of cylinder
|
|
for (int32 i = 0; i < numDiv + 1; i++)
|
|
{
|
|
r1P[i] = zAx.transferBackZ(r1P[i]);
|
|
r2P[i] = zAx.transferBackZ(r2P[i]);
|
|
}
|
|
|
|
realx3 norm;
|
|
for (int32 i = 0; i < numDiv; i++)
|
|
{
|
|
realx3 p1 = r1P[i];
|
|
realx3 p2 = r2P[i];
|
|
realx3 p3 = r2P[i + 1];
|
|
realx3 p4 = r1P[i + 1];
|
|
|
|
if(checkNormalVec(p1, p2, p3, norm))
|
|
{
|
|
triangles_.push_back(realx3x3(p1, p2, p3));
|
|
}
|
|
else
|
|
{
|
|
fatalErrorInFunction<<
|
|
"planner input triangle: "<<realx3x3(p1, p2, p3)<<endl;
|
|
return false;
|
|
}
|
|
|
|
if (checkNormalVec(p3, p4, p1, norm))
|
|
{
|
|
triangles_.push_back(realx3x3(p3, p4, p1));
|
|
}
|
|
else
|
|
{
|
|
fatalErrorInFunction<<
|
|
"planner input triangle: "<<realx3x3(p3, p4, p1)<<endl;
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
pFlow::cylinderWall::cylinderWall()
|
|
{}
|
|
|
|
|
|
pFlow::cylinderWall::cylinderWall(
|
|
const dictionary& dict
|
|
)
|
|
:
|
|
Wall(dict)
|
|
{
|
|
if( !readCylinderWall(dict) )
|
|
{
|
|
fatalExit;
|
|
}
|
|
} |