99 dim>::evaluate_orthogonal_basis_function_by_degree(
const unsigned int i,
100 const unsigned int j,
101 const unsigned int k,
108 const double x = p[0];
109 const double y = p[1];
110 const double z = p[2];
112 const unsigned int max_ij =
std::max(i, j);
117 return Polynomials::jacobi_polynomial_value<double>(k, 2, 0, z,
true);
122 if (std::fabs(z - 1.0) < 1e-14)
125 const double ratio = 1.0 / (1.0 - z);
128 Polynomials::jacobi_polynomial_value<double>(i, 0, 0, x * ratio,
false) *
129 Polynomials::jacobi_polynomial_value<double>(j, 0, 0, y * ratio,
false) *
131 Polynomials::jacobi_polynomial_value<double>(k, 2 * max_ij + 2, 0, z,
true);
133 if (std::fabs(phi) < 1e-14)
169 const unsigned int j,
170 const unsigned int k,
179 const double x = p[0];
180 const double y = p[1];
181 const double z = p[2];
184 if (i == 0 && j == 0)
188 if constexpr (dim > 1)
190 if constexpr (dim > 2)
192 Polynomials::jacobi_polynomial_derivative<double>(k, 2, 0, z,
true);
196 else if (i == 0 && j == 1)
199 if constexpr (dim > 1)
201 Polynomials::jacobi_polynomial_value<double>(k, 4, 0, z,
true);
202 if constexpr (dim > 2)
205 Polynomials::jacobi_polynomial_derivative<double>(k, 4, 0, z,
true);
209 else if (i == 1 && j == 0)
211 grad[0] = Polynomials::jacobi_polynomial_value<double>(k, 4, 0, z,
true);
212 if constexpr (dim > 1)
214 if constexpr (dim > 2)
217 Polynomials::jacobi_polynomial_derivative<double>(k, 4, 0, z,
true);
221 else if (
std::abs(p[2] - 1.0) < 1e-14)
224 if (i == 1 && j == 1)
226 for (
unsigned int d = 0; d < dim; ++d)
228 Polynomials::jacobi_polynomial_value<double>(k, 4, 0, z,
true);
233 const unsigned int max_ij =
std::max(i, j);
234 const double ratio = 1.0 / (1.0 - z);
237 Polynomials::jacobi_polynomial_derivative<double>(
238 i, 0, 0, x * ratio,
false) *
240 Polynomials::jacobi_polynomial_value<double>(j, 0, 0, y * ratio,
false) *
242 Polynomials::jacobi_polynomial_value<double>(k, 2 * max_ij + 2, 0, z,
true);
243 if constexpr (dim > 1)
245 Polynomials::jacobi_polynomial_value<double>(i, 0, 0, x * ratio,
false) *
246 Polynomials::jacobi_polynomial_derivative<double>(
247 j, 0, 0, y * ratio,
false) *
248 ratio *
std::pow((1.0 - z), max_ij) *
249 Polynomials::jacobi_polynomial_value<double>(
250 k, 2 * max_ij + 2, 0, z,
true);
251 if constexpr (dim > 2)
253 Polynomials::jacobi_polynomial_derivative<double>(
254 i, 0, 0, x * ratio,
false) *
256 Polynomials::jacobi_polynomial_value<double>(
257 j, 0, 0, y * ratio,
false) *
259 Polynomials::jacobi_polynomial_value<double>(
260 k, 2 * max_ij + 2, 0, z,
true) +
261 Polynomials::jacobi_polynomial_value<double>(i, 0, 0, x * ratio,
false) *
262 Polynomials::jacobi_polynomial_derivative<double>(
263 j, 0, 0, y * ratio,
false) *
264 y * ratio * ratio *
std::pow((1.0 - z), max_ij) *
265 Polynomials::jacobi_polynomial_value<double>(
266 k, 2 * max_ij + 2, 0, z,
true) +
267 Polynomials::jacobi_polynomial_value<double>(i, 0, 0, x * ratio,
false) *
268 Polynomials::jacobi_polynomial_value<double>(
269 j, 0, 0, y * ratio,
false) *
270 (-1.0) * max_ij *
std::pow((1.0 - z), max_ij - 1) *
271 Polynomials::jacobi_polynomial_value<double>(
272 k, 2 * max_ij + 2, 0, z,
true) +
273 Polynomials::jacobi_polynomial_value<double>(i, 0, 0, x * ratio,
false) *
274 Polynomials::jacobi_polynomial_value<double>(
275 j, 0, 0, y * ratio,
false) *
277 Polynomials::jacobi_polynomial_derivative<double>(
278 k, 2 * max_ij + 2, 0, 2.0 * z - 1.0,
false) *
281 for (
unsigned int d = 0; d < dim; ++d)
282 if (std::fabs(grad[d]) < 1e-14)