From 75f5d30900a252332d5292e1cdea5bafbecc34fd Mon Sep 17 00:00:00 2001 From: Soeren Peters <peters@irmb.tu-bs.de> Date: Mon, 28 May 2018 14:57:16 +0200 Subject: [PATCH] - in Side: ignore first or last node row if the side is already set - in side: add 1 to sparseIndex concerning to martins indices --- .../grid/BoundaryConditions/Side.cpp | 161 +++++++++++++++--- .../grid/BoundaryConditions/Side.h | 34 +++- .../grid/GridBuilder/LevelGridBuilder.cpp | 12 +- .../grid/GridBuilder/LevelGridBuilder.h | 2 + .../grid/GridBuilder/MultipleGridBuilder.cpp | 10 +- .../DataStructureInitializer/GridProvider.cpp | 9 + .../GridReaderGenerator/GridGenerator.cpp | 57 +++++-- src/VirtualFluids_GPU/LBM/Simulation.cpp | 18 +- targets/apps/HULC/main.cpp | 19 +-- 9 files changed, 259 insertions(+), 63 deletions(-) diff --git a/src/GridGenerator/grid/BoundaryConditions/Side.cpp b/src/GridGenerator/grid/BoundaryConditions/Side.cpp index 01147ead2..e3c7d537c 100644 --- a/src/GridGenerator/grid/BoundaryConditions/Side.cpp +++ b/src/GridGenerator/grid/BoundaryConditions/Side.cpp @@ -8,13 +8,13 @@ void Side::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::string coord, real constant, real startInner, real endInner, real startOuter, real endOuter) { - for (real v1 = startInner; v1 < endInner; v1 += grid->getDelta()) + for (real v1 = startInner; v1 <= endInner; v1 += grid->getDelta()) { - for (real v2 = startOuter; v2 < endOuter; v2 += grid->getDelta()) + for (real v2 = startOuter; v2 <= endOuter; v2 += grid->getDelta()) { uint index = getIndex(grid, coord, constant, v1, v2); if (grid->getFieldEntry(index) == FLUID) - boundaryCondition->indices.push_back(index); + boundaryCondition->indices.push_back(grid->getSparseIndex(index) + 1); } } } @@ -30,15 +30,44 @@ uint Side::getIndex(SPtr<Grid> grid, std::string coord, real constant, real v1, return -1; } +void Geometry::setPeriodicy(SPtr<Grid> grid) +{ + +} + +void Geometry::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) +{ + +} + void MX::setPeriodicy(SPtr<Grid> grid) { grid->setPeriodicityX(false); } -void MX::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void MX::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "x", grid->getStartX() + grid->getDelta(), grid->getStartY(), - grid->getEndY(), grid->getStartZ(), grid->getEndZ()); + real startInner = grid->getStartY(); + real endInner = grid->getEndY(); + + real startOuter = grid->getStartZ(); + real endOuter = grid->getEndZ(); + + if (sideIsSet[SideType::MY]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PY]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MZ]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PZ]) + endOuter -= grid->getDelta(); + + + Side::addIndices(grid, boundaryCondition, "x", grid->getStartX() + grid->getDelta(), startInner, + endInner, startOuter, endOuter); } void PX::setPeriodicy(SPtr<Grid> grid) @@ -46,10 +75,28 @@ void PX::setPeriodicy(SPtr<Grid> grid) grid->setPeriodicityX(false); } -void PX::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void PX::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "x", grid->getEndX() - grid->getDelta(), grid->getStartY(), - grid->getEndY(), grid->getStartZ(), grid->getEndZ()); + real startInner = grid->getStartY(); + real endInner = grid->getEndY(); + + real startOuter = grid->getStartZ(); + real endOuter = grid->getEndZ(); + + if (sideIsSet[SideType::MY]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PY]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MZ]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PZ]) + endOuter -= grid->getDelta(); + + Side::addIndices(grid, boundaryCondition, "x", grid->getEndX() - grid->getDelta(), startInner, + endInner, startOuter, endOuter); } void MY::setPeriodicy(SPtr<Grid> grid) @@ -57,10 +104,28 @@ void MY::setPeriodicy(SPtr<Grid> grid) grid->setPeriodicityY(false); } -void MY::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void MY::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "y", grid->getStartY() + grid->getDelta(), grid->getStartX(), - grid->getEndX(), grid->getStartZ(), grid->getEndZ()); + real startInner = grid->getStartX(); + real endInner = grid->getEndX(); + + real startOuter = grid->getStartZ(); + real endOuter = grid->getEndZ(); + + if (sideIsSet[SideType::MX]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PX]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MZ]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PZ]) + endOuter -= grid->getDelta(); + + Side::addIndices(grid, boundaryCondition, "y", grid->getStartY() + grid->getDelta(), startInner, + endInner, startOuter, endOuter); } void PY::setPeriodicy(SPtr<Grid> grid) @@ -68,10 +133,28 @@ void PY::setPeriodicy(SPtr<Grid> grid) grid->setPeriodicityY(false); } -void PY::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void PY::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "y", grid->getEndY() - grid->getDelta(), grid->getStartX(), - grid->getEndX(), grid->getStartZ(), grid->getEndZ()); + real startInner = grid->getStartX(); + real endInner = grid->getEndX(); + + real startOuter = grid->getStartZ(); + real endOuter = grid->getEndZ(); + + if (sideIsSet[SideType::MX]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PX]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MZ]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PZ]) + endOuter -= grid->getDelta(); + + Side::addIndices(grid, boundaryCondition, "y", grid->getEndY() - grid->getDelta(), startInner, + endInner, startOuter, endOuter); } void MZ::setPeriodicy(SPtr<Grid> grid) @@ -79,10 +162,28 @@ void MZ::setPeriodicy(SPtr<Grid> grid) grid->setPeriodicityZ(false); } -void MZ::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void MZ::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "z", grid->getStartZ() + grid->getDelta(), grid->getStartX(), - grid->getEndX(), grid->getStartY(), grid->getEndY()); + real startInner = grid->getStartX(); + real endInner = grid->getEndX(); + + real startOuter = grid->getStartY(); + real endOuter = grid->getEndY(); + + if (sideIsSet[SideType::MX]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PX]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MY]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PY]) + endOuter -= grid->getDelta(); + + Side::addIndices(grid, boundaryCondition, "z", grid->getStartZ() + grid->getDelta(), startInner, + endInner, startOuter, endOuter); } void PZ::setPeriodicy(SPtr<Grid> grid) @@ -90,8 +191,26 @@ void PZ::setPeriodicy(SPtr<Grid> grid) grid->setPeriodicityZ(false); } -void PZ::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) +void PZ::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) { - Side::addIndices(grid, boundaryCondition, "z", grid->getEndZ() - grid->getDelta(), grid->getStartX(), - grid->getEndX(), grid->getStartY(), grid->getEndY()); + real startInner = grid->getStartX(); + real endInner = grid->getEndX(); + + real startOuter = grid->getStartY(); + real endOuter = grid->getEndY(); + + if (sideIsSet[SideType::MX]) + startInner += grid->getDelta(); + + if (sideIsSet[SideType::PX]) + endInner -= grid->getDelta(); + + if (sideIsSet[SideType::MY]) + startOuter += grid->getDelta(); + + if (sideIsSet[SideType::PY]) + endOuter -= grid->getDelta(); + + Side::addIndices(grid, boundaryCondition, "z", grid->getEndZ() - grid->getDelta(), startInner, + endInner, startOuter, endOuter); } diff --git a/src/GridGenerator/grid/BoundaryConditions/Side.h b/src/GridGenerator/grid/BoundaryConditions/Side.h index cbd28dffe..7eaac59cc 100644 --- a/src/GridGenerator/grid/BoundaryConditions/Side.h +++ b/src/GridGenerator/grid/BoundaryConditions/Side.h @@ -7,6 +7,7 @@ #include <core/PointerDefinitions.h> #include <core/DataTypes.h> +#include <map> #define X_INDEX 0 #define Y_INDEX 1 @@ -22,7 +23,7 @@ class Side; enum class SideType { - MX, PX, MY, PY, MZ, PZ + MX, PX, MY, PY, MZ, PZ, GEOMETRY }; @@ -30,7 +31,7 @@ enum class SideType class Side { public: - virtual void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) = 0; + virtual void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) = 0; virtual void setPeriodicy(SPtr<Grid> grid) = 0; virtual int getCoordinate() const = 0; @@ -44,11 +45,28 @@ private: static uint getIndex(SPtr<Grid> grid, std::string coord, real constant, real v1, real v2); }; +class Geometry : public Side +{ +public: + void setPeriodicy(SPtr<Grid> grid) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; + + int getCoordinate() const override + { + return X_INDEX; + } + + int getDirection() const override + { + return NEGATIVE_DIR; + } +}; + class MX : public Side { public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { @@ -66,7 +84,7 @@ class PX : public Side public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { @@ -85,7 +103,7 @@ class MY : public Side public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { @@ -103,7 +121,7 @@ class PY : public Side public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { @@ -122,7 +140,7 @@ class MZ : public Side public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { @@ -140,7 +158,7 @@ class PZ : public Side public: void setPeriodicy(SPtr<Grid> grid) override; - void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition) override; + void addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::map<SideType, bool> sideIsSet) override; int getCoordinate() const override { diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp index 66f9f83d8..718f17561 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp @@ -44,6 +44,10 @@ LevelGridBuilder::LevelGridBuilder(Device device, const std::string& d3qxx) : de channelBoundaryConditions[3] = "periodic"; channelBoundaryConditions[4] = "periodic"; channelBoundaryConditions[5] = "periodic"; + + + sideIsSet = { { SideType::MX, false },{ SideType::PX, false },{ SideType::MY, false },{ SideType::PY, false },{ SideType::MZ, false },{ SideType::PZ, false } }; + } std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared(Device device, const std::string& d3qxx) @@ -53,6 +57,8 @@ std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared(Device device, co void LevelGridBuilder::setVelocityBoundaryCondition(SideType sideType, real vx, real vy, real vz) { + sideIsSet[sideType] = true; + SPtr<VelocityBoundaryCondition> velocityBoundaryCondition = VelocityBoundaryCondition::make(vx, vy, vz); auto side = SideFactory::make(sideType); @@ -64,7 +70,10 @@ void LevelGridBuilder::setVelocityBoundaryCondition(SideType sideType, real vx, void LevelGridBuilder::setPressureBoundaryCondition(SideType sideType, real rho) { + sideIsSet[sideType] = true; + SPtr<PressureBoundaryCondition> pressureBoundaryCondition = PressureBoundaryCondition::make(rho); + auto side = SideFactory::make(sideType); side->setPeriodicy(grids[0]); @@ -239,7 +248,8 @@ void LevelGridBuilder::getVelocityValues(real* vx, real* vy, real* vz, int* indi { for(int i = 0; i < boundaryCondition->indices.size(); i++) { - indices[allIndicesCounter] = boundaryCondition->indices[i]; + indices[allIndicesCounter] = boundaryCondition->indices[i]; + vx[allIndicesCounter] = boundaryCondition->vx; vy[allIndicesCounter] = boundaryCondition->vy; vz[allIndicesCounter] = boundaryCondition->vz; diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h index ce6626012..68f3636ed 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h @@ -81,6 +81,8 @@ protected: std::vector<std::shared_ptr<Grid> > grids; std::vector<std::vector<std::vector<real> > > Qs; std::vector<std::string> channelBoundaryConditions; + + std::map<SideType, bool> sideIsSet; std::vector<SPtr<VelocityBoundaryCondition> > velocityBoundaryConditions; std::vector<SPtr<PressureBoundaryCondition> > pressureBoundaryConditions; diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index c9c05c39a..928ce9971 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -256,7 +256,7 @@ void MultipleGridBuilder::buildGrids() for (auto grid : grids) grid->inital(); - grids[grids.size()-1]->mesh(solidObject); + //grids[grids.size()-1]->mesh(solidObject); for (size_t i = 0; i < grids.size() - 1; i++) grids[i]->findGridInterface(grids[i + 1]); @@ -270,8 +270,14 @@ void MultipleGridBuilder::buildGrids() for(auto velocityBC : velocityBoundaryConditions) { - velocityBC->side->addIndices(grids[0], velocityBC); + velocityBC->side->addIndices(grids[0], velocityBC, sideIsSet); } + + for (auto pressureBC : pressureBoundaryConditions) + { + pressureBC->side->addIndices(grids[0], pressureBC, sideIsSet); + } + } diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp index 0e23e6957..8c92cd064 100644 --- a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp +++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp @@ -72,6 +72,15 @@ void GridProvider::setInitalNodeValues(const int numberOfNodes, const int level) para->getParH(level)->gDyvz[j] = 0.0f; para->getParH(level)->gDzvz[j] = 0.0f; } + + + + para->getParH(level)->rho_SP[j] = 0.0; + + para->getParH(level)->vx_SP[j] = 0.0; + para->getParH(level)->vy_SP[j] = 0.0; + para->getParH(level)->vz_SP[j] = 0.0; + } //////////////////////////////////////////////////////////////////////////////// //2D parabolic test for turbulent channel flow diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp index b80699bb1..37d643992 100644 --- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp +++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp @@ -124,34 +124,63 @@ void GridGenerator::allocArrays_CoordNeighborGeo() void GridGenerator::allocArrays_BoundaryValues() { std::cout << "------read BoundaryValues------" << std::endl; + + for (int level = 0; level < builder->getNumberOfGridLevels(); level++) { + const auto numberOfPressureValues = int(builder->getPressureSize(level)); + + cout << "size pressure level " << level << " : " << numberOfPressureValues << endl; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + para->getParH(level)->QPress.kQ = numberOfPressureValues; + para->getParD(level)->QPress.kQ = numberOfPressureValues; + para->getParH(level)->kPressQread = numberOfPressureValues * para->getD3Qxx(); + para->getParD(level)->kPressQread = numberOfPressureValues * para->getD3Qxx(); + if (numberOfPressureValues > 1) + { + para->cudaAllocPress(level); + builder->getPressureValues(para->getParH(level)->QPress.RhoBC, para->getParH(level)->QPress.k, level); + para->cudaCopyPress(level); + } + } + for (uint level = 0; level < builder->getNumberOfGridLevels(); level++) { const auto numberOfVelocityValues = int(builder->getVelocitySize(level)); + cout << "size velocity level " << level << " : " << numberOfVelocityValues << endl; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + int blocks = (numberOfVelocityValues / para->getParH(level)->numberofthreads) + 1; + para->getParH(level)->Qinflow.kArray = blocks * para->getParH(level)->numberofthreads; + para->getParD(level)->Qinflow.kArray = para->getParH(level)->Qinflow.kArray; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + para->getParH(level)->Qinflow.kQ = numberOfVelocityValues; + para->getParD(level)->Qinflow.kQ = numberOfVelocityValues; + para->getParH(level)->kInflowQ = numberOfVelocityValues; + para->getParD(level)->kInflowQ = numberOfVelocityValues; + para->getParH(level)->kInflowQread = numberOfVelocityValues * para->getD3Qxx(); + para->getParD(level)->kInflowQread = numberOfVelocityValues * para->getD3Qxx(); + if (numberOfVelocityValues > 1) { - cout << "size velocity level " << level << " : " << numberOfVelocityValues << endl; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - int blocks = (numberOfVelocityValues / para->getParH(level)->numberofthreads) + 1; - para->getParH(level)->Qinflow.kArray = blocks * para->getParH(level)->numberofthreads; - para->getParD(level)->Qinflow.kArray = para->getParH(level)->Qinflow.kArray; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - para->getParH(level)->Qinflow.kQ = numberOfVelocityValues; - para->getParD(level)->Qinflow.kQ = numberOfVelocityValues; - para->getParH(level)->kInflowQ = numberOfVelocityValues; - para->getParD(level)->kInflowQ = numberOfVelocityValues; - para->getParH(level)->kInflowQread = numberOfVelocityValues * para->getD3Qxx(); - para->getParD(level)->kInflowQread = numberOfVelocityValues * para->getD3Qxx(); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// para->cudaAllocVeloBC(level); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// builder->getVelocityValues(para->getParH(level)->Qinflow.Vx, para->getParH(level)->Qinflow.Vy, para->getParH(level)->Qinflow.Vz, para->getParH(level)->Qinflow.k, level); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - para->cudaCopyVeloBC(level); + //for (int i = 0; i < numberOfVelocityValues; i++) + //{ + // std::cout << "index: " << para->getParH(level)->Qinflow.k[i]; + // std::cout << " (x,y,z)" << para->getParH(level)->coordX_SP[para->getParH(level)->Qinflow.k[i]]; + // std::cout << ", " << para->getParH(level)->coordY_SP[para->getParH(level)->Qinflow.k[i]]; + // std::cout << ", " << para->getParH(level)->coordZ_SP[para->getParH(level)->Qinflow.k[i]]; + // std::cout << " geo: " << para->getParH(level)->geoSP[para->getParH(level)->Qinflow.k[i]]; + // std::cout << std::endl; + //} + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + para->cudaCopyVeloBC(level); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // advection - diffusion stuff diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp index a57d31274..06e5521d1 100644 --- a/src/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp @@ -1197,13 +1197,17 @@ void Simulation::run() //para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP, //para->getParD(0)->size_Mat_SP, para->getParD(0)->evenOrOdd); // getLastCudaError("QVelDevComp27 execution failed"); - QVelDevCompZeroPress27(para->getParD(0)->numberofthreads, para->getParD(0)->nx, para->getParD(0)->ny, - para->getParD(0)->Qinflow.Vx, para->getParD(0)->Qinflow.Vy, para->getParD(0)->Qinflow.Vz, - para->getParD(0)->d0SP.f[0], para->getParD(0)->Qinflow.k, para->getParD(0)->Qinflow.q27[0], - para->getParD(0)->kInflowQ, para->getParD(0)->Qinflow.kArray, para->getParD(0)->omega, - para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP, - para->getParD(0)->size_Mat_SP, para->getParD(0)->evenOrOdd); - getLastCudaError("QVelDevComp27 execution failed"); + if (para->getParD(0)->kInflowQ > 0) + { + QVelDevCompZeroPress27(para->getParD(0)->numberofthreads, para->getParD(0)->nx, para->getParD(0)->ny, + para->getParD(0)->Qinflow.Vx, para->getParD(0)->Qinflow.Vy, para->getParD(0)->Qinflow.Vz, + para->getParD(0)->d0SP.f[0], para->getParD(0)->Qinflow.k, para->getParD(0)->Qinflow.q27[0], + para->getParD(0)->kInflowQ, para->getParD(0)->Qinflow.kArray, para->getParD(0)->omega, + para->getParD(0)->neighborX_SP, para->getParD(0)->neighborY_SP, para->getParD(0)->neighborZ_SP, + para->getParD(0)->size_Mat_SP, para->getParD(0)->evenOrOdd); + getLastCudaError("QVelDevComp27 execution failed"); + } + //////////////////////////////////////////////////////////////////////////// //QVeloDevEQ27(para->getParD(0)->numberofthreads, diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index 10467ee6d..e88f3aa4f 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -276,17 +276,15 @@ void multipleLevel(const std::string& configPath) TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/input/local_input/bruecke.stl"); - gridBuilder->addGeometry(triangularMesh); + //gridBuilder->addGeometry(triangularMesh); - - gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.01, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.01, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.01, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.01, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.01, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.01, 0.0, 0.0); - - //gridBuilder->setBoundaryCondition("geometry", BoundaryCondition::VELOCITY); + gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.001, 0.0, 0.0); + gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.001, 0.0, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.001, 0.0, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.001, 0.0, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.001, 0.0, 0.0); + //gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.001, 0.0, 0.0); //TriangleOffsetSurfaceGeneration::createOffsetTriangularMesh(triangularMesh, 5); @@ -310,6 +308,7 @@ void multipleLevel(const std::string& configPath) //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTest_level_2", 2); gridBuilder->buildGrids(); + //SimulationFileWriter::write("D:/GRIDGENERATION/files/", gridBuilder, FILEFORMAT::ASCII); //gridBuilder->writeGridsToVtk("D:/GRIDGENERATION/"); -- GitLab