55 auto resultGeometry((df1 | df2) & df3);
66 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
86 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
107 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
109 vector<asl::SPDistanceFunction> cylinders;
112 for (
int i = 0; i < size[0] / (2 * r + spacing); ++i)
114 for (
int j = 0; j < size[1] / (2 * r + spacing); ++j)
116 cylinders.push_back(generateDFCylinderInf(r, orientation,
asl::makeAVec(i * (2. * r + spacing) + r + spacing / 2., j * (2. * r + spacing) + r + spacing / 2., 0.)));
117 resultGeometry = resultGeometry | cylinders.back();
137 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
139 vector<asl::SPDistanceFunction> cylinders;
143 for (
unsigned int i = 0; i < size[0] / (2 * r + spacing); ++i)
145 for (
unsigned int j = 0; j < size[1] / (2 * r + spacing); ++j)
147 for (
unsigned int d = 0; d < orientation.
getSize(); ++d)
148 orientation[d] = rand() % size[d];
150 cylinders.push_back(generateDFCylinderInf(r, orientation,
asl::makeAVec(i * (2. * r + spacing) + r + spacing / 2., j * (2. * r + spacing) + r + spacing / 2., (
FlT) (rand() % size[2]))));
151 resultGeometry = resultGeometry | cylinders.back();
170 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
188 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
206 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
209 auto df1(generateDFSphere(r, center));
229 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
232 auto df1(generateDFSphere(r, center));
233 auto df2(generateDFInBlock(block, 1));
259 FlT hCrystalBase(.5);
260 FlT hCrystalPyramid(.5);
266 vector<asl::AVec<>> pillar1{
asl::makeAVec(wPillar*.5, dPillar*.5,0.),
271 vector<asl::AVec<>> pillar2{
asl::makeAVec(dPillar*.5, wPillar*.5,0.),
276 vector<asl::AVec<>> pillarC{
asl::makeAVec(center[0]+rDisk-dPillar*.5, center[1], 0.),
280 vector<vector<asl::AVec<>>> pillarsPoints(4);
281 for(
unsigned int i(0); i<4; ++i)
282 pillarsPoints[i].resize(4);
284 for(
unsigned int i(0); i<4; ++i)
286 pillarsPoints[0][i] = pillar2[i] + pillarC[0];
287 pillarsPoints[1][i] = pillar2[i] + pillarC[1];
288 pillarsPoints[2][i] = pillar1[i] + pillarC[2];
289 pillarsPoints[3][i] = pillar1[i] + pillarC[3];
294 auto mBath(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
295 auto mPlatform(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
296 auto mCrystal(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
298 auto bath(-generateDFCylinderInf(rBath,
asl::makeAVec(0.,0.,1.),
301 auto diskBottom(generateDFCylinder(rDisk,
304 auto diskTop(generateDFCylinder(rDisk,
306 asl::makeAVec(center[0], center[1], -.5*hDisk - hAxis + dx*size[2])));
307 auto axis(generateDFCylinder(rAxis,
309 asl::makeAVec(center[0], center[1], - .5*hAxis - hDisk*.25 + dx*size[2])));
310 auto dfPillar1(generateDFConvexPolygonPrism(pillarsPoints[0]));
311 auto dfPillar2(generateDFConvexPolygonPrism(pillarsPoints[1]));
312 auto dfPillar3(generateDFConvexPolygonPrism(pillarsPoints[2]));
313 auto dfPillar4(generateDFConvexPolygonPrism(pillarsPoints[3]));
314 auto dfPillars((dfPillar1 | dfPillar2 | dfPillar3 | dfPillar4) &
315 generateDFPlane(makeAVec(0.,0.,-1.), makeAVec(0.,0.,.5*hDisk)) &
316 generateDFPlane(makeAVec(0.,0.,1.), makeAVec(0.,0.,-.5*hDisk - hAxis + dx*size[2])));
320 center+makeAVec(-aCrystal, aCrystal,0.),
321 center+makeAVec(-aCrystal, -aCrystal,0.),
322 center+makeAVec( aCrystal, -aCrystal,0.)}) &
323 generateDFPlane(makeAVec(0.,0.,-1.), makeAVec(0.,0., hDisk)) &
324 generateDFPlane(makeAVec(0.,0., 1.), makeAVec(0.,0., hDisk + hCrystalBase)));
325 auto cCrPyrBase(makeAVec(center[0],center[1],hDisk+hCrystalBase-.01));
327 cCrPyrBase+makeAVec(-aCrystal, aCrystal,0.),
328 cCrPyrBase+makeAVec(-aCrystal, -aCrystal,0.),
329 cCrPyrBase+makeAVec( aCrystal, -aCrystal,0.)},
330 cCrPyrBase+makeAVec(0.,0.,hCrystalPyramid)));
333 asl::initData(mPlatform, normalize(diskBottom | diskTop | axis | dfPillars, dx));
354 auto data(asl::generateDataContainerACL_SP<FlT>(block, 1, 1u));
357 auto df1(generateDFSphere(r, center));
358 auto df2(generateDFSphere(r, .6*center));
definition of class АVec<T>
const unsigned int & getSize() const
void addScalars(std::string name, AbstractData &data)
SPDistanceFunction generateDFConvexPolygonPyramid(std::vector< AVec< double > > points, AVec< double > a)
generates pyramid with convex polygon at its base and apex a
SPDistanceFunction generateDFConvexPolygonPrism(std::vector< AVec< double > > points)
generates infinite prism with convex polygon at its base
void writeVTKXML(const std::string &fileName, const AbstractData &data, const std::string &name)
std::shared_ptr< DistanceFunction > SPDistanceFunction
const VectorTemplate & d3q15()
Vector template.
void initData(SPAbstractData d, double a)
bool testDistFOperations2D()
bool testDistFOperations3DPrism()
bool testDistFOperations3DBlock()
bool testDistFAdvanced3D()
bool testDistFOrderedCylinders()
bool testDistFOperations3D()
bool testDistFOptimizer()
bool testDistFNormalization3D()
bool testDistFNormalization2D()
bool testDistFUnorderedCylinders()