#include "tug/Boundary.hpp" #include "tug/Core/Matrix.hpp" #include #include #include #define VELOCITIES_TEST(x) TEST(Velocities, x) VELOCITIES_TEST(SteadyStateCenter) { // Arrange constexpr std::size_t rows = 25; constexpr std::size_t cols = 25; constexpr std::size_t center_row = rows / 2; constexpr std::size_t center_col = cols / 2; constexpr double K = 1E-2; tug::RowMajMat hydHeads = tug::RowMajMat::Constant(rows, cols, 1); tug::RowMajMat permK = tug::RowMajMat::Constant(rows, cols, K); tug::Velocities velo(hydHeads); velo.setDomain(100, 100); velo.setPermKX(permK); velo.setPermKY(permK); tug::Boundary &bcH = velo.getBoundaryConditions(); bcH.setInnerBoundary(center_row, center_col, 10); velo.run(); const auto &velocitiesX = velo.getVelocitiesX(); const auto &velocitiesY = velo.getVelocitiesY(); // Assert // check velocities in x-direction for (std::size_t i_rows = 0; i_rows < rows; i_rows++) { for (std::size_t i_cols = 0; i_cols < cols + 1; i_cols++) { if (i_rows <= center_row && i_cols <= center_col) { EXPECT_LE(velocitiesX(i_rows, i_cols), 0); } else if (i_rows > center_row && i_cols > center_col) { EXPECT_GE(velocitiesX(i_rows, i_cols), 0); } else if (i_rows <= center_row && i_cols > center_col) { EXPECT_GE(velocitiesX(i_rows, i_cols), 0); } else if (i_rows > center_row && i_cols <= center_col) { EXPECT_LE(velocitiesX(i_rows, i_cols), 0); } else { FAIL() << "Uncovered case"; } } } // check velocities in y-direction for (std::size_t i_rows = 0; i_rows < rows + 1; i_rows++) { for (std::size_t i_cols = 0; i_cols < cols; i_cols++) { if (i_rows <= center_row && i_cols <= center_col) { EXPECT_LE(velocitiesY(i_rows, i_cols), 0); } else if (i_rows > center_row && i_cols > center_col) { EXPECT_GE(velocitiesY(i_rows, i_cols), 0); } else if (i_rows <= center_row && i_cols > center_col) { EXPECT_LE(velocitiesY(i_rows, i_cols), 0); } else if (i_rows > center_row && i_cols <= center_col) { EXPECT_GE(velocitiesY(i_rows, i_cols), 0); } else { FAIL() << "Uncovered case"; } } } }