diff --git a/libs/MeshKernel/src/Splines.cpp b/libs/MeshKernel/src/Splines.cpp index 3dd6c531a..85e843af8 100644 --- a/libs/MeshKernel/src/Splines.cpp +++ b/libs/MeshKernel/src/Splines.cpp @@ -414,19 +414,19 @@ std::vector Splines::SecondOrderDerivative(const std::vector< std::vector 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(coordinatesDerivative.size()) - 2; i >= 0; --i) { coordinatesDerivative[i] = coordinatesDerivative[i] * coordinatesDerivative[i + 1] + u[i]; } @@ -441,19 +441,18 @@ std::vector Splines::SecondOrderDerivative(const std::vector& co std::vector 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(coordinatesDerivatives.size()) - 2; i >= 0; --i) { coordinatesDerivatives[i] = coordinatesDerivatives[i] * coordinatesDerivatives[i + 1] + u[i]; } diff --git a/libs/MeshKernel/tests/src/CurvilinearGridOrthogonalizationTests.cpp b/libs/MeshKernel/tests/src/CurvilinearGridOrthogonalizationTests.cpp index b06ead2e0..2dfc90718 100644 --- a/libs/MeshKernel/tests/src/CurvilinearGridOrthogonalizationTests.cpp +++ b/libs/MeshKernel/tests/src/CurvilinearGridOrthogonalizationTests.cpp @@ -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)