diff --git a/.gitignore b/.gitignore index 6f31401f787928dc3bb3e2622578f889336d1d92..d87980fd00fb59300f8fbdc27a055e9854a4d6d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build/ .vscode/ +MSVC2017/ diff --git a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu index aba9b4e7ee1cbb218d0fa4525e08ba3b3d1c6d78..d2d14884abdad0791540652d524d725d341d1ecb 100644 --- a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu +++ b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.cu @@ -32,15 +32,9 @@ TriangularMesh::TriangularMesh(const std::string& inputPath) this->triangleVec = STLReader::readSTL(inputPath); initalizeDataFromTriangles(); this->findNeighbors(); + this->minmax = BoundingBox::makeInvalidMinMaxBox(); } -TriangularMesh::TriangularMesh(const TriangularMesh& geo) -{ - this->triangleVec = geo.triangleVec; - this->triangles = geo.triangles; - this->size = geo.size; - this->minmax = BoundingBox(geo.minmax); -} TriangularMesh::TriangularMesh() { diff --git a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h index d5e93087562e68cde70a1018a438354e17fb5506..06e5bfb3d65f6b36cf4204490c863d9a667b54bd 100644 --- a/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h +++ b/src/GridGenerator/geometries/TriangularMesh/TriangularMesh.h @@ -26,7 +26,6 @@ public: VF_PUBLIC static TriangularMesh* make(const std::string& fileName, DiscretizationMethod discretizationMethod); VF_PUBLIC TriangularMesh(); - VF_PUBLIC TriangularMesh(const TriangularMesh& geo); VF_PUBLIC TriangularMesh(const std::string& inputPath); VF_PUBLIC TriangularMesh(const std::string& inputPath, const BoundingBox &box); HOSTDEVICE VF_PUBLIC ~TriangularMesh(); diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu index 214254e5174776d9b0aa1bc0225c52517e8861f7..9426d957852d94fa95fca9a4db6171806a95fc84 100644 --- a/src/GridGenerator/grid/GridImp.cu +++ b/src/GridGenerator/grid/GridImp.cu @@ -85,7 +85,13 @@ HOST void GridImp::inital() else gridStrategy->findInnerNodes(shared_from_this()); + GridVTKWriter::writeSparseGridToVTK(shared_from_this(), "D:/GRIDGENERATION/pio"); + gridStrategy->findStopperNodes(shared_from_this()); + + if (triangularMesh) + GridVTKWriter::writeSparseGridToVTK(shared_from_this(), "D:/GRIDGENERATION/pio_stopper"); + } HOSTDEVICE void GridImp::initalNodeToOutOfGrid(uint index) @@ -211,6 +217,42 @@ HOSTDEVICE void GridImp::findStopperNode(uint index) this->field.setFieldEntryToStopperEndOfGrid(index); } +HOSTDEVICE void GridImp::removeOddBoundaryCellNode(uint index) +{ + Cell cell = getOddCellFromIndex(index); + if (isOutSideOfGrid(cell)) + return; + if (contains(cell, OUT_OF_GRID)) + setTo(cell, OUT_OF_GRID); +} + +HOSTDEVICE bool GridImp::isOutSideOfGrid(Cell &cell) const +{ + for (const auto point : cell) { + if (point.x < startX || point.x > endX + || point.y < startY || point.y > endY + || point.z < startZ || point.z > endZ) + return true; + } + return false; +} + +HOSTDEVICE bool GridImp::contains(Cell &cell, char type) const +{ + for (const auto point : cell) { + if (field.is(transCoordToIndex(point.x, point.y, point.z), type)) + return true; + } + return false; +} + +HOSTDEVICE void GridImp::setTo(Cell &cell, char type) +{ + for (const auto point : cell) { + field.setFieldEntry(transCoordToIndex(point.x, point.y, point.z), type); + } +} + HOSTDEVICE bool GridImp::isValidStartOfGridStopper(uint index) const { return this->field.is(index, OUT_OF_GRID) && (nodeInNextCellIs(index, FLUID) || nodeInNextCellIs(index, FLUID_CFF)); @@ -490,6 +532,7 @@ HOST void GridImp::findGridInterface(SPtr<Grid> finerGrid) HOSTDEVICE void GridImp::findGridInterfaceCF(uint index, GridImp& finerGrid) { gridInterface->findInterfaceCF(index, this, &finerGrid); + } HOSTDEVICE void GridImp::findGridInterfaceFC(uint index, GridImp& finerGrid) diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h index 0b7ef13a502923ec49164229afd3f0a47ff70e63..7019158a944221b1fd85035f61c85ef4dbcf433e 100644 --- a/src/GridGenerator/grid/GridImp.h +++ b/src/GridGenerator/grid/GridImp.h @@ -34,6 +34,10 @@ private: HOSTDEVICE Cell getOddCellFromIndex(uint index) const; HOSTDEVICE bool isValidStartOfGridStopper(uint index) const; HOSTDEVICE bool isValidEndOfGridStopper(uint index) const; + HOSTDEVICE void removeOddBoundaryCellNode(uint index); + HOSTDEVICE bool isOutSideOfGrid(Cell &cell) const; + HOSTDEVICE bool contains(Cell &cell, char type) const; + HOSTDEVICE void setTo(Cell &cell, char type); HOSTDEVICE bool nodeInNextCellIs(int index, char type) const; HOSTDEVICE bool nodeInPreviousCellIs(int index, char type) const; diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp index f39d04da31680906c99b47737b646fa92a4efe13..098afe419d1564833366d3cf48200c839369e623 100644 --- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp +++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp @@ -20,7 +20,6 @@ void GridCpuStrategy::allocateGridMemory(SPtr<GridImp> grid) { - grid->neighborIndexX = new int[grid->size]; grid->neighborIndexY = new int[grid->size]; grid->neighborIndexZ = new int[grid->size]; @@ -74,6 +73,7 @@ void GridCpuStrategy::findInnerNodes(SPtr<GridImp> grid, TriangularMesh* triangu pointInObjectMethod(grid, triangularMesh); } + removeOddBoundaryCellNodes(grid); } void GridCpuStrategy::pointUnderTriangleMethod(SPtr<GridImp> grid, TriangularMesh* triangularMesh) @@ -267,6 +267,14 @@ void GridCpuStrategy::rayCastingMethod(SPtr<GridImp> grid, TriangularMesh* trian } } +void GridCpuStrategy::removeOddBoundaryCellNodes(SPtr<GridImp> grid) +{ +#pragma omp parallel for + for (uint index = 0; index < grid->size; index++) + grid->removeOddBoundaryCellNode(index); +} + + void GridCpuStrategy::findStopperNodes(SPtr<GridImp> grid) { #pragma omp parallel for @@ -300,6 +308,7 @@ void GridCpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGr for (uint index = 0; index < grid->getSize(); index++) grid->findGridInterfaceCF(index, *fineGrid); + GridVTKWriter::writeSparseGridToVTK(fineGrid, "D:/GRIDGENERATION/CF"); for (uint index = 0; index < grid->getSize(); index++) grid->findGridInterfaceFC(index, *fineGrid); diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h index 1e611f6ea697108d54f58e09ef9e44116db6b7ae..3297f607951a8f68ad8d3a36b1c4da1df83a0f1e 100644 --- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h +++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.h @@ -41,7 +41,7 @@ protected: void pointUnderTriangleMethod(SPtr<GridImp> grid, TriangularMesh* triangularMesh); void rayCastingMethod(SPtr<GridImp> grid, TriangularMesh* triangularMesh); void pointInObjectMethod(SPtr<GridImp> grid, TriangularMesh* triangularMesh); - + void removeOddBoundaryCellNodes(SPtr<GridImp> grid); public: void allocateFieldMemory(Field* field) override; void freeFieldMemory(Field* field) override; diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index 103c82497348c00df43498b7972320a211ebc7e7..74aaadc3acb0794e4ac01f64c4adb30525797cbf 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -256,7 +256,8 @@ void multipleLevel(const std::string& configPath) //conglomerate->subtract(new Sphere(30, 20, 20, 4)); //gridBuilder->addGrid(conglomerate, 2); - TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_UNDER_TRIANGLE); + //TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_IN_OBJECT); + TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/sphereBinary.stl", DiscretizationMethod::POINT_IN_OBJECT); //TriangularMesh* sphere = STLReader::makeTriangularMesh("D:/GRIDGENERATION/STL/circleBinaer.stl"); //TransformatorImp trans(1.0, Vertex(-30, -5, 10));