Skip to content

Commit

Permalink
Merge pull request #204 from Deltares/feature/GRIDEDIT-608_spline_ind…
Browse files Browse the repository at this point in the history
…ex_bug

Feature/gridedit 608 spline index bug
  • Loading branch information
ScottWillcox authored Jul 24, 2023
2 parents d0b37a4 + f75bcf2 commit ced77a0
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 67 deletions.
15 changes: 7 additions & 8 deletions libs/MeshKernel/src/Splines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,19 +414,19 @@ std::vector<meshkernel::Point> Splines::SecondOrderDerivative(const std::vector<
std::vector<Point> coordinatesDerivative(numNodes, {0.0, 0.0});

UInt index = 1;
for (auto i = startIndex + 1; i < numNodes - 1; i++)
for (auto i = startIndex + 1; i < endIndex; i++)
{
const Point p = coordinatesDerivative[index - 1] * 0.5 + 2.0;
coordinatesDerivative[index].x = -0.5 / p.x;
coordinatesDerivative[index].y = -0.5 / p.y;

const Point delta = spline[i + 1] - spline[i] - (spline[i] - spline[i - 1]);
u[index] = (delta * 6.0 / 2.0 - u[i - 1] * 0.5) / p;
u[index] = (delta * 6.0 / 2.0 - u[index - 1] * 0.5) / p;
index++;
}
// TODO: C++ 20 for(auto& i : views::reverse(vec))

coordinatesDerivative.back() = {0.0, 0.0};
for (auto i = numNodes - 2; i < numNodes; --i)
for (int i = static_cast<int>(coordinatesDerivative.size()) - 2; i >= 0; --i)
{
coordinatesDerivative[i] = coordinatesDerivative[i] * coordinatesDerivative[i + 1] + u[i];
}
Expand All @@ -441,19 +441,18 @@ std::vector<double> Splines::SecondOrderDerivative(const std::vector<double>& co
std::vector<double> coordinatesDerivatives(numNodes, 0.0);

UInt index = 1;
for (auto i = startIndex + 1; i < numNodes - 1; i++)
for (auto i = startIndex + 1; i < endIndex; i++)
{
const double p = coordinatesDerivatives[index - 1] * 0.5 + 2.0;
coordinatesDerivatives[index] = -0.5 / p;

const double delta = coordinates[i + 1] - coordinates[i] - (coordinates[i] - coordinates[i - 1]);
u[index] = (delta * 6.0 / 2.0 - u[i - 1] * 0.5) / p;
u[index] = (delta * 6.0 / 2.0 - u[index - 1] * 0.5) / p;
index++;
}

// TODO: C++ 20 for(auto& i : views::reverse(vec))
coordinatesDerivatives.back() = 0.0;
for (auto i = numNodes - 2; i < numNodes; --i)
for (int i = static_cast<int>(coordinatesDerivatives.size()) - 2; i >= 0; --i)
{
coordinatesDerivatives[i] = coordinatesDerivatives[i] * coordinatesDerivatives[i + 1] + u[i];
}
Expand Down
118 changes: 59 additions & 59 deletions libs/MeshKernel/tests/src/CurvilinearGridOrthogonalizationTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,65 +183,65 @@ TEST(CurvilinearGridOrthogonalization, Compute_OnONonOrthogonalCurvilinearGridWi
// Assert
constexpr double tolerance = 1e-6;

ASSERT_NEAR(79983.796374595549, orthogonalizedCurvilinearGrid.m_gridNodes[0][0].x, tolerance);
ASSERT_NEAR(80069.224559424794, orthogonalizedCurvilinearGrid.m_gridNodes[0][1].x, tolerance);
ASSERT_NEAR(80152.818443899014, orthogonalizedCurvilinearGrid.m_gridNodes[0][2].x, tolerance);
ASSERT_NEAR(80235.610419184784, orthogonalizedCurvilinearGrid.m_gridNodes[0][3].x, tolerance);
ASSERT_NEAR(80317.467404251467, orthogonalizedCurvilinearGrid.m_gridNodes[0][4].x, tolerance);
ASSERT_NEAR(80395.149908970227, orthogonalizedCurvilinearGrid.m_gridNodes[0][5].x, tolerance);
ASSERT_NEAR(80470.021886679329, orthogonalizedCurvilinearGrid.m_gridNodes[0][6].x, tolerance);
ASSERT_NEAR(80542.049673235932, orthogonalizedCurvilinearGrid.m_gridNodes[0][7].x, tolerance);
ASSERT_NEAR(80611.260660513333, orthogonalizedCurvilinearGrid.m_gridNodes[0][8].x, tolerance);

ASSERT_NEAR(80055.199856352847, orthogonalizedCurvilinearGrid.m_gridNodes[1][0].x, tolerance);
ASSERT_NEAR(80143.721270425682, orthogonalizedCurvilinearGrid.m_gridNodes[1][1].x, tolerance);
ASSERT_NEAR(80234.545805664267, orthogonalizedCurvilinearGrid.m_gridNodes[1][2].x, tolerance);
ASSERT_NEAR(80326.294071799057, orthogonalizedCurvilinearGrid.m_gridNodes[1][3].x, tolerance);
ASSERT_NEAR(80418.809908811469, orthogonalizedCurvilinearGrid.m_gridNodes[1][4].x, tolerance);
ASSERT_NEAR(80510.300359235334, orthogonalizedCurvilinearGrid.m_gridNodes[1][5].x, tolerance);
ASSERT_NEAR(80597.036737342059, orthogonalizedCurvilinearGrid.m_gridNodes[1][6].x, tolerance);
ASSERT_NEAR(80680.228644184652, orthogonalizedCurvilinearGrid.m_gridNodes[1][7].x, tolerance);
ASSERT_NEAR(80759.822363775238, orthogonalizedCurvilinearGrid.m_gridNodes[1][8].x, tolerance);

ASSERT_NEAR(80104.514488846587, orthogonalizedCurvilinearGrid.m_gridNodes[2][0].x, tolerance);
ASSERT_NEAR(80197.383457403659, orthogonalizedCurvilinearGrid.m_gridNodes[2][1].x, tolerance);
ASSERT_NEAR(80292.449108019704, orthogonalizedCurvilinearGrid.m_gridNodes[2][2].x, tolerance);
ASSERT_NEAR(80387.175475807715, orthogonalizedCurvilinearGrid.m_gridNodes[2][3].x, tolerance);
ASSERT_NEAR(80480.608251576487, orthogonalizedCurvilinearGrid.m_gridNodes[2][4].x, tolerance);
ASSERT_NEAR(80583.120607369667, orthogonalizedCurvilinearGrid.m_gridNodes[2][5].x, tolerance);
ASSERT_NEAR(80682.512842750177, orthogonalizedCurvilinearGrid.m_gridNodes[2][6].x, tolerance);
ASSERT_NEAR(80780.894793453088, orthogonalizedCurvilinearGrid.m_gridNodes[2][7].x, tolerance);
ASSERT_NEAR(80877.580909293247, orthogonalizedCurvilinearGrid.m_gridNodes[2][8].x, tolerance);

ASSERT_NEAR(366936.89538054139, orthogonalizedCurvilinearGrid.m_gridNodes[0][0].y, tolerance);
ASSERT_NEAR(366994.04530248570, orthogonalizedCurvilinearGrid.m_gridNodes[0][1].y, tolerance);
ASSERT_NEAR(367052.21844658040, orthogonalizedCurvilinearGrid.m_gridNodes[0][2].y, tolerance);
ASSERT_NEAR(367111.62516794214, orthogonalizedCurvilinearGrid.m_gridNodes[0][3].y, tolerance);
ASSERT_NEAR(367172.50539615576, orthogonalizedCurvilinearGrid.m_gridNodes[0][4].y, tolerance);
ASSERT_NEAR(367234.88964184484, orthogonalizedCurvilinearGrid.m_gridNodes[0][5].y, tolerance);
ASSERT_NEAR(367294.58040378935, orthogonalizedCurvilinearGrid.m_gridNodes[0][6].y, tolerance);
ASSERT_NEAR(367352.12121038162, orthogonalizedCurvilinearGrid.m_gridNodes[0][7].y, tolerance);
ASSERT_NEAR(367407.38541954994, orthogonalizedCurvilinearGrid.m_gridNodes[0][8].y, tolerance);

ASSERT_NEAR(366824.95581170503, orthogonalizedCurvilinearGrid.m_gridNodes[1][0].y, tolerance);
ASSERT_NEAR(366871.97101464303, orthogonalizedCurvilinearGrid.m_gridNodes[1][1].y, tolerance);
ASSERT_NEAR(366918.90347823157, orthogonalizedCurvilinearGrid.m_gridNodes[1][2].y, tolerance);
ASSERT_NEAR(366966.74293227377, orthogonalizedCurvilinearGrid.m_gridNodes[1][3].y, tolerance);
ASSERT_NEAR(367014.95766231039, orthogonalizedCurvilinearGrid.m_gridNodes[1][4].y, tolerance);
ASSERT_NEAR(367062.00799990579, orthogonalizedCurvilinearGrid.m_gridNodes[1][5].y, tolerance);
ASSERT_NEAR(367109.50803491072, orthogonalizedCurvilinearGrid.m_gridNodes[1][6].y, tolerance);
ASSERT_NEAR(367157.80634231429, orthogonalizedCurvilinearGrid.m_gridNodes[1][7].y, tolerance);
ASSERT_NEAR(367207.16259613103, orthogonalizedCurvilinearGrid.m_gridNodes[1][8].y, tolerance);

ASSERT_NEAR(366718.00768776325, orthogonalizedCurvilinearGrid.m_gridNodes[2][0].y, tolerance);
ASSERT_NEAR(366755.34796923219, orthogonalizedCurvilinearGrid.m_gridNodes[2][1].y, tolerance);
ASSERT_NEAR(366792.50812354451, orthogonalizedCurvilinearGrid.m_gridNodes[2][2].y, tolerance);
ASSERT_NEAR(366832.52615748829, orthogonalizedCurvilinearGrid.m_gridNodes[2][3].y, tolerance);
ASSERT_NEAR(366870.46128228144, orthogonalizedCurvilinearGrid.m_gridNodes[2][4].y, tolerance);
ASSERT_NEAR(366891.62363194284, orthogonalizedCurvilinearGrid.m_gridNodes[2][5].y, tolerance);
ASSERT_NEAR(366923.13989736629, orthogonalizedCurvilinearGrid.m_gridNodes[2][6].y, tolerance);
ASSERT_NEAR(366957.61315351113, orthogonalizedCurvilinearGrid.m_gridNodes[2][7].y, tolerance);
ASSERT_NEAR(366996.07892524434, orthogonalizedCurvilinearGrid.m_gridNodes[2][8].y, tolerance);
EXPECT_NEAR(79983.796374595549, orthogonalizedCurvilinearGrid.m_gridNodes[0][0].x, tolerance);
EXPECT_NEAR(80069.224277354806, orthogonalizedCurvilinearGrid.m_gridNodes[0][1].x, tolerance);
EXPECT_NEAR(80152.817263131525, orthogonalizedCurvilinearGrid.m_gridNodes[0][2].x, tolerance);
EXPECT_NEAR(80235.609244143387, orthogonalizedCurvilinearGrid.m_gridNodes[0][3].x, tolerance);
EXPECT_NEAR(80317.466702245743, orthogonalizedCurvilinearGrid.m_gridNodes[0][4].x, tolerance);
EXPECT_NEAR(80395.149908970227, orthogonalizedCurvilinearGrid.m_gridNodes[0][5].x, tolerance);
EXPECT_NEAR(80470.021886679329, orthogonalizedCurvilinearGrid.m_gridNodes[0][6].x, tolerance);
EXPECT_NEAR(80542.049673235932, orthogonalizedCurvilinearGrid.m_gridNodes[0][7].x, tolerance);
EXPECT_NEAR(80611.260660513333, orthogonalizedCurvilinearGrid.m_gridNodes[0][8].x, tolerance);

EXPECT_NEAR(80055.199856352847, orthogonalizedCurvilinearGrid.m_gridNodes[1][0].x, tolerance);
EXPECT_NEAR(80143.721071059583, orthogonalizedCurvilinearGrid.m_gridNodes[1][1].x, tolerance);
EXPECT_NEAR(80234.545379411153, orthogonalizedCurvilinearGrid.m_gridNodes[1][2].x, tolerance);
EXPECT_NEAR(80326.293574499403, orthogonalizedCurvilinearGrid.m_gridNodes[1][3].x, tolerance);
EXPECT_NEAR(80418.809428865279, orthogonalizedCurvilinearGrid.m_gridNodes[1][4].x, tolerance);
EXPECT_NEAR(80510.299874655640, orthogonalizedCurvilinearGrid.m_gridNodes[1][5].x, tolerance);
EXPECT_NEAR(80597.036324757821, orthogonalizedCurvilinearGrid.m_gridNodes[1][6].x, tolerance);
EXPECT_NEAR(80680.228401363493, orthogonalizedCurvilinearGrid.m_gridNodes[1][7].x, tolerance);
EXPECT_NEAR(80759.822363775238, orthogonalizedCurvilinearGrid.m_gridNodes[1][8].x, tolerance);

EXPECT_NEAR(80104.514488846587, orthogonalizedCurvilinearGrid.m_gridNodes[2][0].x, tolerance);
EXPECT_NEAR(80197.383420613070, orthogonalizedCurvilinearGrid.m_gridNodes[2][1].x, tolerance);
EXPECT_NEAR(80292.449108019704, orthogonalizedCurvilinearGrid.m_gridNodes[2][2].x, tolerance);
EXPECT_NEAR(80387.175475807715, orthogonalizedCurvilinearGrid.m_gridNodes[2][3].x, tolerance);
EXPECT_NEAR(80480.608251576487, orthogonalizedCurvilinearGrid.m_gridNodes[2][4].x, tolerance);
EXPECT_NEAR(80583.120607369667, orthogonalizedCurvilinearGrid.m_gridNodes[2][5].x, tolerance);
EXPECT_NEAR(80682.512780448465, orthogonalizedCurvilinearGrid.m_gridNodes[2][6].x, tolerance);
EXPECT_NEAR(80780.894620879248, orthogonalizedCurvilinearGrid.m_gridNodes[2][7].x, tolerance);
EXPECT_NEAR(80877.580909293247, orthogonalizedCurvilinearGrid.m_gridNodes[2][8].x, tolerance);

EXPECT_NEAR(366936.89538054139, orthogonalizedCurvilinearGrid.m_gridNodes[0][0].y, tolerance);
EXPECT_NEAR(366994.04511051433, orthogonalizedCurvilinearGrid.m_gridNodes[0][1].y, tolerance);
EXPECT_NEAR(367052.21760805714, orthogonalizedCurvilinearGrid.m_gridNodes[0][2].y, tolerance);
EXPECT_NEAR(367111.62432093697, orthogonalizedCurvilinearGrid.m_gridNodes[0][3].y, tolerance);
EXPECT_NEAR(367172.50484630122, orthogonalizedCurvilinearGrid.m_gridNodes[0][4].y, tolerance);
EXPECT_NEAR(367234.88964184484, orthogonalizedCurvilinearGrid.m_gridNodes[0][5].y, tolerance);
EXPECT_NEAR(367294.58040378935, orthogonalizedCurvilinearGrid.m_gridNodes[0][6].y, tolerance);
EXPECT_NEAR(367352.12121038162, orthogonalizedCurvilinearGrid.m_gridNodes[0][7].y, tolerance);
EXPECT_NEAR(367407.38541954994, orthogonalizedCurvilinearGrid.m_gridNodes[0][8].y, tolerance);

EXPECT_NEAR(366824.95581170503, orthogonalizedCurvilinearGrid.m_gridNodes[1][0].y, tolerance);
EXPECT_NEAR(366871.97091034410, orthogonalizedCurvilinearGrid.m_gridNodes[1][1].y, tolerance);
EXPECT_NEAR(366918.90326042997, orthogonalizedCurvilinearGrid.m_gridNodes[1][2].y, tolerance);
EXPECT_NEAR(366966.74273245712, orthogonalizedCurvilinearGrid.m_gridNodes[1][3].y, tolerance);
EXPECT_NEAR(367014.95754932362, orthogonalizedCurvilinearGrid.m_gridNodes[1][4].y, tolerance);
EXPECT_NEAR(367062.00790467981, orthogonalizedCurvilinearGrid.m_gridNodes[1][5].y, tolerance);
EXPECT_NEAR(367109.50790550862, orthogonalizedCurvilinearGrid.m_gridNodes[1][6].y, tolerance);
EXPECT_NEAR(367157.80620957806, orthogonalizedCurvilinearGrid.m_gridNodes[1][7].y, tolerance);
EXPECT_NEAR(367207.16259613103, orthogonalizedCurvilinearGrid.m_gridNodes[1][8].y, tolerance);

EXPECT_NEAR(366718.00768776325, orthogonalizedCurvilinearGrid.m_gridNodes[2][0].y, tolerance);
EXPECT_NEAR(366755.34794646013, orthogonalizedCurvilinearGrid.m_gridNodes[2][1].y, tolerance);
EXPECT_NEAR(366792.50812354451, orthogonalizedCurvilinearGrid.m_gridNodes[2][2].y, tolerance);
EXPECT_NEAR(366832.52615748829, orthogonalizedCurvilinearGrid.m_gridNodes[2][3].y, tolerance);
EXPECT_NEAR(366870.46128228144, orthogonalizedCurvilinearGrid.m_gridNodes[2][4].y, tolerance);
EXPECT_NEAR(366891.62363194284, orthogonalizedCurvilinearGrid.m_gridNodes[2][5].y, tolerance);
EXPECT_NEAR(366923.14004067366, orthogonalizedCurvilinearGrid.m_gridNodes[2][6].y, tolerance);
EXPECT_NEAR(366957.61329611664, orthogonalizedCurvilinearGrid.m_gridNodes[2][7].y, tolerance);
EXPECT_NEAR(366996.07892524434, orthogonalizedCurvilinearGrid.m_gridNodes[2][8].y, tolerance);
}

TEST(CurvilinearGridOrthogonalization, SetFrozenLine_OnONonOrthogonalGrid_WithCrossingFrozenLines_ShouldThrowAnStdException)
Expand Down

0 comments on commit ced77a0

Please sign in to comment.