50ApplyNewton(
const Kokkos::View<coordinates_t **, ExecSpace> Xcoor,
51 const Kokkos::View<
coordinates_t[Dim], ExecSpace> targetPoint,
52 Kokkos::View<fp_t *, ExecSpace> weights,
53 const bool forceEvaluation =
false) {
58 Kokkos::Array<fp_t, 3> xietaphi_arr = {0.5, 0.5, 0.5};
59 Kokkos::View<fp_t *, ExecSpace> xietaphi(xietaphi_arr.data(), Dim);
62 Kokkos::Array<fp_t, Dim> f_arr;
63 Kokkos::View<fp_t *, ExecSpace> f(f_arr.data(), Dim);
66 Kokkos::Array<fp_t, FEspace::dimensionality * FEspace::numberOfShapeFunctions>
68 Kokkos::View<fp_t **, ExecSpace> dN(dN_arr.data(), FEspace::dimensionality,
69 FEspace::numberOfShapeFunctions);
71 Kokkos::Array<fp_t, FEspace::dimensionality * Dim> dNXcoor_arr;
72 Kokkos::View<fp_t **, ExecSpace> dNXcoor(dNXcoor_arr.data(),
73 FEspace::dimensionality, Dim);
75 Kokkos::Array<fp_t, FEspace::dimensionality> dfNum_arr;
76 Kokkos::View<fp_t *, ExecSpace> dfNum(dfNum_arr.data(),
77 FEspace::dimensionality);
79 Kokkos::Array<fp_t, FEspace::dimensionality * FEspace::dimensionality> h_arr;
80 Kokkos::View<fp_t **, ExecSpace> h(h_arr.data(), FEspace::dimensionality,
81 FEspace::dimensionality);
83 FEspace::UpdateShapeFunctionsValues(xietaphi_arr[0], xietaphi_arr[1],
84 xietaphi_arr[2], weights);
86 KokkosBlas::Experimental::serial_gemv(
'T',
fp_consts::one(), Xcoor, weights,
94 using namespace KokkosBatched;
98 FEspace::UpdateShapeFunctionsDerValues(xietaphi_arr[0], xietaphi_arr[1],
103 SerialGemm<Trans::NoTranspose, Trans::NoTranspose,
106 KokkosBlas::Experimental::serial_gemv(
'N',
fp_consts::one(), dNXcoor, f,
110 SerialGemm<Trans::NoTranspose, Trans::Transpose,
115 Kokkos::Array<fp_t, FEspace::dimensionality * FEspace::dimensionality>
117 Kokkos::View<fp_t **, ExecSpace> ddNi(
118 ddNi_arr.data(), FEspace::dimensionality, FEspace::dimensionality);
119 for (
int_t j = 0; j < Dim; j++) {
120 for (
int_t i = 0; i < FEspace::numberOfShapeFunctions; i++) {
122 k < FEspace::dimensionality * FEspace::dimensionality; k++) {
125 FEspace::UpdateShapeFunctionsDerDerValues(
126 i, xietaphi_arr[0], xietaphi_arr[1], xietaphi_arr[2], ddNi);
127 KokkosBlas::serial_axpy(Xcoor(i, j), ddNi, h);
132 SerialLU<Algo::LU::Unblocked>::invoke(h);
133 SerialTrsv<Uplo::Lower, Trans::NoTranspose, Diag::Unit,
135 SerialTrsv<Uplo::Upper, Trans::NoTranspose, Diag::NonUnit,
138 for (
int_t j = 0; j < FEspace::dimensionality; j++) {
139 xietaphi(j) -= dfNum(j);
142 FEspace::UpdateShapeFunctionsValues(xietaphi_arr[0], xietaphi_arr[1],
143 xietaphi_arr[2], weights);
144 KokkosBlas::Experimental::serial_gemv(
'T',
fp_consts::one(), Xcoor, weights,
154 for (
int_t j = 0; j < Dim; j++) {
155 norm2 += f(j) * f(j);
156 scale += targetPoint(j) * targetPoint(j);
158 error = norm2 / scale;
164 if (forceEvaluation) {
169 FEspace::isInside(xietaphi_arr[0], xietaphi_arr[1], xietaphi_arr[2])) {