Skip to content
Snippets Groups Projects
Commit ce67dbb4 authored by Anna Wellmann's avatar Anna Wellmann
Browse files

Add method for adding grid with same delta as previous grid

parent e256f7dd
No related branches found
No related tags found
1 merge request!307[GPU] Add a cylinder geometry
......@@ -95,7 +95,17 @@ void MultipleGridBuilder::addGrid(SPtr<Object> gridShape)
if (!coarseGridExists())
return emitNoCoarseGridExistsWarning();
const auto grid = makeGrid(gridShape, getNumberOfLevels(), 0);
const auto grid = makeGrid(std::move(gridShape), getNumberOfLevels(), 0);
addGridToListIfValid(grid);
}
void MultipleGridBuilder::addGridWithSameDeltaAsPreviousGrid(SPtr<Object> gridShape)
{
if (!coarseGridExists())
return emitNoCoarseGridExistsWarning();
const auto grid = makeGrid(std::move(gridShape), getNumberOfLevels(), 0, grids.back()->getDelta());
addGridToListIfValid(grid);
}
......@@ -195,17 +205,17 @@ bool MultipleGridBuilder::coarseGridExists() const
return !grids.empty();
}
SPtr<Grid> MultipleGridBuilder::makeGrid(SPtr<Object> gridShape, uint level, uint levelFine)
SPtr<Grid> MultipleGridBuilder::makeGrid(SPtr<Object> gridShape, uint level, uint levelFine, std::optional<real> deltaPredefined)
{
boundaryConditions.push_back(std::make_shared<BoundaryConditions>());
const real delta = calculateDelta(level);
const real delta = deltaPredefined ? deltaPredefined.value() : calculateDelta(level);
bool xOddStart = false, yOddStart = false, zOddStart = false;
auto staggeredCoordinates = getStaggeredCoordinates(gridShape, level, levelFine, xOddStart, yOddStart, zOddStart);
auto staggeredCoordinates = getStaggeredCoordinates(gridShape, level, levelFine, xOddStart, yOddStart, zOddStart);
SPtr<Grid> newGrid = this->makeGrid(gridShape, staggeredCoordinates[0],
SPtr<Grid> newGrid = this->makeGrid(gridShape, staggeredCoordinates[0],
staggeredCoordinates[1],
staggeredCoordinates[2],
staggeredCoordinates[3],
......
......@@ -33,6 +33,7 @@
#ifndef MULTIPLE_GRID_BUILDER_H
#define MULTIPLE_GRID_BUILDER_H
#include <optional>
#include <vector>
#include <array>
......@@ -52,6 +53,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 addGridWithSameDeltaAsPreviousGrid(SPtr<Object> gridShape);
GRIDGENERATOR_EXPORT void addGrid(SPtr<Object> gridShape, uint levelFine);
GRIDGENERATOR_EXPORT void addGeometry(SPtr<Object> gridShape);
......@@ -93,7 +95,7 @@ private:
std::array<real, 3> getOffset(real delta) const;
std::vector<uint> getSpacingFactors(uint levelDifference) const;
SPtr<Grid> makeGrid(SPtr<Object> gridShape, uint level, uint levelFine);
SPtr<Grid> makeGrid(SPtr<Object> gridShape, uint level, uint levelFine, std::optional<real> deltaPredefined = std::nullopt);
SPtr<Grid> makeGrid(SPtr<Object> gridShape, real startX, real startY, real startZ, real endX, real endY, real endZ, real delta, uint level) const;
static void emitNoCoarseGridExistsWarning();
......
......@@ -138,3 +138,24 @@ TEST_F(MultipleGridBuilderTestFixture, fineGridExists_addGridWithoutLevel_addsGr
EXPECT_THAT(gridBuilder.getGrids().size(), testing::Eq(3));
EXPECT_THAT(gridBuilder.getGrid(2)->getDelta(), testing::Eq(0.5 * 0.5 * delta));
}
TEST_F(MultipleGridBuilderTestFixture, addGridWithPredefinedDelta_hasCorrectDelta)
{
gridBuilder.addGridWithSameDeltaAsPreviousGrid(gridShape);
EXPECT_THAT(gridBuilder.getGrids().size(), testing::Eq(2));
EXPECT_THAT(gridBuilder.getGrid(1)->getDelta(), RealEq(gridBuilder.getGrid(0)->getDelta()));
gridBuilder.addGridWithSameDeltaAsPreviousGrid(gridShape);
EXPECT_THAT(gridBuilder.getGrids().size(), testing::Eq(3));
EXPECT_THAT(gridBuilder.getGrid(2)->getDelta(), RealEq(gridBuilder.getGrid(1)->getDelta()));
}
TEST(MultipleGridBuilderTest, noCoarseGrid_addGridWithPredefinedDelta_warns)
{
MultipleGridBuilder gridBuilder;
SPtr<Object> gridShape;
testingVF::captureStdOut();
gridBuilder.addGridWithSameDeltaAsPreviousGrid(gridShape);
EXPECT_TRUE(testingVF::stdoutContainsWarning());
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment