diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index 565a02a2807ef15679bf08fa001ea9a03f78ca4e..9a0d0aa0bc8d527e9f01dd02b56d6bf48119c9ed 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -49,14 +49,14 @@ #include "io/GridVTKWriter/GridVTKWriter.h" #include "io/STLReaderWriter/STLWriter.h" -MultipleGridBuilder::MultipleGridBuilder() : LevelGridBuilder(), numberOfLayersFine(12), numberOfLayersBetweenLevels(8), subDomainBox(nullptr) +MultipleGridBuilder::MultipleGridBuilder(SPtr<GridFactory> gridFactory) : LevelGridBuilder(), gridFactory(gridFactory), numberOfLayersFine(12), numberOfLayersBetweenLevels(8), subDomainBox(nullptr) { } -SPtr<MultipleGridBuilder> MultipleGridBuilder::makeShared() +SPtr<MultipleGridBuilder> MultipleGridBuilder::makeShared(SPtr<GridFactory> gridFactory) { - return SPtr<MultipleGridBuilder>(new MultipleGridBuilder()); + return SPtr<MultipleGridBuilder>(new MultipleGridBuilder(gridFactory)); } void MultipleGridBuilder::addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta) @@ -195,7 +195,7 @@ void MultipleGridBuilder::addGridToListIfValid(SPtr<Grid> grid) SPtr<Grid> MultipleGridBuilder::makeGrid(Object* gridShape, real startX, real startY, real startZ, real endX, real endY, real endZ, real delta, uint level) const { - return GridImp::makeShared(gridShape, startX, startY, startZ, endX, endY, endZ, delta, "D3Q27", level); + return gridFactory->makeGrid(gridShape, startX, startY, startZ, endX, endY, endZ, delta, level); } bool MultipleGridBuilder::coarseGridExists() const diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h index 839e0036bbc6b0f5d28bec5da3a0abe637b7adca..9627fb0bf7e97a925d4b0ba2c450c507426a48f4 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h @@ -41,6 +41,7 @@ #include "global.h" #include "grid/GridBuilder/LevelGridBuilder.h" +#include "grid/GridFactory.h" #include "grid/distributions/Distribution.h" class Object; @@ -49,10 +50,10 @@ class BoundingBox; class MultipleGridBuilder : public LevelGridBuilder { private: - GRIDGENERATOR_EXPORT MultipleGridBuilder(); + GRIDGENERATOR_EXPORT MultipleGridBuilder(SPtr<GridFactory> gridFactory); public: - GRIDGENERATOR_EXPORT static SPtr<MultipleGridBuilder> makeShared(); + GRIDGENERATOR_EXPORT static SPtr<MultipleGridBuilder> makeShared(SPtr<GridFactory> gridFactory); GRIDGENERATOR_EXPORT void addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta); GRIDGENERATOR_EXPORT void addGrid(Object *gridShape); @@ -103,6 +104,7 @@ private: static void emitNoCoarseGridExistsWarning(); static void emitGridIsNotInCoarseGridWarning(); + SPtr<GridFactory> gridFactory; Object *solidObject = nullptr; uint numberOfLayersFine; diff --git a/src/gpu/GridGenerator/grid/GridFactory.h b/src/gpu/GridGenerator/grid/GridFactory.h index b525596fa670a026d60b1297c75ef69c46b23498..53d358d5325390394f1d38694de605e5cc0d2f56 100644 --- a/src/gpu/GridGenerator/grid/GridFactory.h +++ b/src/gpu/GridGenerator/grid/GridFactory.h @@ -36,6 +36,7 @@ #include "global.h" #include "geometries/Cuboid/Cuboid.h" +#include "geometries/TriangularMesh/TriangularMeshStrategy.h" #include "grid/GridImp.h" @@ -54,8 +55,33 @@ public: SPtr<Grid> makeGrid(Object* gridShape, real startX, real startY, real startZ, real endX, real endY, real endZ, real delta, uint level, const std::string& d3Qxx = "D3Q27") { - return GridImp::makeShared(gridShape, startX, startY, startZ, endX, endY, endZ, delta, d3Qxx, level); + SPtr<GridImp> grid; + + grid = GridImp::makeShared(gridShape, startX, startY, startZ, endX, endY, endZ, delta, d3Qxx, level); + + grid->setTriangularMeshDiscretizationStrategy(new PointInObjectDiscretizationStrategy()); + + return grid; + } + + void setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod triangularMeshDiscretizationMethod) + { + switch (triangularMeshDiscretizationMethod) + { + case TriangularMeshDiscretizationMethod::POINT_UNDER_TRIANGLE: + triangularMeshDiscretizationStrategy = new PointUnderTriangleStrategy(); + break; + case TriangularMeshDiscretizationMethod::RAYCASTING: + triangularMeshDiscretizationStrategy = new RayCastingDiscretizationStrategy(); + break; + case TriangularMeshDiscretizationMethod::POINT_IN_OBJECT: + triangularMeshDiscretizationStrategy = new PointInObjectDiscretizationStrategy(); + break; + } } + +private: + TriangularMeshDiscretizationStrategy* triangularMeshDiscretizationStrategy; }; diff --git a/src/gpu/GridGenerator/grid/GridImp.cpp b/src/gpu/GridGenerator/grid/GridImp.cpp index efe62002ac6ea00e90e63a7253324b44a77d5b9c..368d8ac36f52de5d925355d12de8985941d118df 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cpp +++ b/src/gpu/GridGenerator/grid/GridImp.cpp @@ -1156,7 +1156,7 @@ void GridImp::findInvalidBoundaryNodes(uint index) // --------------------------------------------------------- // void GridImp::mesh(Object* object) { - TriangularMesh* triangularMesh = dynamic_cast<TriangularMesh*>(object); + TriangularMesh *triangularMesh = dynamic_cast<TriangularMesh *>(object); if (triangularMesh) triangularMeshDiscretizationStrategy->discretize(triangularMesh, this, INVALID_SOLID, FLUID); else