diff --git a/apps/gpu/ChannelFlow/ChannelFlow.cpp b/apps/gpu/ChannelFlow/ChannelFlow.cpp index c716729f88d2e9d07b7647749f09127e8acf252e..45a42e4a2be8c8fb7f0af06ea17de5e2761500ee 100644 --- a/apps/gpu/ChannelFlow/ChannelFlow.cpp +++ b/apps/gpu/ChannelFlow/ChannelFlow.cpp @@ -60,7 +60,7 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h" +#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" #include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" #include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) vf::parallel::Communicator &communicator = *vf::parallel::MPICommunicator::getInstance(); const int numberOfProcesses = communicator.getNumberOfProcesses(); const auto processID = communicator.getProcessID(); - SPtr<Parameter> para = std::make_shared<Parameter>(numberOfProcesses, processId); + SPtr<Parameter> para = std::make_shared<Parameter>(numberOfProcesses, processID); std::vector<uint> devices(10); std::iota(devices.begin(), devices.end(), 0); para->setDevices(devices); @@ -106,7 +106,7 @@ int main(int argc, char *argv[]) // setup logger ////////////////////////////////////////////////////////////////////////// vf::logging::Logger::changeLogPath("output/vflog_process" + - std::to_string(processId) + ".txt"); + std::to_string(processID) + ".txt"); vf::logging::Logger::initializeLogger(); ////////////////////////////////////////////////////////////////////////// @@ -150,13 +150,15 @@ int main(int argc, char *argv[]) real overlap = (real)8.0 * dx; + auto gridBuilder = std::make_shared<MultipleGridBuilder>(); + if (numberOfProcesses > 1) { ////////////////////////////////////////////////////////////////////////// // add coarse grids ////////////////////////////////////////////////////////////////////////// - real subdomainMinX = channelWidth * processId; + real subdomainMinX = channelWidth * processID; real subdomainMinXoverlap = subdomainMinX; real subdomainMaxX = subdomainMinX + channelWidth; real subdomainMaxXoverlap = subdomainMaxX; @@ -167,8 +169,6 @@ int main(int argc, char *argv[]) if (processID != numberOfProcesses - 1) subdomainMaxXoverlap += overlap; - auto gridBuilder = std::make_shared<MultipleGridBuilder>(); - gridBuilder->addCoarseGrid(subdomainMinXoverlap, yGridMin, zGridMin, subdomainMaxXoverlap, yGridMax, zGridMax, dx); @@ -190,13 +190,13 @@ int main(int argc, char *argv[]) ////////////////////////////////////////////////////////////////////////// if (processID != 0) { - gridBuilder->findCommunicationIndices(CommunicationDirections::MX, LBM); - gridBuilder->setCommunicationProcess(CommunicationDirections::MX, processId - 1); + gridBuilder->findCommunicationIndices(CommunicationDirections::MX); + gridBuilder->setCommunicationProcess(CommunicationDirections::MX, processID - 1); } if (processID != numberOfProcesses - 1) { - gridBuilder->findCommunicationIndices(CommunicationDirections::PX, LBM); - gridBuilder->setCommunicationProcess(CommunicationDirections::PX, processId + 1); + gridBuilder->findCommunicationIndices(CommunicationDirections::PX); + gridBuilder->setCommunicationProcess(CommunicationDirections::PX, processID + 1); } ////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/RotatingGrid/RotatingGrid.cpp b/apps/gpu/RotatingGrid/RotatingGrid.cpp index 0bbc36d79d5a230e5571c0fc20df586c7e3c8cf2..43df5652b9c7190a19313697824aaedf06509761 100644 --- a/apps/gpu/RotatingGrid/RotatingGrid.cpp +++ b/apps/gpu/RotatingGrid/RotatingGrid.cpp @@ -49,6 +49,7 @@ ////////////////////////////////////////////////////////////////////////// #include "GridGenerator/geometries/Cuboid/Cuboid.h" +#include "GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h" #include "GridGenerator/grid/BoundaryConditions/Side.h" #include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h" #include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" @@ -79,7 +80,7 @@ int main() std::string simulationName("RotatingGrid"); const real L = 1.0; - const real Re = 1000.0; + const real Re = 2000.0; const real velocity = 1.0; const real velocityLB = 0.05; // LB units const uint nx = 64; @@ -94,9 +95,6 @@ int main() const real dx = L / real(nx); const real dt = velocityLB / velocity * dx; - const real vxLB = velocityLB / sqrt(2.0); // LB units - const real vyLB = velocityLB / sqrt(2.0); // LB units - const real viscosityLB = nx * velocityLB / Re; // LB units ////////////////////////////////////////////////////////////////////////// @@ -104,9 +102,9 @@ int main() ////////////////////////////////////////////////////////////////////////// auto gridBuilder = std::make_shared<MultipleGridBuilder>(); - gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L, 0.5 * L, 0.5 * L, 0.5 * L, dx); + gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -1.5 * L, 0.5 * L, 0.5 * L, 1.5 * L, dx); - gridBuilder->addGridWithSameDeltaAsPreviousGrid(std::make_shared<Cuboid>(-0.25, -0.25, -0.25, 0.25, 0.25, 0.25)); + gridBuilder->addGridWithSameDeltaAsPreviousGrid(std::make_shared<VerticalCylinder>(0.0, 0.0, 0.0, 0.25 * L, 0.5 * L)); GridScalingFactory scalingFactory = GridScalingFactory(); scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); @@ -127,7 +125,7 @@ int main() para->setVelocityLB(velocityLB); para->setViscosityLB(viscosityLB); - para->setVelocityRatio(velocity / velocityLB); + para->setVelocityRatio(1.0); // velocity / velocityLB); para->setDensityRatio(1.0); para->setTimestepOut(timeStepOut); @@ -139,18 +137,20 @@ int main() // set boundary conditions ////////////////////////////////////////////////////////////////////////// - gridBuilder->setNoSlipBoundaryCondition(SideType::PX); - gridBuilder->setNoSlipBoundaryCondition(SideType::MX); - gridBuilder->setNoSlipBoundaryCondition(SideType::PY); - gridBuilder->setNoSlipBoundaryCondition(SideType::MY); - gridBuilder->setNoSlipBoundaryCondition(SideType::MZ); - gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vxLB, vyLB, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0); - BoundaryConditionFactory bcFactory; + gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, velocityLB); + gridBuilder->setPressureBoundaryCondition(SideType::PZ, 0.0); - bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack); - bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocitySimpleBounceBackCompressible); + BoundaryConditionFactory bcFactory; + bcFactory.setSlipBoundaryCondition(BoundaryConditionFactory::SlipBC::SlipCompressible); + // bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack); + bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible); + bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible); ////////////////////////////////////////////////////////////////////////// // set copy mesh to simulation ////////////////////////////////////////////////////////////////////////// @@ -179,8 +179,6 @@ int main() VF_LOG_INFO("Re = {}", Re); VF_LOG_INFO("lb_velocity [dx/dt] = {}", velocityLB); VF_LOG_INFO("lb_viscosity [dx^2/dt] = {}", viscosityLB); - VF_LOG_INFO("lb_vx [dx/dt] (lb_velocity/sqrt(2)) = {}", vxLB); - VF_LOG_INFO("lb_vy [dx/dt] (lb_velocity/sqrt(2)) = {}", vyLB); printf("\n"); VF_LOG_INFO("simulation parameter:"); VF_LOG_INFO("--------------");