245 log() <<
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth() early exit for no nodes were moved";
264 boundInterpCoo.InitPair(
"ElevatedNodesSolveInternalSmoothV1Old::boundInterpCoo",
mpi);
265 boundInterpVal.InitPair(
"ElevatedNodesSolveInternalSmoothV1Old::boundInterpVal",
mpi);
297 using kdtree_t = nanoflann::KDTreeSingleIndexAdaptor<
298 nanoflann::L2_Simple_Adaptor<real, PointCloudKDTreeCoordPair>,
302 using kdtree_tcoo = nanoflann::KDTreeSingleIndexAdaptor<
303 nanoflann::L2_Simple_Adaptor<real, PointCloudKDTree>,
314 boundInterpCoef.InitPair(
"ElevatedNodesSolveInternalSmoothV1Old::boundInterpCoef",
mpi);
315 boundInterpR.InitPair(
"ElevatedNodesSolveInternalSmoothV1Old::boundInterpR",
mpi);
328 std::cout <<
iN << std::endl;
357 Eigen::SparseLU<Eigen::SparseMatrix<real>, Eigen::COLAMDOrdering<int>>
LUSolver;
396#if NANOFLANN_VERSION < 0x150
397 std::vector<std::pair<DNDS::index, DNDS::real>>
IndicesDists;
399 std::vector<nanoflann::ResultItem<DNDS::index, DNDS::real>>
IndicesDists;
403#if NANOFLANN_VERSION < 0x150
404 nanoflann::SearchParams params{};
406 nanoflann::SearchParameters params{};
409 Eigen::Vector<real, Eigen::Dynamic>
outDists;
481 log() <<
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth() early exit for no nodes were moved";
500 boundInterpCoo.InitPair(
"ElevatedNodesSolveInternalSmoothV1::boundInterpCoo",
mpi);
501 boundInterpVal.InitPair(
"ElevatedNodesSolveInternalSmoothV1::boundInterpVal",
mpi);
534 using kdtree_t = nanoflann::KDTreeSingleIndexAdaptor<
535 nanoflann::L2_Simple_Adaptor<real, PointCloudKDTreeCoordPair>,
539 using kdtree_tcoo = nanoflann::KDTreeSingleIndexAdaptor<
540 nanoflann::L2_Simple_Adaptor<real, PointCloudKDTree>,
550 std::cout <<
"HEre-2" << std::endl;
553 boundInterpR.InitPair(
"ElevatedNodesSolveInternalSmoothV1::boundInterpR",
mpi);
557 std::vector<std::vector<std::pair<index, real>>>
MatC;
560 std::cout <<
"HEre-1" << std::endl;
700 std::cout <<
"HEre0" << std::endl;
712 std::cout <<
"HEre1" << std::endl;
736 Eigen::SparseLU<Eigen::SparseMatrix<real>, Eigen::COLAMDOrdering<int>>
LUSolver;
742 std::cout <<
"HEre2" << std::endl;
748 v.InitPair(
"ElevatedNodesSolveInternalSmoothV1::v",
mpi);
752 v.trans.createMPITypes();
753 v.trans.initPersistentPull();
755 std::cout <<
"HEre3" << std::endl;
763 x.trans.startPersistentPull();
764 x.trans.waitPersistentPull();
773 Ax.trans.startPersistentPull();
774 Ax.trans.waitPersistentPull();
778 x.trans.startPersistentPull();
779 x.trans.waitPersistentPull();
780 Eigen::Matrix<real, Eigen::Dynamic, 3>
xVal;
784 Eigen::Matrix<real, Eigen::Dynamic, 3>
xValPrec;
790 MLX.trans.startPersistentPull();
791 MLX.trans.waitPersistentPull();
803 log() << fmt::format(
"iRestart {}, res {}, resB {}",
iRestart,
res,
resB) << std::endl;
845#if NANOFLANN_VERSION < 0x150
846 std::vector<std::pair<DNDS::index, DNDS::real>>
IndicesDists;
848 std::vector<nanoflann::ResultItem<DNDS::index, DNDS::real>>
IndicesDists;
852#if NANOFLANN_VERSION < 0x150
853 nanoflann::SearchParams params{};
855 nanoflann::SearchParameters params{};
858 Eigen::Vector<real, Eigen::Dynamic>
outDists;
930 log() <<
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth() early exit for no nodes were moved";
945 boundInterpCoo.InitPair(
"ElevatedNodesSolveInternalSmoothV2::boundInterpCoo",
mpi);
946 boundInterpVal.InitPair(
"ElevatedNodesSolveInternalSmoothV2::boundInterpVal",
mpi);
976 std::vector<std::unordered_set<index>>
node2nodeV;
995 using kdtree_t = nanoflann::KDTreeSingleIndexAdaptor<
996 nanoflann::L2_Simple_Adaptor<real, PointCloudKDTreeCoordPair>,
1009 dispO2.InitPair(
"ElevatedNodesSolveInternalSmoothV2::dispO2",
mpi);
1013 dispO2.trans.createMPITypes();
1014 dispO2.trans.initPersistentPull();
1026 Eigen::Matrix<real, 3, 3> m;
1028 std::vector<std::vector<MatElem>>
A;
1039 for (
auto &
ME :
A[
iN])
1040 ME.m.setConstant(0);
1048 dispO2.trans.startPersistentPull();
1049 dispO2.trans.waitPersistentPull();
1085 JDet =
J(EigenAll, 0).cross(
J(EigenAll, 1)).stableNorm();
1087 JDet =
J.determinant();
1090 JInv({0, 1}, {0, 1}) =
J({0, 1}, {0, 1}).
inverse().eval();
1092 JInv =
J.inverse().eval();
1106 Eigen::Matrix<real, 6, 6>
DStruct;
1112 DStruct({0, 1, 2}, {0, 1, 2}) +=
muu * tJacobi::Identity();
1113 DStruct({0, 1, 2}, {0, 1, 2}).array() +=
lam;
1119 vInc(EigenAll, EigenLast).setZero();
1156 for (
auto &
ME :
A[
iN])
1187 for (
auto &
ME :
A[
iN])
1189 nDiag =
ME.m.array().abs().maxCoeff();
1194 for (
auto &
ME :
A[
iN])
1196 ME.m = tJacobi::Identity() *
nDiag;
1204 for (
auto &
ME :
A[
iN])
1206 nDiag =
ME.m.array().abs().maxCoeff();
1211 for (
auto &
ME :
A[
iN])
1213 ME.m = tJacobi::Identity() *
nDiag;
1220 for (
auto &
ME :
A[
iN])
1222 nDiag =
ME.m.array().abs().maxCoeff();
1223 for (
auto &
ME :
A[
iN])
1288 JDet =
J(EigenAll, 0).cross(
J(EigenAll, 1)).stableNorm();
1290 JDet =
J.determinant();
1292 JInv({0, 1}, {0, 1}) =
J({0, 1}, {0, 1}).
inverse().eval();
1294 JInv =
J.inverse().eval();
1295 return std::make_tuple(
J,
JInv, JDet);
1314 Eigen::Matrix<real, 6, 6>
DStruct;
1321 DStruct({0, 1, 2}, {0, 1, 2}) +=
muu * tJacobi::Identity();
1322 DStruct({0, 1, 2}, {0, 1, 2}).array() +=
lam;
1330 vInc(EigenAll, EigenLast).setZero();
1353 for (
auto &
ME :
A[
iN])
1384 for (
auto &
ME :
A[
iN])
1386 nDiag =
ME.m.array().abs().maxCoeff();
1391 for (
auto &
ME :
A[
iN])
1393 ME.m = tJacobi::Identity() *
nDiag;
1401 for (
auto &
ME :
A[
iN])
1403 nDiag =
ME.m.array().abs().maxCoeff();
1408 for (
auto &
ME :
A[
iN])
1410 ME.m = tJacobi::Identity() *
nDiag;
1417 for (
auto &
ME :
A[
iN])
1419 nDiag =
ME.m.array().abs().maxCoeff();
1420 for (
auto &
ME :
A[
iN])
1437 for (
auto &
ME :
A[
iN])
1448 for (
auto &
ME :
A[
iN])
1450 nDiag =
ME.m.array().abs().maxCoeff();
1455 for (
auto &
ME :
A[
iN])
1457 ME.m = tJacobi::Identity() *
nDiag;
1465 for (
auto &
ME :
A[
iN])
1467 nDiag =
ME.m.array().abs().maxCoeff();
1472 for (
auto &
ME :
A[
iN])
1474 ME.m = tJacobi::Identity() *
nDiag;
1481 for (
auto &
ME :
A[
iN])
1483 nDiag =
ME.m.array().abs().maxCoeff();
1484 for (
auto &
ME :
A[
iN])
1490 bO2.trans.startPersistentPull();
1491 bO2.trans.waitPersistentPull();
1500 log() << fmt::format(
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth(): Matrix Assembled, nFix {}, nFixB {} ",
1556 JDet =
J(EigenAll, 0).cross(
J(EigenAll, 1))(2);
1558 JDet =
J.determinant();
1560 JInv({0, 1}, {0, 1}) =
J({0, 1}, {0, 1}).
inverse().eval();
1562 JInv =
J.inverse().eval();
1563 return std::make_tuple(
J,
JInv, JDet);
1576 for (
int i = 0; i < 20; i++)
1587 duCurLim.trans.startPersistentPull();
1588 duCurLim.trans.waitPersistentPull();
1597 log() << fmt::format(
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth(): Disp Limited, nLim {}, minLim {:.3e} ",
1609 for (
auto &
ME :
A[
iN])
1612 Ax.trans.startPersistentPull();
1613 Ax.trans.waitPersistentPull();
1618 using value_type =
index;
1619 std::vector<std::vector<MatElem>> &
A;
1622 return A[i / 3].size() * 3;
1626 Eigen::SparseMatrix<real>
ADiag(
dispO2.father->Size() * 3,
dispO2.father->Size() * 3);
1631 for (
auto &
ME :
A[
iN])
1640 log() <<
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth(): Eigen Matrix Filled" << std::endl;
1643 Eigen::SparseLU<Eigen::SparseMatrix<real>, Eigen::COLAMDOrdering<int>>
LUSolver;
1644 if (
dispO2.father->Size())
1652 log() <<
"UnstructuredMesh === ElevatedNodesSolveInternalSmooth(): LU Factorized" << std::endl;
1657 Eigen::Vector<real, Eigen::Dynamic>
v;
1658 v.resize(
x.father->Size() * 3);
1661 v[
iN * 3 + 0] =
x[
iN](0);
1662 v[
iN * 3 + 1] =
x[
iN](1);
1663 v[
iN * 3 + 2] =
x[
iN](2);
1665 Eigen::Vector<real, Eigen::Dynamic>
sol;
1666 if (
dispO2.father->Size())
1676 ADIx.trans.startPersistentPull();
1677 ADIx.trans.waitPersistentPull();
1685 ADIx.trans.startPersistentPull();
1686 ADIx.trans.waitPersistentPull();
1721 log() << fmt::format(
"iRestart [{}] res [{:3e}] -> [{:3e}]",
iRestart,
resB,
res) << std::endl;