diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h index 2af4ce5f74b371be35d6eb00d302f23820af7b5e..178c9d6c708a1b7a389802aba5eebce18db478e3 100644 --- a/src/GridGenerator/grid/Grid.h +++ b/src/GridGenerator/grid/Grid.h @@ -10,7 +10,7 @@ struct Vertex; struct Triangle; class GridStrategy; class GridInterface; - +class Object; class VF_PUBLIC Grid { @@ -68,6 +68,7 @@ public: HOST virtual void findGridInterface(SPtr<Grid> grid) = 0; HOST virtual void mesh(TriangularMesh& geometry) = 0; + HOST virtual void mesh(Object* object) = 0; HOST virtual void setPeriodicity(bool periodicityX, bool periodicityY, bool periodicityZ) = 0; diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index 8ff88524af74f2649c30d7a327ca29c3bdbd5242..28340b1bb535bb667f4fae61fe0081e2a8755598 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -22,6 +22,12 @@ void MultipleGridBuilder::addCoarseGrid(real startX, real startY, real startZ, r addGridToList(grid); } +void MultipleGridBuilder::addGeometry(Object* solidObject) +{ + this->solidObject = solidObject; +} + + void MultipleGridBuilder::addGrid(Object* gridShape) { if (!coarseGridExists()) @@ -232,6 +238,10 @@ void MultipleGridBuilder::buildGrids() for (auto grid : grids) grid->inital(); + + for (auto grid : grids) + grid->mesh(solidObject); + for (size_t i = 0; i < grids.size() - 1; i++) grids[i]->findGridInterface(grids[i + 1]); diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h index a272a4b2ec21565ccd244b96f1bbbfb51a1a73ac..666b652e2a5573294927f00543c6ba3fafa9f6f7 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h @@ -26,6 +26,8 @@ public: VF_PUBLIC void addGrid(Object* gridShape); VF_PUBLIC void addGrid(Object* gridShape, uint levelFine); + VF_PUBLIC void addGeometry(Object* gridShape); + VF_PUBLIC uint getNumberOfLevels() const; VF_PUBLIC real getDelta(uint level) const; @@ -64,7 +66,7 @@ private: //std::vector<SPtr<Grid> > grids; SPtr<GridFactory> gridFactory; - + Object* solidObject; }; #endif diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu index 13bd996ae435506a8894ce376472d8b431c4a863..536c28e8430b48b723c744f306307c569620e41c 100644 --- a/src/GridGenerator/grid/GridImp.cu +++ b/src/GridGenerator/grid/GridImp.cu @@ -554,6 +554,18 @@ HOSTDEVICE void GridImp::findOverlapStopper(uint index, GridImp& finerGrid) // --------------------------------------------------------- // // Mesh Triangle // // --------------------------------------------------------- // +HOST void GridImp::mesh(Object* object) +{ + TriangularMesh* triangularMesh = dynamic_cast<TriangularMesh*>(object); + if (triangularMesh) + triangularMeshDiscretizationStrategy->discretize(triangularMesh, this, OUT_OF_GRID, FLUID); + else + gridStrategy->findInnerNodes(shared_from_this()); + + gridStrategy->findStopperNodes(shared_from_this()); +} + + HOST void GridImp::mesh(TriangularMesh &triangularMesh) { const clock_t begin = clock(); diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h index a07421b57bbdfe41362465d72f82cc6ec31ea82d..a6c3d2df0924563e8522db0bfa256b9ff6e47260 100644 --- a/src/GridGenerator/grid/GridImp.h +++ b/src/GridGenerator/grid/GridImp.h @@ -166,6 +166,8 @@ private: public: HOSTDEVICE BoundingBox getBoundingBoxOnNodes(Triangle &triangle) const; + HOST void mesh(Object* object) override; + HOST void mesh(TriangularMesh &geometry) override; HOSTDEVICE void mesh(Triangle &triangle); HOSTDEVICE void meshReverse(Triangle &triangle); diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h index 0f8c932a3b2e90f054c4a7bb79f3cff1b8dd0e9a..acc119c2c49c2cb0b00f5c444811035a4d825dc2 100644 --- a/src/GridGenerator/grid/GridMocks.h +++ b/src/GridGenerator/grid/GridMocks.h @@ -66,6 +66,7 @@ public: virtual void findSparseIndices(SPtr<Grid> fineGrid) override {} virtual Vertex getMinimumOnNode(Vertex exact) const override { return Vertex(0, 0, 0); } virtual Vertex getMaximumOnNode(Vertex exact) const override { return Vertex(0, 0, 0); } + virtual void mesh(Object* object) override {} }; class GridStub : public GridDummy diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index e43ec64f9188463950c91d274431639cd75265b2..dfa3687d3e203ef80624c084ce41d0ae09b3f141 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -264,7 +264,7 @@ void multipleLevel(const std::string& configPath) //TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_IN_OBJECT); - gridBuilder->addCoarseGrid(-10, -8, -3, 50, 20, 20, 0.25); + gridBuilder->addCoarseGrid(-12, -8, -3, 55, 20, 25, 0.5); TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/input/local_input/bruecke.stl", DiscretizationMethod::RAYCASTING); @@ -276,7 +276,8 @@ void multipleLevel(const std::string& configPath) //STLWriter::writeSTL(sphere->triangleVec, "D:/GRIDGENERATION/STL/GTI2.stl", false); //gridBuilder->addGrid(new Sphere(20, 20, 20, 8)); - gridBuilder->addGrid(triangularMesh, 2); + //gridBuilder->addGrid(triangularMesh, 2); + gridBuilder->addGeometry(triangularMesh); //gridBuilder->addFineGrid(new Cuboid(15, 15, 15, 25, 25, 25), 1); //gridBuilder->addFineGrid(new Cuboid(17, 17, 17, 23, 23, 23), 2); @@ -290,9 +291,9 @@ void multipleLevel(const std::string& configPath) gridBuilder->buildGrids(); - gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_0", 0); - gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_1", 1); - gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2); + gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_0.vtk", 0); + //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_1", 1); + //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2); //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_0", 0); //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_1", 1);