From 903bfc5093fd63f2edbd929a9b69d7675e25b4d4 Mon Sep 17 00:00:00 2001 From: Soeren Peters <peters@irmb.tu-bs.de> Date: Fri, 4 May 2018 16:28:20 +0200 Subject: [PATCH] create mesh object method in grid --- src/GridGenerator/grid/Grid.h | 3 ++- .../grid/GridBuilder/MultipleGridBuilder.cpp | 10 ++++++++++ .../grid/GridBuilder/MultipleGridBuilder.h | 4 +++- src/GridGenerator/grid/GridImp.cu | 12 ++++++++++++ src/GridGenerator/grid/GridImp.h | 2 ++ src/GridGenerator/grid/GridMocks.h | 1 + targets/apps/HULC/main.cpp | 11 ++++++----- 7 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h index 2af4ce5f7..178c9d6c7 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 8ff88524a..28340b1bb 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 a272a4b2e..666b652e2 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 13bd996ae..536c28e84 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 a07421b57..a6c3d2df0 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 0f8c932a3..acc119c2c 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 e43ec64f9..dfa3687d3 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); -- GitLab