From 87ab0cc900b499cacb3b9885b71a296528d5c920 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-braunschweig.de> Date: Thu, 17 Aug 2023 07:57:11 +0000 Subject: [PATCH] Use new cylinder for rotating grid --- apps/gpu/RotatingGrid/RotatingGrid.cpp | 20 +++++++++--------- .../geometries/Cylinder/Cylinder.cpp | 5 +++++ .../geometries/Cylinder/Cylinder.h | 1 + .../grid/GridBuilder/MultipleGridBuilder.cpp | 21 +++++-------------- .../grid/GridBuilder/MultipleGridBuilder.h | 6 +++--- .../GridBuilder/MultipleGridBuilderTest.cpp | 8 +++---- 6 files changed, 28 insertions(+), 33 deletions(-) diff --git a/apps/gpu/RotatingGrid/RotatingGrid.cpp b/apps/gpu/RotatingGrid/RotatingGrid.cpp index bc13d54b4..3c3eb31a4 100644 --- a/apps/gpu/RotatingGrid/RotatingGrid.cpp +++ b/apps/gpu/RotatingGrid/RotatingGrid.cpp @@ -49,7 +49,7 @@ ////////////////////////////////////////////////////////////////////////// #include "GridGenerator/geometries/Cuboid/Cuboid.h" -#include "GridGenerator/geometries/VerticalCylinder/VerticalCylinder.h" +#include "GridGenerator/geometries/Cylinder/Cylinder.h" #include "GridGenerator/grid/BoundaryConditions/Side.h" #include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h" #include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" @@ -77,7 +77,7 @@ int main() // Simulation parameters ////////////////////////////////////////////////////////////////////////// enum RotationOrInterpolation {Rot, Int}; - const RotationOrInterpolation rotOrInt = Int; + const RotationOrInterpolation rotOrInt = Rot; const std::string path("./output/RotatingGrid"); const std::string simulationName = rotOrInt == Int ? "RotatingGridInterpolationTest" : "RotatingGrid"; @@ -105,10 +105,10 @@ int main() ////////////////////////////////////////////////////////////////////////// auto gridBuilder = std::make_shared<MultipleGridBuilder>(); - gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -1.5 * L, 0.5 * L, 0.5 * L, 1.5 * L, dx); + gridBuilder->addCoarseGrid(-1.5 * L, -0.5 * L, -0.5 * L, 1.5 * L, 0.5 * L, 0.5 * L, dx); - if (rotOrInt == Rot) gridBuilder->addGridRotatingGrid(std::make_shared<VerticalCylinder>(0.0, 0.0, 0.0, 0.3 * L, 1. * L)); - if (rotOrInt == Int) gridBuilder->addGrid(std::make_shared<VerticalCylinder>(0.0, 0.0, 0.0, 0.3 * L, 1. * L), 1); + if (rotOrInt == Rot) gridBuilder->addGridRotatingGrid(std::make_shared<Cylinder>(0.0, 0.0, 0.0, 0.3 * L, 1. * L, Cylinder::PrincipalAxis::x)); + if (rotOrInt == Int) gridBuilder->addGrid(std::make_shared<Cylinder>(0.0, 0.0, 0.0, 0.3 * L, 1. * L, Cylinder::PrincipalAxis::x), 1); GridScalingFactory scalingFactory = GridScalingFactory(); scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); @@ -142,13 +142,13 @@ int main() // set boundary conditions ////////////////////////////////////////////////////////////////////////// - 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); + gridBuilder->setSlipBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0); + gridBuilder->setSlipBoundaryCondition(SideType::PZ, 0.0, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, velocityLB); - gridBuilder->setPressureBoundaryCondition(SideType::PZ, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MX, velocityLB, 0.0, 0.0); + gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); BoundaryConditionFactory bcFactory; diff --git a/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp index a102e01cd..29dc74bad 100644 --- a/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp +++ b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.cpp @@ -90,6 +90,11 @@ double Cylinder::getHeight() const return height; } +Cylinder::PrincipalAxis Cylinder::getPrincipalAxis() const +{ + return principalAxis; +} + bool Cylinder::isInCircle(double delta1, double delta2, double offset) const { return (delta1 * delta1 + delta2 * delta2) < ((this->radius - offset) * (this->radius - offset)); diff --git a/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h index 5af1f3b15..108d14ef5 100644 --- a/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h +++ b/src/gpu/GridGenerator/geometries/Cylinder/Cylinder.h @@ -65,6 +65,7 @@ public: double getRadius() const; double getHeight() const; + PrincipalAxis getPrincipalAxis() const; bool isPointInObject(const double &x1, const double &x2, const double &x3, const double &minOffset, const double &maxOffset) override; diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index e087ef11f..53604a3a2 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -45,7 +45,7 @@ #include "grid/BoundaryConditions/Side.h" #include "grid/Grid.h" #include "grid/GridFactory.h" -#include "geometries/VerticalCylinder/VerticalCylinder.h" +#include "geometries/Cylinder/Cylinder.h" #include "io/GridVTKWriter/GridVTKWriter.h" #include "io/STLReaderWriter/STLWriter.h" @@ -101,7 +101,7 @@ void MultipleGridBuilder::addGrid(SPtr<Object> gridShape) addGridToListIfValid(grid); } -void MultipleGridBuilder::addGridRotatingGrid(SPtr<VerticalCylinder> cylinder) +void MultipleGridBuilder::addGridRotatingGrid(SPtr<Cylinder> cylinder) { if (!coarseGridExists()) return emitNoCoarseGridExistsWarning(); @@ -246,7 +246,7 @@ SPtr<Grid> MultipleGridBuilder::makeGrid(SPtr<Object> gridShape, uint level, uin return newGrid; } -SPtr<Grid> MultipleGridBuilder::makeRotatingGrid(SPtr<VerticalCylinder> cylinder, uint level, uint levelFine) +SPtr<Grid> MultipleGridBuilder::makeRotatingGrid(SPtr<Cylinder> cylinder, uint level, uint levelFine) { boundaryConditions.push_back(std::make_shared<BoundaryConditions>()); @@ -259,20 +259,9 @@ SPtr<Grid> MultipleGridBuilder::makeRotatingGrid(SPtr<VerticalCylinder> cylinder const auto staggeredCoordinates = getStaggeredCoordinates(cylinder, level, levelFine, xOddStart, yOddStart, zOddStart, staggeringRelative, true); - VF_LOG_WARNING("RotGr: Cylinder Size x : {}, {} \n z: {}, {}", cylinder->getX1Minimum(), cylinder->getX1Maximum(), cylinder->getX3Minimum(), cylinder->getX3Maximum()); - VF_LOG_WARNING("RotGr: MakeGrid {}, {}, {}, {}, {}, {}, delta: {}, level: {}", staggeredCoordinates[0], - staggeredCoordinates[1], - staggeredCoordinates[2], - staggeredCoordinates[3], - staggeredCoordinates[4], - staggeredCoordinates[5], delta, level); - // #TODO: change next line to use staggering - cylinder = std::make_shared<VerticalCylinder>(cylinder->getX1Centroid(), cylinder->getX2Centroid(), - cylinder->getX3Centroid(), cylinder->getRadius() + 6.0 * delta, - cylinder->getHeight() + 6.0 * delta); - VF_LOG_WARNING("RotGr: LargerCylinder Size x : {}, {} \n z: {}, {}", cylinder->getX1Minimum(), cylinder->getX1Maximum(), - cylinder->getX3Minimum(), cylinder->getX3Maximum()); + cylinder = std::make_shared<Cylinder>(cylinder->getX1Centroid(), cylinder->getX2Centroid(), cylinder->getX3Centroid(), + cylinder->getRadius() + 6.0 * delta, cylinder->getHeight() + 6.0 * delta, cylinder->getPrincipalAxis()); SPtr<Grid> newGrid = this->makeGrid(cylinder, staggeredCoordinates[0], staggeredCoordinates[1], diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h index 1b496db6d..981a7bc18 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h @@ -45,7 +45,7 @@ class Object; class BoundingBox; -class VerticalCylinder; +class Cylinder; class MultipleGridBuilder : public LevelGridBuilder { @@ -54,7 +54,7 @@ public: GRIDGENERATOR_EXPORT void addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta); GRIDGENERATOR_EXPORT void addGrid(SPtr<Object> gridShape); - GRIDGENERATOR_EXPORT void addGridRotatingGrid(SPtr<VerticalCylinder> cylinder); + GRIDGENERATOR_EXPORT void addGridRotatingGrid(SPtr<Cylinder> cylinder); GRIDGENERATOR_EXPORT void addGrid(SPtr<Object> gridShape, uint levelFine); GRIDGENERATOR_EXPORT void addGeometry(SPtr<Object> gridShape); @@ -85,7 +85,7 @@ public: protected: virtual SPtr<Grid> makeGrid(SPtr<Object> gridShape, uint level, uint levelFine); virtual SPtr<Grid> makeGrid(SPtr<Object> gridShape, real startX, real startY, real startZ, real endX, real endY, real endZ, real delta, uint level) const; - virtual SPtr<Grid> makeRotatingGrid(SPtr<VerticalCylinder> cylinder, uint level, uint levelFine); + virtual SPtr<Grid> makeRotatingGrid(SPtr<Cylinder> cylinder, uint level, uint levelFine); private: void addGridToList(SPtr<Grid> grid); diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp index 7632edec4..ae75a8514 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp @@ -1,5 +1,5 @@ #include "basics/tests/testUtilities.h" -#include "geometries/VerticalCylinder/VerticalCylinder.h" +#include "geometries/Cylinder/Cylinder.h" #include "grid/GridBuilder/MultipleGridBuilder.h" class MultipleGridBuilderForTest: public MultipleGridBuilder{ @@ -12,13 +12,13 @@ class MultipleGridBuilderTestFixture : public testing::Test { protected: MultipleGridBuilderForTest gridBuilder; - SPtr<VerticalCylinder> cylinder; + SPtr<Cylinder> cylinder; real delta = 0.1; public: void SetUp() override { - cylinder = std::make_shared<VerticalCylinder>(0.0, 0.0, 0.0, 2.0, 8.0); + cylinder = std::make_shared<Cylinder>(0.0, 0.0, 0.0, 2.0, 8.0, Cylinder::PrincipalAxis::x); gridBuilder.addCoarseGrid(-10. + 0.5 * delta, -10. + 0.5 * delta, -10. + 0.5 * delta, 10. - 0.5 * delta, 10. - 0.5 * delta, 10. - 0.5 * delta, delta); } @@ -161,7 +161,7 @@ TEST_F(MultipleGridBuilderTestFixture, addRotatingGrid_hasCorrectDelta) TEST(MultipleGridBuilderTest, noCoarseGrid_addGridWithPredefinedDelta_warns) { MultipleGridBuilder gridBuilder; - SPtr<VerticalCylinder> cylinder; + SPtr<Cylinder> cylinder; testingVF::captureStdOut(); gridBuilder.addGridRotatingGrid(cylinder); -- GitLab