diff --git a/src/GridGenerator/geometries/Triangle/TriangleTest.cpp b/src/GridGenerator/geometries/Triangle/TriangleTest.cpp index aabc83c8fbfa0dae5cd3b35ee8b41226da43867c..da300285e16c81504b4626a01476238525fb76c9 100644 --- a/src/GridGenerator/geometries/Triangle/TriangleTest.cpp +++ b/src/GridGenerator/geometries/Triangle/TriangleTest.cpp @@ -70,13 +70,13 @@ TEST(TriangleTest, getClosestPointsOnEdgesFromTriangle) EXPECT_TRUE(isP3OnEdge); } -TEST(TriangleTest, PointIsNotWithinTriangle) -{ - Triangle t = Triangle(Vertex(0, 0, 0), Vertex(10, 0, 0), Vertex(0, 10, 0), Vertex(0, 0, 1)); - Vertex P4 = Vertex(1, 1, -2); - - EXPECT_FALSE(t.isNotNextToFace(P4)); -} +//TEST(TriangleTest, PointIsNotWithinTriangle) +//{ +// Triangle t = Triangle(Vertex(0, 0, 0), Vertex(10, 0, 0), Vertex(0, 10, 0), Vertex(0, 0, 1)); +// Vertex P4 = Vertex(1, 1, -2); +// +// EXPECT_FALSE(t.isNotNextToFace(P4)); +//} TEST(TriangleTest, calculatePerpendicularPoint) { diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/GridGenerator/grid/GridBuilder/GridBuilder.h index 6cbee8a842aecad7c550618136db3c2bf3cfa65e..45b0bbbb009e635eaa0448c8f5b8ec78e9d5d703 100644 --- a/src/GridGenerator/grid/GridBuilder/GridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/GridBuilder.h @@ -49,7 +49,7 @@ public: virtual void writeSimulationFiles(std::string output, BoundingBox<int> &nodesDelete, bool writeFilesBinary, int level) = 0; virtual void writeArrows(std::string fileName, std::shared_ptr<ArrowTransformator> trans) const = 0; - virtual std::shared_ptr<Grid> getGrid(int level, int box) = 0; + virtual SPtr<Grid> getGrid(uint level) = 0; virtual void createBoundaryConditions() = 0; virtual std::vector<std::vector<std::vector<real> > > getQsValues() const = 0; diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp index 6e4ad2d1a8640c9287bbbbee10efac0a5eba507d..e0f0239418089512bab22ee073595b4ca564e105 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp @@ -36,7 +36,7 @@ #define GEOFLUID 19 #define GEOSOLID 16 -LevelGridBuilder::LevelGridBuilder() +LevelGridBuilder::LevelGridBuilder(const std::string& device, const std::string& d3qxx) : device(device), d3qxx(d3qxx) { this->Qs.resize(QFILES); this->channelBoundaryConditions.resize(6); @@ -48,6 +48,11 @@ LevelGridBuilder::LevelGridBuilder() channelBoundaryConditions[5] = "periodic"; } +std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared(const std::string& device, const std::string& d3qxx) +{ + return SPtr<LevelGridBuilder>(new LevelGridBuilder(device, d3qxx)); +} + void LevelGridBuilder::copyDataFromGpu() { @@ -72,17 +77,36 @@ void LevelGridBuilder::verifyGridNeighbors() // std::cout << grid->verifyNeighborIndices(); } -VF_PUBLIC void LevelGridBuilder::addGrid(real minX, real minY, real minZ, real maxX, real maxY, real maxZ, real delta, const std::string& device, const std::string& distribution, bool periodictyX, bool periodictyY, bool periodictyZ) +void LevelGridBuilder::addGrid(real minX, real minY, real minZ, real maxX, real maxY, real maxZ, bool periodictyX, bool periodictyY, bool periodictyZ) +{ + const auto grid = GridFactory::makeGrid(minX, minY, minZ, maxX, maxY, maxZ, -1.0, device, d3qxx); + grid->setPeriodicity(periodictyX, periodictyY, periodictyZ); + + grids.insert(grids.begin(), grid); +} + +SPtr<Grid> LevelGridBuilder::getGrid(uint level) +{ + return grids[level]; +} + +void LevelGridBuilder::generateGrids() +{ + +} + + +void LevelGridBuilder::addGrid(real minX, real minY, real minZ, real maxX, real maxY, real maxZ, real delta, const std::string& device, const std::string& distribution, bool periodictyX, bool periodictyY, bool periodictyZ) { const auto grid = GridFactory::makeGrid(minX, minY, minZ, maxX, maxY, maxZ, delta, device, distribution); grids.insert(grids.begin(), grid); grid->setPeriodicity(periodictyX, periodictyY, periodictyZ); - this->removeOverlapNodes(); } + void LevelGridBuilder::getGridInformations(std::vector<int>& gridX, std::vector<int>& gridY, std::vector<int>& gridZ, std::vector<int>& distX, std::vector<int>& distY, std::vector<int>& distZ) diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h index 3cce3ec90e1e5f8a480771d1098e6401f5c2a518..fc3cfb1f7d56c13b32cc049e1389f7f0d48aba89 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h @@ -23,10 +23,14 @@ class BoundingBox; class LevelGridBuilder : public GridBuilder { +private: + VF_PUBLIC LevelGridBuilder(const std::string& device, const std::string& d3qxx); + public: + VF_PUBLIC static std::shared_ptr<LevelGridBuilder> makeShared(const std::string& device, const std::string& d3qxx); - VF_PUBLIC LevelGridBuilder(); - VF_PUBLIC static std::shared_ptr<GridBuilder> make(std::string); + VF_PUBLIC void addGrid(real minX, real minY, real minZ, real maxX, real maxY, real maxZ, bool periodictyX, bool periodictyY, bool periodictyZ); + VF_PUBLIC SPtr<Grid> getGrid(uint level) override; VF_PUBLIC void copyDataFromGpu(); VF_PUBLIC virtual ~LevelGridBuilder(); @@ -34,7 +38,7 @@ public: VF_PUBLIC virtual void addGrid(real minX, real minY, real minZ, real maxX, real maxY, real maxZ, real delta, const std::string& device, const std::string& distribution, bool periodictyX, bool periodictyY, bool periodictyZ); - + VF_PUBLIC virtual void generateGrids(); VF_PUBLIC virtual void meshGeometry(std::string input, int level); VF_PUBLIC virtual void deleteSolidNodes(); @@ -88,6 +92,11 @@ protected: std::shared_ptr<const ArrowTransformator> trans/*, std::shared_ptr<PolyDataWriterWrapper> writer*/) const; +private: + + std::string device; + std::string d3qxx; + public: VF_PUBLIC void getGridInformations(std::vector<int>& gridX, std::vector<int>& gridY, std::vector<int>& gridZ, std::vector<int>& distX, std::vector<int>& distY, @@ -106,6 +115,7 @@ public: VF_PUBLIC void setOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) override; VF_PUBLIC void setOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) override; + }; #endif diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilderTest.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilderTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..811882ba2540cdfa981d2c222bd68e21328ecf7b --- /dev/null +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilderTest.cpp @@ -0,0 +1,15 @@ +#include "gmock/gmock.h" + +//#include "LevelGridBuilder.h" +//#include "../Grid.cuh" + +//TEST(LevelGridBuilderTest, addTwoGridsWithStartCoordinates_shouldMakeTheFistGridToLevel1) +//{ +// auto gridBuilder = LevelGridBuilder::makeShared("cpu", "D3Q27"); +// gridBuilder->addGrid(12.0, 12.0, 12.0, 14.0, 14.0, 14.0, false, false, false); +// gridBuilder->addGrid(10.0, 10.0, 10.0, 20.0, 20.0, 20.0, true, true, true); +// +// gridBuilder->generateGrids(); +// +// EXPECT_THAT(gridBuilder->getGrid(1)->startX, RealEq(12.25)); +//} diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4d808e1fb5423d3754765b5e0b59d7960c8ea252 --- /dev/null +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -0,0 +1,29 @@ +#include "MultipleGridBuilder.h" + +#include "../GridMocks.h" + +template<typename Grid> +MultipleGridBuilder<Grid>::MultipleGridBuilder() +{ +} + +template<typename Grid> +SPtr<MultipleGridBuilder<Grid> > MultipleGridBuilder<Grid>::makeShared() +{ + return SPtr<MultipleGridBuilder>(new MultipleGridBuilder<Grid>()); +} + +template <typename Grid> +void MultipleGridBuilder<Grid>::addGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, + bool periodicityX, bool periodicityY, bool periodicityZ) +{ + +} + +template <typename Grid> +uint MultipleGridBuilder<Grid>::getNumberOfLevels() const +{ + return 0; +} + +template class MultipleGridBuilder<GridDummy>; diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h new file mode 100644 index 0000000000000000000000000000000000000000..8892966197747fbc94c0b9dd7ad50a600faaacf3 --- /dev/null +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h @@ -0,0 +1,26 @@ +#ifndef MULTIPLE_GRID_BUILDER_H +#define MULTIPLE_GRID_BUILDER_H + +#include "GridGenerator/global.h" + +#include <vector> +#include <string> +#include <memory> + +template<typename Grid> +class MultipleGridBuilder +{ +private: + VF_PUBLIC MultipleGridBuilder(); + +public: + VF_PUBLIC static SPtr<MultipleGridBuilder> makeShared(); + + VF_PUBLIC void addGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, bool periodicityX, bool periodicityY, bool periodicityZ); + VF_PUBLIC uint getNumberOfLevels() const; + + +}; + +#endif + diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5a2b25349f29fc313daba9daed68fb52a164e085 --- /dev/null +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp @@ -0,0 +1,13 @@ +#include "gmock/gmock.h" + +#include "MultipleGridBuilder.h" +#include "../GridMocks.h" + +TEST(MultipleGridBuilderTest, addOneGrid_numberOfLevelsShouldBeOne) +{ + auto gridBuilder = MultipleGridBuilder<GridDummy>::makeShared(); + + gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, true, true, true); + + EXPECT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(1)); +} \ No newline at end of file diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h new file mode 100644 index 0000000000000000000000000000000000000000..04517c6895138ccd3d817802c6b0cee24aba7e35 --- /dev/null +++ b/src/GridGenerator/grid/GridMocks.h @@ -0,0 +1,11 @@ +#ifndef GRID_MOCKS_H +#define GRID_MOCKS_H + +#include "GridGenerator/global.h" + +class GridDummy +{ + +}; + +#endif diff --git a/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp b/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp deleted file mode 100644 index 4a8e36b2a78669a2e27bf41a52b98d19697c76eb..0000000000000000000000000000000000000000 --- a/src/GridGenerator/grid/GridWrapper/GridWrapperCPU/GridWrapperCPU.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#include "GridWrapperCPU.h" - -#include <math.h> -#include <time.h> -#include <stdio.h> -#include <omp.h> -#include <stack> -#include <vector> - -#include <GridGenerator/grid/NodeValues.h> -#include <GridGenerator/grid/distributions/Distribution.h> - -#include <GridGenerator/geometries/BoundingBox/BoundingBox.cuh> -#include <GridGenerator/geometries/Triangle/Triangle.cuh> -#include <GridGenerator/geometries/Geometry/Geometry.cuh> - -#include <utilities/logger/Logger.h> - - -GridWrapperCPU::GridWrapperCPU(BoundingBox<int> &box, std::string direction) -{ - int nx = box.maxX - box.minX; - int ny = box.maxY - box.minY; - int nz = box.maxZ - box.minZ; - this->grid = Grid(NULL, box.minX, box.minY, box.minZ, nx, ny, nz, DistributionHelper::getDistribution(direction)); - this->allocDistribution(); - this->allocField(); - - float time = this->initalUniformGrid3d(); - - *logging::out << logging::Logger::INTERMEDIATE << "Time CPU initial field: " + SSTR(time / 1000) + "sec\n"; - *logging::out << logging::Logger::INTERMEDIATE << "-------------------------------------------\n"; -} - -GridWrapperCPU::GridWrapperCPU(uint minX, uint minY, uint minZ, uint maxX, uint maxY, uint maxZ, std::string d3Qxx) -{ - int nx = maxX - minX; - int ny = maxY - minY; - int nz = maxZ - minZ; - this->grid = Grid(NULL, minX, minY, minZ, nx, ny, nz, DistributionHelper::getDistribution(d3Qxx)); - this->allocDistribution(); - this->allocField(); - - float time = this->initalUniformGrid3d(); - - *logging::out << logging::Logger::INTERMEDIATE << "Time CPU initial field: " + SSTR(time / 1000) + "sec\n"; - *logging::out << logging::Logger::INTERMEDIATE << "-------------------------------------------\n"; -} - -GridWrapperCPU::~GridWrapperCPU() -{ - delete[] this->grid.field; - - delete[] this->grid.neighborIndexX; - delete[] this->grid.neighborIndexY; - delete[] this->grid.neighborIndexZ; - delete[] this->grid.matrixIndex; - - delete[] this->grid.d.f; -} - -real GridWrapperCPU::initalUniformGrid3d() -{ - time_t begin = clock(); - - this->initialGridNodes(); - - time_t end = clock(); - return (real)(real(end - begin) / CLOCKS_PER_SEC); -} - -void GridWrapperCPU::initialGridNodes() -{ - #pragma omp parallel for - for (unsigned int index = 0; index < grid.size; index++) - { - grid.setNeighborIndices(index); - grid.matrixIndex[index] = index; - grid.setFieldEntryToFluid(index); - } -} - -void GridWrapperCPU::meshGrid(Geometry &geom) -{ - clock_t begin = clock(); - runMeshing(geom); - clock_t end = clock(); - float time = (real)(real(end - begin) / CLOCKS_PER_SEC); - - *logging::out << logging::Logger::INTERMEDIATE << "time grid generation: " + SSTR(time) + "s\n"; -} - -void GridWrapperCPU::deleteSolidNodes() -{ - clock_t begin = clock(); - - findInvalidNodes(); - grid.removeInvalidNodes(); - findNeighborIndices(); - - clock_t end = clock(); - float time = (real)(real(end - begin) / CLOCKS_PER_SEC); - *logging::out << logging::Logger::INTERMEDIATE << "time delete solid nodes: " + SSTR(time / 1000) + "sec\n"; -} - -void GridWrapperCPU::allocDistribution() -{ - unsigned long distributionSize = grid.size * (grid.d.dir_end + 1); - real sizeInMB = distributionSize * sizeof(real) / (1024.f*1024.f); - - *logging::out << logging::Logger::INTERMEDIATE << "Allocating " + SSTR(sizeInMB) + " [MB] host memory for distributions.\n"; - - this->grid.d.f = new real[distributionSize](); // automatic initialized with zeros -} - -void GridWrapperCPU::allocField() -{ - *logging::out << logging::Logger::INTERMEDIATE << "-------------------------------------------\n"; - *logging::out << logging::Logger::INTERMEDIATE << "Initial field with fluid: \n"; - *logging::out << logging::Logger::INTERMEDIATE << "Field offset: " + SSTR(grid.startX) + ", " + SSTR(grid.startY) + ", " + SSTR(grid.startZ) + "\n"; - *logging::out << logging::Logger::INTERMEDIATE << "Field dimension: " + SSTR(grid.nx) + ", " + SSTR(grid.ny) + ", " + SSTR(grid.nz) + "\n"; - *logging::out << logging::Logger::INTERMEDIATE << "Number of Nodes: " + SSTR(grid.size) + "\n"; - - this->grid.field = new char[this->grid.size]; - - this->grid.neighborIndexX = new int[this->grid.size]; - this->grid.neighborIndexY = new int[this->grid.size]; - this->grid.neighborIndexZ = new int[this->grid.size]; - - this->grid.matrixIndex = new unsigned int[this->grid.size]; -} - -void GridWrapperCPU::runMeshing(const Geometry &geom) -{ - #pragma omp parallel for - for (int i = 0; i < geom.size; i++) - grid.meshTriangle(geom.triangles[i]); -} - - -void GridWrapperCPU::floodFill(const Vertex &startPoint) -{ - printf("start flood...\n"); - Vertex v(startPoint); - std::stack<Vertex> floodFillStack; - floodFillStack.push(v); - - while (!floodFillStack.empty()) - { - v = floodFillStack.top(); - floodFillStack.pop(); - - unsigned int x = (unsigned int)floor(v.x); - unsigned int y = (unsigned int)floor(v.y); - unsigned int z = (unsigned int)floor(v.z); - - int index = this->grid.transCoordToIndex(x, y, z); - if (this->grid.isFluid(index)) - { - this->grid.setFieldEntryToSolid(index); - floodFillStack.push(Vertex(x, y, z + 1)); - floodFillStack.push(Vertex(x, y, z - 1)); - floodFillStack.push(Vertex(x, y + 1, z)); - floodFillStack.push(Vertex(x, y - 1, z)); - floodFillStack.push(Vertex(x + 1, y, z)); - floodFillStack.push(Vertex(x - 1, y, z)); - } - } - printf("...end flood\n"); -} - -void GridWrapperCPU::findInvalidNodes() -{ - bool foundInvalidNode = true; - while (foundInvalidNode) - { - foundInvalidNode = false; - for (int index = 0; index < grid.size; index++) - grid.setInvalidNode(index, foundInvalidNode); - } -} - -void GridWrapperCPU::findNeighborIndices() -{ - for (int index = 0; index < grid.reducedSize; index++) - grid.findNeighborIndex(index); -} diff --git a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp index 0026ddf845baba534b580b77ba73d066146b2a16..731803c7920676a14ded21ae7728030d5b522fd6 100644 --- a/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp +++ b/src/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.cpp @@ -173,7 +173,7 @@ void SimulationFileWriter::writeCoordFiles(SPtr<GridBuilder> builder, uint level void SimulationFileWriter::writeCoordsNeighborsGeo(SPtr<GridBuilder> builder, int index, uint level, FILEFORMAT format) { - SPtr<Grid> grid = builder->getGrid(level, 0); + SPtr<Grid> grid = builder->getGrid(level); if (grid->matrixIndex[index] == -1) return; diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp index 753d96653e959e4696de400d121e5bad951be0db..3570d36fc9fea8399ac68e58433b47b121f6df09 100644 --- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp +++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp @@ -624,16 +624,16 @@ void updateGrid27(Parameter* para, Communicator* comm, PorousMedia** pm, int lev // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); //getLastCudaError("QVelDevComp27 execution failed"); - if (para->getParD(level)->kInflowQ > 0) - { - QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, - para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, - para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], - para->getParD(level)->kInflowQ, para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega, - para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, - para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); - getLastCudaError("QVelDevCompZeroPress27 execution failed"); - } + //if (para->getParD(level)->kInflowQ > 0) + //{ + // QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], + // para->getParD(level)->kInflowQ, para->getParD(level)->Qinflow.kArray, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QVelDevCompZeroPress27 execution failed"); + //} //QVelDevCompZeroPress27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, // para->getParD(level)->Qinflow.Vx, para->getParD(level)->Qinflow.Vy, para->getParD(level)->Qinflow.Vz, // para->getParD(level)->d0SP.f[0], para->getParD(level)->Qinflow.k, para->getParD(level)->Qinflow.q27[0], @@ -674,28 +674,28 @@ void updateGrid27(Parameter* para, Communicator* comm, PorousMedia** pm, int lev // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); //getLastCudaError("QDev27 (Geom) execution failed"); - if (para->getParD(level)->QGeom.kQ > 0) - { - QDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, - para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], - para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, - para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, - para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); - getLastCudaError("QDevComp27 (Geom) execution failed"); - //QDev3rdMomentsComp27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, - // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], - // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, - // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, - // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); - //getLastCudaError("QDev3rdMomentsComp27 (Geom) execution failed"); - // QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, - // para->getParD(level)->QGeom.Vx, para->getParD(level)->QGeom.Vy, para->getParD(level)->QGeom.Vz, - // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], - // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, - // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, - // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); - // getLastCudaError("QVelDevCompZeroPress27 execution failed"); - } + //if (para->getParD(level)->QGeom.kQ > 0) + //{ + // QDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // getLastCudaError("QDevComp27 (Geom) execution failed"); + // //QDev3rdMomentsComp27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // //getLastCudaError("QDev3rdMomentsComp27 (Geom) execution failed"); + // // QVelDevCompZeroPress27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, + // // para->getParD(level)->QGeom.Vx, para->getParD(level)->QGeom.Vy, para->getParD(level)->QGeom.Vz, + // // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], + // // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, + // // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + // // getLastCudaError("QVelDevCompZeroPress27 execution failed"); + //} //QDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index a021bce38ed481b0a62e31c1ef52a68deaed4efe..f9e1340b7df58579e052c582791789d972664071 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -223,7 +223,7 @@ void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input para->setGridZ(StringUtil::toVector(input->getValue("GridZ"))); para->setDistX(StringUtil::toVector(input->getValue("DistX"))); para->setDistY(StringUtil::toVector(input->getValue("DistY"))); - para->setDistZ(StringUtil::toVector(input->getValue("DistZ"))); */ + para->setDistZ(StringUtil::toVector(input->getValue("DistZ"))); */ para->setNeedInterface(std::vector<bool>{true, true, true, true, true, true}); } @@ -232,15 +232,17 @@ void setParameters(std::shared_ptr<Parameter> para, std::unique_ptr<input::Input void multipleLevel(const std::string& configPath) { - SPtr<LevelGridBuilder> gridBuilder(new LevelGridBuilder()); - //gridBuilder->addGrid(12.4375, 12.4375, 12.4375, 14.5625, 14.5625, 14.5625, 0.125, "cpu", "D3Q27", false, false, false); - //gridBuilder->addGrid(10.375, 10.375, 10.375, 20.625, 20.625, 20.625, 0.25, "cpu", "D3Q27", false, false, false); - gridBuilder->addGrid(5.25, 5.25, 5.25, 24.75, 24.75, 24.75, 0.5, "cpu", "D3Q27", false, false, false); - gridBuilder->addGrid(0.0, 0.0, 0.0, 30.0, 30.0, 30.0, 1.0, "cpu", "D3Q27", true, true, true); - - //gridBuilder->addGrid(40.4375, 40.4375, 40.4375, 60.5625, 60.5625, 60.5625, 0.125, "cpu", "D3Q27"); + auto gridBuilder = LevelGridBuilder::makeShared("cpu", "D3Q27"); + //gridBuilder->addGrid(14.4921875, 14.4921875, 14.4921875, 16.5078125, 16.5078125, 16.5078125, 0.015625, "cpu", "D3Q27", false, false, false); + //gridBuilder->addGrid(13.984375, 13.984375, 13.984375, 17.015625, 17.015625, 17.015625, 0.03125, "cpu", "D3Q27", false, false, false); + //gridBuilder->addGrid(13.46875, 13.46875, 13.46875, 17.53125, 17.53125, 17.53125, 0.0625, "cpu", "D3Q27", false, false, false); + gridBuilder->addGrid(12.4375, 12.4375, 12.4375, 18.5625, 18.5625, 18.5625, 0.125, "gpu", "D3Q27", false, false, false); + gridBuilder->addGrid(10.375, 10.375, 10.375, 20.625, 20.625, 20.625, 0.25, "gpu", "D3Q27", false, false, false); + gridBuilder->addGrid(5.25, 5.25, 5.25, 24.75, 24.75, 24.75, 0.5, "gpu", "D3Q27", false, false, false); + gridBuilder->addGrid(0.0, 0.0, 0.0, 30.0, 30.0, 30.0, 1.0, "gpu", "D3Q27", true, true, true); + gridBuilder->copyDataFromGpu(); //SimulationFileWriter::write("D:/GRIDGENERATION/couplingVF/periodicTaylorThreeLevel/simu/", gridBuilder, FILEFORMAT::ASCII); //gridBuilder->meshGeometry("D:/GRIDGENERATION/STL/circleBinaer.stl", 1); @@ -267,40 +269,6 @@ void multipleLevel(const std::string& configPath) sim.run(); } -void simulate(const std::string& configPath) -{ - SPtr<LevelGridBuilder> builder(new LevelGridBuilder()); - - - SPtr<Parameter> para = Parameter::makeShared(); - SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(builder, para); - //std::shared_ptr<GridProvider> reader = GridProvider::makeGridReader(true, para); - - std::ifstream stream; - stream.open(configPath.c_str(), std::ios::in); - if (stream.fail()) - throw "can not open config file!\n"; - - UPtr<input::Input> input = input::Input::makeInput(stream, "config"); - - setParameters(para, input); - - SPtr<Transformator> trans(new TransformatorImp()); - //builder->addGrid(para->getGridX()[0], para->getGridY()[0], para->getGridZ()[0], 1.0, "D3Q27", trans); - - SPtr<Transformator> transRefine1(new TransformatorImp(para->getDistX()[1], para->getDistY()[1], para->getDistZ()[1], 0.5)); - //builder->addGrid(para->getGridX()[1], para->getGridY()[1], para->getGridZ()[1], 1.0, "D3Q27", transRefine1); - - //builder->getGridWrapper(0, 0)->copyDataFromGPU(); - //builder->getGridWrapper(1, 0)->copyDataFromGPU(); - - //GridVTKWriter::writeSparseGridToVTK(builder->getGridWrapper(0, 0)->grid, "D:/GRIDGENERATION/couplingVF/periodicTaylor/testFile", trans); - SimulationFileWriter::write("D:/GRIDGENERATION/couplingVF/periodicTaylor/simuFiles/", builder, FILEFORMAT::ASCII); - - Simulation sim; - sim.init(para, gridGenerator); - sim.run(); -} int main( int argc, char* argv[]) {