22 #include "libmesh/fe.h"
23 #include "libmesh/elem.h"
24 #include "libmesh/fe_interface.h"
37 static const Elem * old_elem_ptr =
nullptr;
42 static Real d1d2n, d1d3n, d2d3n, d2d1n, d3d1n, d3d2n;
43 static Real d1xd1x, d1xd1y, d1xd2n, d1xd3n;
44 static Real d1yd1x, d1yd1y, d1yd2n, d1yd3n;
45 static Real d2xd2x, d2xd2y, d2xd3n, d2xd1n;
46 static Real d2yd2x, d2yd2y, d2yd3n, d2yd1n;
47 static Real d3xd3x, d3xd3y, d3xd1n, d3xd2n;
48 static Real d3yd3x, d3yd3y, d3yd1n, d3yd2n;
49 static Real d1nd1n, d2nd2n, d3nd3n;
52 static Real N01x, N01y, N10x, N10y;
53 static Real N02x, N02y, N20x, N20y;
54 static Real N21x, N21y, N12x, N12y;
56 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
58 Real clough_raw_shape_second_deriv(
const unsigned int basis_num,
59 const unsigned int deriv_type,
63 Real clough_raw_shape_deriv(
const unsigned int basis_num,
64 const unsigned int deriv_type,
66 Real clough_raw_shape(
const unsigned int basis_num,
68 unsigned char subtriangle_lookup(
const Point & p);
72 void clough_compute_coefs(
const Elem * elem)
81 if (elem->
id() == old_elem_id &&
87 const Order mapping_order (elem->default_order());
88 const ElemType mapping_elem_type (elem->type());
90 const FEType map_fe_type(mapping_order, mapping_family);
92 const int n_mapping_shape_functions =
96 std::vector<Point> dofpt;
97 dofpt.push_back(
Point(0,0));
98 dofpt.push_back(
Point(1,0));
99 dofpt.push_back(
Point(0,1));
100 dofpt.push_back(
Point(1/2.,1/2.));
101 dofpt.push_back(
Point(0,1/2.));
102 dofpt.push_back(
Point(1/2.,0));
105 std::vector<Real> dxdxi(6), dxdeta(6), dydxi(6), dydeta(6);
106 std::vector<Real> dxidx(6), detadx(6), dxidy(6), detady(6);
111 for (
int p = 0; p != 6; ++p)
114 for (
int i = 0; i != n_mapping_shape_functions; ++i)
116 const Real ddxi = shape_deriv_ptr
117 (elem, mapping_order, i, 0, dofpt[p],
false);
118 const Real ddeta = shape_deriv_ptr
119 (elem, mapping_order, i, 1, dofpt[p],
false);
124 dxdxi[p] += elem->point(i)(0) * ddxi;
125 dydxi[p] += elem->point(i)(1) * ddxi;
126 dxdeta[p] += elem->point(i)(0) * ddeta;
127 dydeta[p] += elem->point(i)(1) * ddeta;
140 const Real inv_jac = 1. / (dxdxi[p]*dydeta[p] -
142 dxidx[p] = dydeta[p] * inv_jac;
143 dxidy[p] = - dxdeta[p] * inv_jac;
144 detadx[p] = - dydxi[p] * inv_jac;
145 detady[p] = dxdxi[p] * inv_jac;
149 Real N1x = dydeta[3] - dydxi[3];
150 Real N1y = dxdxi[3] - dxdeta[3];
151 Real Nlength =
std::sqrt(static_cast<Real>(N1x*N1x + N1y*N1y));
152 N1x /= Nlength; N1y /= Nlength;
154 Real N2x = - dydeta[4];
155 Real N2y = dxdeta[4];
156 Nlength =
std::sqrt(static_cast<Real>(N2x*N2x + N2y*N2y));
157 N2x /= Nlength; N2y /= Nlength;
160 Real N3y = - dxdxi[5];
161 Nlength =
std::sqrt(static_cast<Real>(N3x*N3x + N3y*N3y));
162 N3x /= Nlength; N3y /= Nlength;
167 Nlength =
std::sqrt(static_cast<Real>(N01x*N01x + N01y*N01y));
168 N01x /= Nlength; N01y /= Nlength;
172 Nlength =
std::sqrt(static_cast<Real>(N10x*N10x + N10y*N10y));
173 N10x /= Nlength; N10y /= Nlength;
177 Nlength =
std::sqrt(static_cast<Real>(N02x*N02x + N02y*N02y));
178 N02x /= Nlength; N02y /= Nlength;
182 Nlength =
std::sqrt(static_cast<Real>(N20x*N20x + N20y*N20y));
183 N20x /= Nlength; N20y /= Nlength;
185 N12x = dydeta[1] - dydxi[1];
186 N12y = dxdxi[1] - dxdeta[1];
187 Nlength =
std::sqrt(static_cast<Real>(N12x*N12x + N12y*N12y));
188 N12x /= Nlength; N12y /= Nlength;
190 N21x = dydeta[1] - dydxi[1];
191 N21y = dxdxi[1] - dxdeta[1];
192 Nlength =
std::sqrt(static_cast<Real>(N21x*N21x + N21y*N21y));
193 N21x /= Nlength; N21y /= Nlength;
209 if (elem->point(2) < elem->point(1))
215 N1x = -N1x; N1y = -N1y;
216 N12x = -N12x; N12y = -N12y;
217 N21x = -N21x; N21y = -N21y;
226 if (elem->point(0) < elem->point(2))
233 N2x = -N2x; N2y = -N2y;
234 N02x = -N02x; N02y = -N02y;
235 N20x = -N20x; N20y = -N20y;
245 if (elem->point(1) < elem->point(0))
253 N01x = -N01x; N01y = -N01y;
254 N10x = -N10x; N10y = -N10y;
274 Real d1d2ndxi = clough_raw_shape_deriv(0, 0, dofpt[4]);
275 Real d1d2ndeta = clough_raw_shape_deriv(0, 1, dofpt[4]);
276 Real d1d2ndx = d1d2ndxi * dxidx[4] + d1d2ndeta * detadx[4];
277 Real d1d2ndy = d1d2ndxi * dxidy[4] + d1d2ndeta * detady[4];
278 Real d1d3ndxi = clough_raw_shape_deriv(0, 0, dofpt[5]);
279 Real d1d3ndeta = clough_raw_shape_deriv(0, 1, dofpt[5]);
280 Real d1d3ndx = d1d3ndxi * dxidx[5] + d1d3ndeta * detadx[5];
281 Real d1d3ndy = d1d3ndxi * dxidy[5] + d1d3ndeta * detady[5];
282 Real d2d3ndxi = clough_raw_shape_deriv(1, 0, dofpt[5]);
283 Real d2d3ndeta = clough_raw_shape_deriv(1, 1, dofpt[5]);
284 Real d2d3ndx = d2d3ndxi * dxidx[5] + d2d3ndeta * detadx[5];
285 Real d2d3ndy = d2d3ndxi * dxidy[5] + d2d3ndeta * detady[5];
286 Real d2d1ndxi = clough_raw_shape_deriv(1, 0, dofpt[3]);
287 Real d2d1ndeta = clough_raw_shape_deriv(1, 1, dofpt[3]);
288 Real d2d1ndx = d2d1ndxi * dxidx[3] + d2d1ndeta * detadx[3];
289 Real d2d1ndy = d2d1ndxi * dxidy[3] + d2d1ndeta * detady[3];
290 Real d3d1ndxi = clough_raw_shape_deriv(2, 0, dofpt[3]);
291 Real d3d1ndeta = clough_raw_shape_deriv(2, 1, dofpt[3]);
292 Real d3d1ndx = d3d1ndxi * dxidx[3] + d3d1ndeta * detadx[3];
293 Real d3d1ndy = d3d1ndxi * dxidy[3] + d3d1ndeta * detady[3];
294 Real d3d2ndxi = clough_raw_shape_deriv(2, 0, dofpt[4]);
295 Real d3d2ndeta = clough_raw_shape_deriv(2, 1, dofpt[4]);
296 Real d3d2ndx = d3d2ndxi * dxidx[4] + d3d2ndeta * detadx[4];
297 Real d3d2ndy = d3d2ndxi * dxidy[4] + d3d2ndeta * detady[4];
298 Real d1xd2ndxi = clough_raw_shape_deriv(3, 0, dofpt[4]);
299 Real d1xd2ndeta = clough_raw_shape_deriv(3, 1, dofpt[4]);
300 Real d1xd2ndx = d1xd2ndxi * dxidx[4] + d1xd2ndeta * detadx[4];
301 Real d1xd2ndy = d1xd2ndxi * dxidy[4] + d1xd2ndeta * detady[4];
302 Real d1xd3ndxi = clough_raw_shape_deriv(3, 0, dofpt[5]);
303 Real d1xd3ndeta = clough_raw_shape_deriv(3, 1, dofpt[5]);
304 Real d1xd3ndx = d1xd3ndxi * dxidx[5] + d1xd3ndeta * detadx[5];
305 Real d1xd3ndy = d1xd3ndxi * dxidy[5] + d1xd3ndeta * detady[5];
306 Real d1yd2ndxi = clough_raw_shape_deriv(4, 0, dofpt[4]);
307 Real d1yd2ndeta = clough_raw_shape_deriv(4, 1, dofpt[4]);
308 Real d1yd2ndx = d1yd2ndxi * dxidx[4] + d1yd2ndeta * detadx[4];
309 Real d1yd2ndy = d1yd2ndxi * dxidy[4] + d1yd2ndeta * detady[4];
310 Real d1yd3ndxi = clough_raw_shape_deriv(4, 0, dofpt[5]);
311 Real d1yd3ndeta = clough_raw_shape_deriv(4, 1, dofpt[5]);
312 Real d1yd3ndx = d1yd3ndxi * dxidx[5] + d1yd3ndeta * detadx[5];
313 Real d1yd3ndy = d1yd3ndxi * dxidy[5] + d1yd3ndeta * detady[5];
314 Real d2xd3ndxi = clough_raw_shape_deriv(5, 0, dofpt[5]);
315 Real d2xd3ndeta = clough_raw_shape_deriv(5, 1, dofpt[5]);
316 Real d2xd3ndx = d2xd3ndxi * dxidx[5] + d2xd3ndeta * detadx[5];
317 Real d2xd3ndy = d2xd3ndxi * dxidy[5] + d2xd3ndeta * detady[5];
318 Real d2xd1ndxi = clough_raw_shape_deriv(5, 0, dofpt[3]);
319 Real d2xd1ndeta = clough_raw_shape_deriv(5, 1, dofpt[3]);
320 Real d2xd1ndx = d2xd1ndxi * dxidx[3] + d2xd1ndeta * detadx[3];
321 Real d2xd1ndy = d2xd1ndxi * dxidy[3] + d2xd1ndeta * detady[3];
322 Real d2yd3ndxi = clough_raw_shape_deriv(6, 0, dofpt[5]);
323 Real d2yd3ndeta = clough_raw_shape_deriv(6, 1, dofpt[5]);
324 Real d2yd3ndx = d2yd3ndxi * dxidx[5] + d2yd3ndeta * detadx[5];
325 Real d2yd3ndy = d2yd3ndxi * dxidy[5] + d2yd3ndeta * detady[5];
326 Real d2yd1ndxi = clough_raw_shape_deriv(6, 0, dofpt[3]);
327 Real d2yd1ndeta = clough_raw_shape_deriv(6, 1, dofpt[3]);
328 Real d2yd1ndx = d2yd1ndxi * dxidx[3] + d2yd1ndeta * detadx[3];
329 Real d2yd1ndy = d2yd1ndxi * dxidy[3] + d2yd1ndeta * detady[3];
330 Real d3xd1ndxi = clough_raw_shape_deriv(7, 0, dofpt[3]);
331 Real d3xd1ndeta = clough_raw_shape_deriv(7, 1, dofpt[3]);
332 Real d3xd1ndx = d3xd1ndxi * dxidx[3] + d3xd1ndeta * detadx[3];
333 Real d3xd1ndy = d3xd1ndxi * dxidy[3] + d3xd1ndeta * detady[3];
334 Real d3xd2ndxi = clough_raw_shape_deriv(7, 0, dofpt[4]);
335 Real d3xd2ndeta = clough_raw_shape_deriv(7, 1, dofpt[4]);
336 Real d3xd2ndx = d3xd2ndxi * dxidx[4] + d3xd2ndeta * detadx[4];
337 Real d3xd2ndy = d3xd2ndxi * dxidy[4] + d3xd2ndeta * detady[4];
338 Real d3yd1ndxi = clough_raw_shape_deriv(8, 0, dofpt[3]);
339 Real d3yd1ndeta = clough_raw_shape_deriv(8, 1, dofpt[3]);
340 Real d3yd1ndx = d3yd1ndxi * dxidx[3] + d3yd1ndeta * detadx[3];
341 Real d3yd1ndy = d3yd1ndxi * dxidy[3] + d3yd1ndeta * detady[3];
342 Real d3yd2ndxi = clough_raw_shape_deriv(8, 0, dofpt[4]);
343 Real d3yd2ndeta = clough_raw_shape_deriv(8, 1, dofpt[4]);
344 Real d3yd2ndx = d3yd2ndxi * dxidx[4] + d3yd2ndeta * detadx[4];
345 Real d3yd2ndy = d3yd2ndxi * dxidy[4] + d3yd2ndeta * detady[4];
346 Real d1nd1ndxi = clough_raw_shape_deriv(9, 0, dofpt[3]);
347 Real d1nd1ndeta = clough_raw_shape_deriv(9, 1, dofpt[3]);
348 Real d1nd1ndx = d1nd1ndxi * dxidx[3] + d1nd1ndeta * detadx[3];
349 Real d1nd1ndy = d1nd1ndxi * dxidy[3] + d1nd1ndeta * detady[3];
350 Real d2nd2ndxi = clough_raw_shape_deriv(10, 0, dofpt[4]);
351 Real d2nd2ndeta = clough_raw_shape_deriv(10, 1, dofpt[4]);
352 Real d2nd2ndx = d2nd2ndxi * dxidx[4] + d2nd2ndeta * detadx[4];
353 Real d2nd2ndy = d2nd2ndxi * dxidy[4] + d2nd2ndeta * detady[4];
354 Real d3nd3ndxi = clough_raw_shape_deriv(11, 0, dofpt[5]);
355 Real d3nd3ndeta = clough_raw_shape_deriv(11, 1, dofpt[5]);
356 Real d3nd3ndx = d3nd3ndxi * dxidx[3] + d3nd3ndeta * detadx[3];
357 Real d3nd3ndy = d3nd3ndxi * dxidy[3] + d3nd3ndeta * detady[3];
359 Real d1xd1dxi = clough_raw_shape_deriv(3, 0, dofpt[0]);
360 Real d1xd1deta = clough_raw_shape_deriv(3, 1, dofpt[0]);
361 Real d1xd1dx = d1xd1dxi * dxidx[0] + d1xd1deta * detadx[0];
362 Real d1xd1dy = d1xd1dxi * dxidy[0] + d1xd1deta * detady[0];
363 Real d1yd1dxi = clough_raw_shape_deriv(4, 0, dofpt[0]);
364 Real d1yd1deta = clough_raw_shape_deriv(4, 1, dofpt[0]);
365 Real d1yd1dx = d1yd1dxi * dxidx[0] + d1yd1deta * detadx[0];
366 Real d1yd1dy = d1yd1dxi * dxidy[0] + d1yd1deta * detady[0];
367 Real d2xd2dxi = clough_raw_shape_deriv(5, 0, dofpt[1]);
368 Real d2xd2deta = clough_raw_shape_deriv(5, 1, dofpt[1]);
369 Real d2xd2dx = d2xd2dxi * dxidx[1] + d2xd2deta * detadx[1];
370 Real d2xd2dy = d2xd2dxi * dxidy[1] + d2xd2deta * detady[1];
390 Real d2yd2dxi = clough_raw_shape_deriv(6, 0, dofpt[1]);
391 Real d2yd2deta = clough_raw_shape_deriv(6, 1, dofpt[1]);
392 Real d2yd2dx = d2yd2dxi * dxidx[1] + d2yd2deta * detadx[1];
393 Real d2yd2dy = d2yd2dxi * dxidy[1] + d2yd2deta * detady[1];
394 Real d3xd3dxi = clough_raw_shape_deriv(7, 0, dofpt[2]);
395 Real d3xd3deta = clough_raw_shape_deriv(7, 1, dofpt[2]);
396 Real d3xd3dx = d3xd3dxi * dxidx[1] + d3xd3deta * detadx[1];
397 Real d3xd3dy = d3xd3dxi * dxidy[1] + d3xd3deta * detady[1];
398 Real d3yd3dxi = clough_raw_shape_deriv(8, 0, dofpt[2]);
399 Real d3yd3deta = clough_raw_shape_deriv(8, 1, dofpt[2]);
400 Real d3yd3dx = d3yd3dxi * dxidx[1] + d3yd3deta * detadx[1];
401 Real d3yd3dy = d3yd3dxi * dxidy[1] + d3yd3deta * detady[1];
405 Real d1nd1ndn = d1nd1ndx * N1x + d1nd1ndy * N1y;
406 Real d1xd2ndn = d1xd2ndx * N2x + d1xd2ndy * N2y;
407 Real d1xd3ndn = d1xd3ndx * N3x + d1xd3ndy * N3y;
408 Real d1yd2ndn = d1yd2ndx * N2x + d1yd2ndy * N2y;
409 Real d1yd3ndn = d1yd3ndx * N3x + d1yd3ndy * N3y;
411 Real d2nd2ndn = d2nd2ndx * N2x + d2nd2ndy * N2y;
412 Real d2xd3ndn = d2xd3ndx * N3x + d2xd3ndy * N3y;
413 Real d2xd1ndn = d2xd1ndx * N1x + d2xd1ndy * N1y;
414 Real d2yd3ndn = d2yd3ndx * N3x + d2yd3ndy * N3y;
415 Real d2yd1ndn = d2yd1ndx * N1x + d2yd1ndy * N1y;
417 Real d3nd3ndn = d3nd3ndx * N3x + d3nd3ndy * N3y;
418 Real d3xd1ndn = d3xd1ndx * N1x + d3xd1ndy * N1y;
419 Real d3xd2ndn = d3xd2ndx * N2x + d3xd2ndy * N2y;
420 Real d3yd1ndn = d3yd1ndx * N1x + d3yd1ndy * N1y;
421 Real d3yd2ndn = d3yd2ndx * N2x + d3yd2ndy * N2y;
425 d1nd1n = 1. / d1nd1ndn;
426 d2nd2n = 1. / d2nd2ndn;
427 d3nd3n = 1. / d3nd3ndn;
435 if (elem->id() == old_elem_id &&
436 elem == old_elem_ptr)
438 libmesh_assert_equal_to(d1d2n, -(d1d2ndx * N2x + d1d2ndy * N2y) / d2nd2ndn);
439 libmesh_assert_equal_to(d1d3n, -(d1d3ndx * N3x + d1d3ndy * N3y) / d3nd3ndn);
440 libmesh_assert_equal_to(d2d3n, -(d2d3ndx * N3x + d2d3ndy * N3y) / d3nd3ndn);
441 libmesh_assert_equal_to(d2d1n, -(d2d1ndx * N1x + d2d1ndy * N1y) / d1nd1ndn);
442 libmesh_assert_equal_to(d3d1n, -(d3d1ndx * N1x + d3d1ndy * N1y) / d1nd1ndn);
443 libmesh_assert_equal_to(d3d2n, -(d3d2ndx * N2x + d3d2ndy * N2y) / d2nd2ndn);
444 libmesh_assert_equal_to(d1xd1x, 1. / (d1xd1dx - d1xd1dy * d1yd1dx / d1yd1dy));
445 libmesh_assert_equal_to(d1xd1y, 1. / (d1yd1dx - d1xd1dx * d1yd1dy / d1xd1dy));
446 libmesh_assert_equal_to(d1yd1y, 1. / (d1yd1dy - d1yd1dx * d1xd1dy / d1xd1dx));
447 libmesh_assert_equal_to(d1yd1x, 1. / (d1xd1dy - d1yd1dy * d1xd1dx / d1yd1dx));
448 libmesh_assert_equal_to(d2xd2x, 1. / (d2xd2dx - d2xd2dy * d2yd2dx / d2yd2dy));
449 libmesh_assert_equal_to(d2xd2y, 1. / (d2yd2dx - d2xd2dx * d2yd2dy / d2xd2dy));
450 libmesh_assert_equal_to(d2yd2y, 1. / (d2yd2dy - d2yd2dx * d2xd2dy / d2xd2dx));
451 libmesh_assert_equal_to(d2yd2x, 1. / (d2xd2dy - d2yd2dy * d2xd2dx / d2yd2dx));
452 libmesh_assert_equal_to(d3xd3x, 1. / (d3xd3dx - d3xd3dy * d3yd3dx / d3yd3dy));
453 libmesh_assert_equal_to(d3xd3y, 1. / (d3yd3dx - d3xd3dx * d3yd3dy / d3xd3dy));
454 libmesh_assert_equal_to(d3yd3y, 1. / (d3yd3dy - d3yd3dx * d3xd3dy / d3xd3dx));
455 libmesh_assert_equal_to(d3yd3x, 1. / (d3xd3dy - d3yd3dy * d3xd3dx / d3yd3dx));
456 libmesh_assert_equal_to(d1xd2n, -(d1xd1x * d1xd2ndn + d1xd1y * d1yd2ndn) / d2nd2ndn);
457 libmesh_assert_equal_to(d1yd2n, -(d1yd1y * d1yd2ndn + d1yd1x * d1xd2ndn) / d2nd2ndn);
458 libmesh_assert_equal_to(d1xd3n, -(d1xd1x * d1xd3ndn + d1xd1y * d1yd3ndn) / d3nd3ndn);
459 libmesh_assert_equal_to(d1yd3n, -(d1yd1y * d1yd3ndn + d1yd1x * d1xd3ndn) / d3nd3ndn);
460 libmesh_assert_equal_to(d2xd3n, -(d2xd2x * d2xd3ndn + d2xd2y * d2yd3ndn) / d3nd3ndn);
461 libmesh_assert_equal_to(d2yd3n, -(d2yd2y * d2yd3ndn + d2yd2x * d2xd3ndn) / d3nd3ndn);
462 libmesh_assert_equal_to(d2xd1n, -(d2xd2x * d2xd1ndn + d2xd2y * d2yd1ndn) / d1nd1ndn);
463 libmesh_assert_equal_to(d2yd1n, -(d2yd2y * d2yd1ndn + d2yd2x * d2xd1ndn) / d1nd1ndn);
464 libmesh_assert_equal_to(d3xd1n, -(d3xd3x * d3xd1ndn + d3xd3y * d3yd1ndn) / d1nd1ndn);
465 libmesh_assert_equal_to(d3yd1n, -(d3yd3y * d3yd1ndn + d3yd3x * d3xd1ndn) / d1nd1ndn);
466 libmesh_assert_equal_to(d3xd2n, -(d3xd3x * d3xd2ndn + d3xd3y * d3yd2ndn) / d2nd2ndn);
467 libmesh_assert_equal_to(d3yd2n, -(d3yd3y * d3yd2ndn + d3yd3x * d3xd2ndn) / d2nd2ndn);
471 d1d2n = -(d1d2ndx * N2x + d1d2ndy * N2y) / d2nd2ndn;
472 d1d3n = -(d1d3ndx * N3x + d1d3ndy * N3y) / d3nd3ndn;
473 d2d3n = -(d2d3ndx * N3x + d2d3ndy * N3y) / d3nd3ndn;
474 d2d1n = -(d2d1ndx * N1x + d2d1ndy * N1y) / d1nd1ndn;
475 d3d1n = -(d3d1ndx * N1x + d3d1ndy * N1y) / d1nd1ndn;
476 d3d2n = -(d3d2ndx * N2x + d3d2ndy * N2y) / d2nd2ndn;
480 d1xd1x = 1. / (d1xd1dx - d1xd1dy * d1yd1dx / d1yd1dy);
481 d1xd1y = 1. / (d1yd1dx - d1xd1dx * d1yd1dy / d1xd1dy);
483 d1yd1y = 1. / (d1yd1dy - d1yd1dx * d1xd1dy / d1xd1dx);
484 d1yd1x = 1. / (d1xd1dy - d1yd1dy * d1xd1dx / d1yd1dx);
486 d2xd2x = 1. / (d2xd2dx - d2xd2dy * d2yd2dx / d2yd2dy);
487 d2xd2y = 1. / (d2yd2dx - d2xd2dx * d2yd2dy / d2xd2dy);
489 d2yd2y = 1. / (d2yd2dy - d2yd2dx * d2xd2dy / d2xd2dx);
490 d2yd2x = 1. / (d2xd2dy - d2yd2dy * d2xd2dx / d2yd2dx);
492 d3xd3x = 1. / (d3xd3dx - d3xd3dy * d3yd3dx / d3yd3dy);
493 d3xd3y = 1. / (d3yd3dx - d3xd3dx * d3yd3dy / d3xd3dy);
495 d3yd3y = 1. / (d3yd3dy - d3yd3dx * d3xd3dy / d3xd3dx);
496 d3yd3x = 1. / (d3xd3dy - d3yd3dy * d3xd3dx / d3yd3dx);
515 d1xd2n = -(d1xd1x * d1xd2ndn + d1xd1y * d1yd2ndn) / d2nd2ndn;
516 d1yd2n = -(d1yd1y * d1yd2ndn + d1yd1x * d1xd2ndn) / d2nd2ndn;
517 d1xd3n = -(d1xd1x * d1xd3ndn + d1xd1y * d1yd3ndn) / d3nd3ndn;
518 d1yd3n = -(d1yd1y * d1yd3ndn + d1yd1x * d1xd3ndn) / d3nd3ndn;
519 d2xd3n = -(d2xd2x * d2xd3ndn + d2xd2y * d2yd3ndn) / d3nd3ndn;
520 d2yd3n = -(d2yd2y * d2yd3ndn + d2yd2x * d2xd3ndn) / d3nd3ndn;
521 d2xd1n = -(d2xd2x * d2xd1ndn + d2xd2y * d2yd1ndn) / d1nd1ndn;
522 d2yd1n = -(d2yd2y * d2yd1ndn + d2yd2x * d2xd1ndn) / d1nd1ndn;
523 d3xd1n = -(d3xd3x * d3xd1ndn + d3xd3y * d3yd1ndn) / d1nd1ndn;
524 d3yd1n = -(d3yd3y * d3yd1ndn + d3yd3x * d3xd1ndn) / d1nd1ndn;
525 d3xd2n = -(d3xd3x * d3xd2ndn + d3xd3y * d3yd2ndn) / d2nd2ndn;
526 d3yd2n = -(d3yd3y * d3yd2ndn + d3yd3x * d3xd2ndn) / d2nd2ndn;
528 old_elem_id = elem->id();
576 unsigned char subtriangle_lookup(
const Point & p)
578 if ((p(0) >= p(1)) && (p(0) + 2 * p(1) <= 1))
580 if ((p(0) <= p(1)) && (p(1) + 2 * p(0) <= 1))
586 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
589 Real clough_raw_shape_second_deriv(
const unsigned int basis_num,
590 const unsigned int deriv_type,
593 Real xi = p(0), eta = p(1);
603 switch (subtriangle_lookup(p))
608 return -30 + 42*xi + 42*eta;
610 return -6 + 18*xi - 6*eta;
613 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
614 subtriangle_lookup(p));
617 switch (subtriangle_lookup(p))
622 return 18 - 27*xi - 21*eta;
624 return 6 - 15*xi + 3*eta;
627 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
628 subtriangle_lookup(p));
631 switch (subtriangle_lookup(p))
636 return 12 - 15*xi - 21*eta;
638 return -3*xi + 3*eta;
641 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
642 subtriangle_lookup(p));
645 switch (subtriangle_lookup(p))
650 return -9 + 13*xi + 8*eta;
652 return -1 - 7*xi + 4*eta;
655 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
656 subtriangle_lookup(p));
659 switch (subtriangle_lookup(p))
664 return 1 - 2*xi + 3*eta;
666 return -3 + 14*xi - eta;
669 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
670 subtriangle_lookup(p));
673 switch (subtriangle_lookup(p))
678 return -4 + 17./2.*xi + 7./2.*eta;
680 return -2 + 13./2.*xi - 1./2.*eta;
683 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
684 subtriangle_lookup(p));
687 switch (subtriangle_lookup(p))
692 return 9 - 23./2.*xi - 23./2.*eta;
694 return -1 + 5./2.*xi + 9./2.*eta;
697 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
698 subtriangle_lookup(p));
701 switch (subtriangle_lookup(p))
706 return 7 - 17./2.*xi - 25./2.*eta;
708 return 1 - 13./2.*xi + 7./2.*eta;
711 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
712 subtriangle_lookup(p));
715 switch (subtriangle_lookup(p))
720 return -2 + 5./2.*xi + 7./2.*eta;
722 return 1./2.*xi - 1./2.*eta;
725 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
726 subtriangle_lookup(p));
729 switch (subtriangle_lookup(p))
734 return std::sqrt(2.) * (8 - 10*xi - 14*eta);
739 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
740 subtriangle_lookup(p));
743 switch (subtriangle_lookup(p))
748 return -4 + 4*xi + 8*eta;
750 return -4 + 20*xi - 8*eta;
753 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
754 subtriangle_lookup(p));
757 switch (subtriangle_lookup(p))
762 return -12 + 16*xi + 12*eta;
764 return 4 - 16*xi - 4*eta;
767 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
768 subtriangle_lookup(p));
772 libmesh_error_msg(
"Invalid shape function index i = " <<
781 switch (subtriangle_lookup(p))
792 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
793 subtriangle_lookup(p));
796 switch (subtriangle_lookup(p))
801 return 15 - 21*xi - 21*eta;
806 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
807 subtriangle_lookup(p));
810 switch (subtriangle_lookup(p))
815 return 15 - 21*xi - 21*eta;
820 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
821 subtriangle_lookup(p));
824 switch (subtriangle_lookup(p))
829 return -4 + 8*xi + 3*eta;
831 return -3 + 4*xi + 4*eta;
834 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
835 subtriangle_lookup(p));
838 switch (subtriangle_lookup(p))
841 return -3 + 4*xi + 4*eta;
843 return - 4 + 3*xi + 8*eta;
848 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
849 subtriangle_lookup(p));
852 switch (subtriangle_lookup(p))
857 return -5./2. + 7./2.*xi + 7./2.*eta;
862 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
863 subtriangle_lookup(p));
866 switch (subtriangle_lookup(p))
869 return -1 + 4*xi + 7./2.*eta;
871 return 19./2. - 23./2.*xi - 25./2.*eta;
876 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
877 subtriangle_lookup(p));
880 switch (subtriangle_lookup(p))
885 return 19./2. - 25./2.*xi - 23./2.*eta;
887 return -1 + 7./2.*xi + 4*eta;
890 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
891 subtriangle_lookup(p));
894 switch (subtriangle_lookup(p))
899 return -5./2. + 7./2.*xi + 7./2.*eta;
904 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
905 subtriangle_lookup(p));
908 switch (subtriangle_lookup(p))
913 return std::sqrt(2.) * (10 - 14*xi - 14*eta);
918 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
919 subtriangle_lookup(p));
922 switch (subtriangle_lookup(p))
927 return - 8 + 8*xi + 12*eta;
929 return 4 - 8*xi - 8*eta;
932 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
933 subtriangle_lookup(p));
936 switch (subtriangle_lookup(p))
939 return 4 - 8*xi - 8*eta;
941 return -8 + 12*xi + 8*eta;
946 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
947 subtriangle_lookup(p));
951 libmesh_error_msg(
"Invalid shape function index i = " <<
960 switch (subtriangle_lookup(p))
963 return -6 - 6*xi + 18*eta;
965 return -30 + 42*xi + 42*eta;
970 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
971 subtriangle_lookup(p));
974 switch (subtriangle_lookup(p))
979 return 12 - 21*xi - 15*eta;
984 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
985 subtriangle_lookup(p));
988 switch (subtriangle_lookup(p))
991 return 6 + 3*xi - 15*eta;
993 return 18 - 21.*xi - 27*eta;
998 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
999 subtriangle_lookup(p));
1002 switch (subtriangle_lookup(p))
1005 return -3 - xi + 14*eta;
1007 return 1 + 3*xi - 2*eta;
1012 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1013 subtriangle_lookup(p));
1016 switch (subtriangle_lookup(p))
1019 return -1 + 4*xi - 7*eta;
1021 return -9 + 8*xi + 13*eta;
1026 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1027 subtriangle_lookup(p));
1030 switch (subtriangle_lookup(p))
1033 return - 1./2.*xi + 1./2.*eta;
1035 return -2 + 7./2.*xi + 5./2.*eta;
1040 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1041 subtriangle_lookup(p));
1044 switch (subtriangle_lookup(p))
1047 return 1 + 7./2.*xi - 13./2.*eta;
1049 return 7 - 25./2.*xi - 17./2.*eta;
1054 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1055 subtriangle_lookup(p));
1058 switch (subtriangle_lookup(p))
1061 return -1 + 9./2.*xi + 5./2.*eta;
1063 return 9 - 23./2.*xi - 23./2.*eta;
1068 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1069 subtriangle_lookup(p));
1072 switch (subtriangle_lookup(p))
1075 return -2 - 1./2.*xi + 13./2.*eta;
1077 return -4 + 7./2.*xi + 17./2.*eta;
1082 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1083 subtriangle_lookup(p));
1086 switch (subtriangle_lookup(p))
1091 return std::sqrt(2.) * (8 - 14*xi - 10*eta);
1096 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1097 subtriangle_lookup(p));
1100 switch (subtriangle_lookup(p))
1103 return 4 - 4*xi - 16*eta;
1105 return -12 + 12*xi + 16*eta;
1110 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1111 subtriangle_lookup(p));
1114 switch (subtriangle_lookup(p))
1117 return -4 - 8*xi + 20*eta;
1119 return -4 + 8*xi + 4*eta;
1124 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1125 subtriangle_lookup(p));
1129 libmesh_error_msg(
"Invalid shape function index i = " <<
1134 libmesh_error_msg(
"Invalid shape function derivative j = " <<
1143 Real clough_raw_shape_deriv(
const unsigned int basis_num,
1144 const unsigned int deriv_type,
1147 Real xi = p(0), eta = p(1);
1156 switch (subtriangle_lookup(p))
1159 return -6*xi + 6*xi*xi
1162 return 9 - 30*xi + 21*xi*xi
1163 - 30*eta + 42*xi*eta
1166 return -6*xi + 9*xi*xi
1170 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1171 subtriangle_lookup(p));
1174 switch (subtriangle_lookup(p))
1177 return 6*xi - 6*xi*xi
1180 return - 9./2. + 18*xi - 27./2.*xi*xi
1181 + 15*eta - 21*xi*eta
1184 return 6*xi - 15./2.*xi*xi
1188 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1189 subtriangle_lookup(p));
1192 switch (subtriangle_lookup(p))
1195 return 3./2.*eta*eta;
1197 return - 9./2. + 12*xi - 15./2.*xi*xi
1198 + 15*eta - 21*xi*eta
1205 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1206 subtriangle_lookup(p));
1209 switch (subtriangle_lookup(p))
1212 return 1 - 4*xi + 3*xi*xi
1215 return 5./2. - 9*xi + 13./2.*xi*xi
1219 return 1 - xi - 7./2.*xi*xi
1224 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1225 subtriangle_lookup(p));
1228 switch (subtriangle_lookup(p))
1231 return - 3*eta + 4*xi*eta
1238 return -3*xi + 7*xi*xi
1242 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1243 subtriangle_lookup(p));
1246 switch (subtriangle_lookup(p))
1249 return -2*xi + 3*xi*xi
1252 return 3./4. - 4*xi + 17./4.*xi*xi
1253 - 5./2.*eta + 7./2.*xi*eta
1256 return -2*xi + 13./4.*xi*xi
1260 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1261 subtriangle_lookup(p));
1264 switch (subtriangle_lookup(p))
1267 return -eta + 4*xi*eta
1270 return -13./4. + 9*xi - 23./4.*xi*xi
1271 + 19./2.*eta - 23./2.*xi*eta
1274 return -xi + 5./4.*xi*xi
1278 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1279 subtriangle_lookup(p));
1282 switch (subtriangle_lookup(p))
1285 return 9./4.*eta*eta;
1287 return - 11./4. + 7*xi - 17./4.*xi*xi
1288 + 19./2.*eta - 25./2.*xi*eta
1291 return xi - 13./4.*xi*xi
1292 - eta + 7./2.*xi*eta + 2*eta*eta;
1295 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1296 subtriangle_lookup(p));
1299 switch (subtriangle_lookup(p))
1302 return - 1./4.*eta*eta;
1304 return 3./4. - 2*xi + 5./4.*xi*xi
1305 - 5./2.*eta + 7./2.*xi*eta
1312 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1313 subtriangle_lookup(p));
1316 switch (subtriangle_lookup(p))
1321 return std::sqrt(2.) * (-3 + 8*xi - 5*xi*xi
1322 + 10*eta - 14*xi*eta
1325 return std::sqrt(2.) * (-xi*xi + 2*xi*eta);
1328 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1329 subtriangle_lookup(p));
1332 switch (subtriangle_lookup(p))
1337 return 2 - 4*xi + 2*xi*xi
1341 return -4*xi + 10*xi*xi
1346 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1347 subtriangle_lookup(p));
1350 switch (subtriangle_lookup(p))
1353 return 4*eta - 8*xi*eta
1356 return 4 - 12*xi + 8*xi*xi
1360 return 4*xi - 8*xi*xi
1364 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1365 subtriangle_lookup(p));
1369 libmesh_error_msg(
"Invalid shape function index i = " <<
1378 switch (subtriangle_lookup(p))
1381 return - 6*eta - 6*xi*eta + 9*eta*eta;
1383 return 9 - 30*xi + 21*xi*xi
1384 - 30*eta + 42*xi*eta + 21*eta*eta;
1387 - 6*eta + 6*eta*eta;
1390 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1391 subtriangle_lookup(p));
1394 switch (subtriangle_lookup(p))
1400 return - 9./2. + 15*xi - 21./2.*xi*xi
1401 + 12*eta - 21*xi*eta - 15./2.*eta*eta;
1403 return + 3./2.*xi*xi;
1406 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1407 subtriangle_lookup(p));
1410 switch (subtriangle_lookup(p))
1413 return 6*eta + 3*xi*eta - 15./2.*eta*eta;
1415 return - 9./2. + 15*xi - 21./2.*xi*xi
1416 + 18*eta - 21.*xi*eta - 27./2.*eta*eta;
1419 + 6*eta - 6*eta*eta;
1422 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1423 subtriangle_lookup(p));
1426 switch (subtriangle_lookup(p))
1429 return - 3*eta - xi*eta + 7*eta*eta;
1431 return - 4*xi + 4*xi*xi
1432 + eta + 3*xi*eta - eta*eta;
1434 return - 3*xi + 2*xi*xi
1438 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1439 subtriangle_lookup(p));
1442 switch (subtriangle_lookup(p))
1445 return 1 - 3*xi + 2*xi*xi
1446 - eta + 4*xi*eta - 7./2.*eta*eta;
1448 return 5./2. - 4*xi + 3./2.*xi*xi
1449 - 9.*eta + 8*xi*eta + 13./2.*eta*eta;
1451 return 1 - 1./2.*xi*xi - 4*eta + 3*eta*eta;
1454 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1455 subtriangle_lookup(p));
1458 switch (subtriangle_lookup(p))
1461 return - 1./2.*xi*eta + 1./4.*eta*eta;
1463 return 3./4. - 5./2.*xi + 7./4.*xi*xi
1464 - 2*eta + 7./2.*xi*eta + 5./4.*eta*eta;
1466 return - 1./4.*xi*xi;
1469 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1470 subtriangle_lookup(p));
1473 switch (subtriangle_lookup(p))
1476 return -xi + 2*xi*xi
1477 + eta + 7./2.*xi*eta - 13./4.*eta*eta;
1479 return - 11./4. + 19./2.*xi - 23./4.*xi*xi
1480 + 7*eta - 25./2.*xi*eta - 17./4.*eta*eta;
1485 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1486 subtriangle_lookup(p));
1489 switch (subtriangle_lookup(p))
1492 return -eta + 9./2.*xi*eta + 5./4.*eta*eta;
1494 return - 13./4. + 19./2.*xi - 25./4.*xi*xi
1495 + 9*eta - 23./2.*xi*eta - 23./4.*eta*eta;
1497 return - xi + 7./4.*xi*xi + 4*xi*eta;
1500 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1501 subtriangle_lookup(p));
1504 switch (subtriangle_lookup(p))
1507 return -2*eta - 1./2.*xi*eta + 13./4.*eta*eta;
1509 return 3./4. - 5./2.*xi + 7./4.*xi*xi
1510 - 4*eta + 7./2.*xi*eta + 17./4.*eta*eta;
1512 return - 1./4.*xi*xi
1513 - 2*eta + 3*eta*eta;
1516 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1517 subtriangle_lookup(p));
1520 switch (subtriangle_lookup(p))
1523 return std::sqrt(2.) * (2*xi*eta - eta*eta);
1525 return std::sqrt(2.) * (- 3 + 10*xi - 7*xi*xi
1526 + 8*eta - 14*xi*eta - 5*eta*eta);
1531 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1532 subtriangle_lookup(p));
1535 switch (subtriangle_lookup(p))
1538 return 4*eta - 4*xi*eta - 8*eta*eta;
1540 return 4 - 8*xi + 4*xi*xi
1541 - 12*eta + 12*xi*eta + 8*eta*eta;
1543 return 4*xi - 4*xi*xi
1547 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1548 subtriangle_lookup(p));
1551 switch (subtriangle_lookup(p))
1554 return 4*xi - 4*xi*xi
1555 - 4*eta - 8*xi*eta + 10.*eta*eta;
1557 return 2 - 8*xi + 6*xi*xi
1558 - 4*eta + 8*xi*eta + 2*eta*eta;
1563 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1564 subtriangle_lookup(p));
1568 libmesh_error_msg(
"Invalid shape function index i = " <<
1573 libmesh_error_msg(
"Invalid shape function derivative j = " <<
1578 Real clough_raw_shape(
const unsigned int basis_num,
1581 Real xi = p(0), eta = p(1);
1586 switch (subtriangle_lookup(p))
1589 return 1 - 3*xi*xi + 2*xi*xi*xi
1590 - 3*eta*eta - 3*xi*eta*eta + 3*eta*eta*eta;
1592 return -1 + 9*xi - 15*xi*xi + 7*xi*xi*xi
1593 + 9*eta - 30*xi*eta +21*xi*xi*eta
1594 - 15*eta*eta + 21*xi*eta*eta + 7*eta*eta*eta;
1596 return 1 - 3*xi*xi + 3*xi*xi*xi
1598 - 3*eta*eta + 2*eta*eta*eta;
1601 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1602 subtriangle_lookup(p));
1605 switch (subtriangle_lookup(p))
1608 return 3*xi*xi - 2*xi*xi*xi
1610 - 1./2.*eta*eta*eta;
1612 return 1 - 9./2.*xi + 9*xi*xi - 9./2.*xi*xi*xi
1613 - 9./2.*eta + 15*xi*eta - 21./2.*xi*xi*eta
1614 + 6*eta*eta - 21./2.*xi*eta*eta - 5./2.*eta*eta*eta;
1616 return 3*xi*xi - 5./2.*xi*xi*xi
1620 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1621 subtriangle_lookup(p));
1624 switch (subtriangle_lookup(p))
1627 return 3*eta*eta + 3./2.*xi*eta*eta - 5./2.*eta*eta*eta;
1629 return 1 - 9./2.*xi + 6*xi*xi - 5./2.*xi*xi*xi
1630 - 9./2.*eta + 15*xi*eta - 21./2.*xi*xi*eta
1631 + 9*eta*eta - 21./2.*xi*eta*eta - 9./2.*eta*eta*eta;
1633 return -1./2.*xi*xi*xi
1635 + 3*eta*eta - 2*eta*eta*eta;
1638 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1639 subtriangle_lookup(p));
1642 switch (subtriangle_lookup(p))
1645 return xi - 2*xi*xi + xi*xi*xi
1646 - 3./2.*eta*eta - 1./2.*xi*eta*eta + 7./3.*eta*eta*eta;
1648 return -1./6. + 5./2.*xi - 9./2.*xi*xi + 13./6.*xi*xi*xi
1649 - 4*xi*eta + 4*xi*xi*eta
1650 + 1./2.*eta*eta + 3./2.*xi*eta*eta - 1./3.*eta*eta*eta;
1652 return xi - 1./2.*xi*xi - 7./6.*xi*xi*xi
1653 - 3*xi*eta + 2*xi*xi*eta
1657 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1658 subtriangle_lookup(p));
1661 switch (subtriangle_lookup(p))
1664 return eta - 3*xi*eta + 2*xi*xi*eta
1665 - 1./2.*eta*eta + 2*xi*eta*eta - 7./6.*eta*eta*eta;
1667 return -1./6. + 1./2.*xi*xi - 1./3.*xi*xi*xi
1668 + 5./2.*eta - 4*xi*eta + 3./2.*xi*xi*eta
1669 - 9./2.*eta*eta + 4*xi*eta*eta + 13./6.*eta*eta*eta;
1671 return -3./2.*xi*xi + 7./3.*xi*xi*xi
1672 + eta - 1./2.*xi*xi*eta - 2*eta*eta + eta*eta*eta;
1675 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1676 subtriangle_lookup(p));
1679 switch (subtriangle_lookup(p))
1682 return -xi*xi + xi*xi*xi
1683 - 1./4.*xi*eta*eta + 1./12.*eta*eta*eta;
1685 return -1./6. + 3./4.*xi - 2*xi*xi + 17./12.*xi*xi*xi
1686 + 3./4.*eta - 5./2.*xi*eta + 7./4.*xi*xi*eta
1687 - eta*eta + 7./4.*xi*eta*eta + 5./12.*eta*eta*eta;
1689 return -xi*xi + 13./12.*xi*xi*xi
1693 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1694 subtriangle_lookup(p));
1697 switch (subtriangle_lookup(p))
1700 return -xi*eta + 2*xi*xi*eta
1701 + 1./2.*eta*eta + 7./4.*xi*eta*eta - 13./12.*eta*eta*eta;
1703 return 2./3. - 13./4.*xi + 9./2.*xi*xi - 23./12.*xi*xi*xi
1704 - 11./4.*eta + 19./2.*xi*eta - 23./4.*xi*xi*eta
1705 + 7./2.*eta*eta - 25./4.*xi*eta*eta - 17./12.*eta*eta*eta;
1707 return -1./2.*xi*xi + 5./12.*xi*xi*xi
1711 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1712 subtriangle_lookup(p));
1715 switch (subtriangle_lookup(p))
1718 return -1./2.*eta*eta + 9./4.*xi*eta*eta + 5./12.*eta*eta*eta;
1720 return 2./3. - 11./4.*xi + 7./2.*xi*xi - 17./12.*xi*xi*xi
1721 - 13./4.*eta + 19./2.*xi*eta - 25./4.*xi*xi*eta
1722 + 9./2.*eta*eta - 23./4.*xi*eta*eta - 23./12.*eta*eta*eta;
1724 return 1./2.*xi*xi - 13./12.*xi*xi*xi
1725 - xi*eta + 7./4.*xi*xi*eta + 2*xi*eta*eta;
1728 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1729 subtriangle_lookup(p));
1732 switch (subtriangle_lookup(p))
1735 return -eta*eta - 1./4.*xi*eta*eta + 13./12.*eta*eta*eta;
1737 return -1./6. + 3./4.*xi - xi*xi + 5./12.*xi*xi*xi
1738 + 3./4.*eta - 5./2.*xi*eta + 7./4.*xi*xi*eta
1739 - 2*eta*eta + 7./4.*xi*eta*eta + 17./12.*eta*eta*eta;
1741 return 1./12.*xi*xi*xi
1743 - eta*eta + eta*eta*eta;
1746 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1747 subtriangle_lookup(p));
1750 switch (subtriangle_lookup(p))
1753 return std::sqrt(2.) * (xi*eta*eta - 1./3.*eta*eta*eta);
1755 return std::sqrt(2.) * (2./3. - 3*xi + 4*xi*xi - 5./3.*xi*xi*xi
1756 - 3*eta + 10*xi*eta - 7*xi*xi*eta
1757 + 4*eta*eta - 7*xi*eta*eta - 5./3.*eta*eta*eta);
1759 return std::sqrt(2.) * (-1./3.*xi*xi*xi + xi*xi*eta);
1762 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1763 subtriangle_lookup(p));
1766 switch (subtriangle_lookup(p))
1769 return 2*eta*eta - 2*xi*eta*eta - 8./3.*eta*eta*eta;
1771 return -2./3. + 2*xi - 2*xi*xi + 2./3.*xi*xi*xi
1772 + 4*eta - 8*xi*eta + 4*xi*xi*eta
1773 - 6*eta*eta + 6*xi*eta*eta + 8./3.*eta*eta*eta;
1775 return -2*xi*xi + 10./3.*xi*xi*xi
1776 + 4*xi*eta - 4*xi*xi*eta
1780 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1781 subtriangle_lookup(p));
1784 switch (subtriangle_lookup(p))
1787 return 4*xi*eta - 4*xi*xi*eta
1788 - 2*eta*eta - 4*xi*eta*eta + 10./3.*eta*eta*eta;
1790 return -2./3. + 4*xi - 6*xi*xi + 8./3.*xi*xi*xi
1791 + 2*eta - 8*xi*eta + 6*xi*xi*eta
1792 - 2*eta*eta + 4*xi*eta*eta + 2./3.*eta*eta*eta;
1794 return 2*xi*xi - 8./3.*xi*xi*xi
1798 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1799 subtriangle_lookup(p));
1803 libmesh_error_msg(
"Invalid shape function index i = " <<
1822 libmesh_error_msg(
"Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
1831 const unsigned int i,
1833 const bool add_p_level)
1837 clough_compute_coefs(elem);
1841 const Order totalorder =
1842 static_cast<Order>(order + add_p_level * elem->
p_level());
1852 libmesh_experimental();
1858 libmesh_assert_less (i, 9);
1867 return clough_raw_shape(0, p)
1868 + d1d2n * clough_raw_shape(10, p)
1869 + d1d3n * clough_raw_shape(11, p);
1871 return clough_raw_shape(1, p)
1872 + d2d3n * clough_raw_shape(11, p)
1873 + d2d1n * clough_raw_shape(9, p);
1875 return clough_raw_shape(2, p)
1876 + d3d1n * clough_raw_shape(9, p)
1877 + d3d2n * clough_raw_shape(10, p);
1879 return d1xd1x * clough_raw_shape(3, p)
1880 + d1xd1y * clough_raw_shape(4, p)
1881 + d1xd2n * clough_raw_shape(10, p)
1882 + d1xd3n * clough_raw_shape(11, p)
1883 + 0.5 * N01x * d3nd3n * clough_raw_shape(11, p)
1884 + 0.5 * N02x * d2nd2n * clough_raw_shape(10, p);
1886 return d1yd1y * clough_raw_shape(4, p)
1887 + d1yd1x * clough_raw_shape(3, p)
1888 + d1yd2n * clough_raw_shape(10, p)
1889 + d1yd3n * clough_raw_shape(11, p)
1890 + 0.5 * N01y * d3nd3n * clough_raw_shape(11, p)
1891 + 0.5 * N02y * d2nd2n * clough_raw_shape(10, p);
1893 return d2xd2x * clough_raw_shape(5, p)
1894 + d2xd2y * clough_raw_shape(6, p)
1895 + d2xd3n * clough_raw_shape(11, p)
1896 + d2xd1n * clough_raw_shape(9, p)
1897 + 0.5 * N10x * d3nd3n * clough_raw_shape(11, p)
1898 + 0.5 * N12x * d1nd1n * clough_raw_shape(9, p);
1900 return d2yd2y * clough_raw_shape(6, p)
1901 + d2yd2x * clough_raw_shape(5, p)
1902 + d2yd3n * clough_raw_shape(11, p)
1903 + d2yd1n * clough_raw_shape(9, p)
1904 + 0.5 * N10y * d3nd3n * clough_raw_shape(11, p)
1905 + 0.5 * N12y * d1nd1n * clough_raw_shape(9, p);
1907 return d3xd3x * clough_raw_shape(7, p)
1908 + d3xd3y * clough_raw_shape(8, p)
1909 + d3xd1n * clough_raw_shape(9, p)
1910 + d3xd2n * clough_raw_shape(10, p)
1911 + 0.5 * N20x * d2nd2n * clough_raw_shape(10, p)
1912 + 0.5 * N21x * d1nd1n * clough_raw_shape(9, p);
1914 return d3yd3y * clough_raw_shape(8, p)
1915 + d3yd3x * clough_raw_shape(7, p)
1916 + d3yd1n * clough_raw_shape(9, p)
1917 + d3yd2n * clough_raw_shape(10, p)
1918 + 0.5 * N20y * d2nd2n * clough_raw_shape(10, p)
1919 + 0.5 * N21y * d1nd1n * clough_raw_shape(9, p);
1921 libmesh_error_msg(
"Invalid shape function index i = " << i);
1925 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
1936 libmesh_assert_less (i, 12);
1946 return clough_raw_shape(0, p)
1947 + d1d2n * clough_raw_shape(10, p)
1948 + d1d3n * clough_raw_shape(11, p);
1950 return clough_raw_shape(1, p)
1951 + d2d3n * clough_raw_shape(11, p)
1952 + d2d1n * clough_raw_shape(9, p);
1954 return clough_raw_shape(2, p)
1955 + d3d1n * clough_raw_shape(9, p)
1956 + d3d2n * clough_raw_shape(10, p);
1958 return d1xd1x * clough_raw_shape(3, p)
1959 + d1xd1y * clough_raw_shape(4, p)
1960 + d1xd2n * clough_raw_shape(10, p)
1961 + d1xd3n * clough_raw_shape(11, p);
1963 return d1yd1y * clough_raw_shape(4, p)
1964 + d1yd1x * clough_raw_shape(3, p)
1965 + d1yd2n * clough_raw_shape(10, p)
1966 + d1yd3n * clough_raw_shape(11, p);
1968 return d2xd2x * clough_raw_shape(5, p)
1969 + d2xd2y * clough_raw_shape(6, p)
1970 + d2xd3n * clough_raw_shape(11, p)
1971 + d2xd1n * clough_raw_shape(9, p);
1973 return d2yd2y * clough_raw_shape(6, p)
1974 + d2yd2x * clough_raw_shape(5, p)
1975 + d2yd3n * clough_raw_shape(11, p)
1976 + d2yd1n * clough_raw_shape(9, p);
1978 return d3xd3x * clough_raw_shape(7, p)
1979 + d3xd3y * clough_raw_shape(8, p)
1980 + d3xd1n * clough_raw_shape(9, p)
1981 + d3xd2n * clough_raw_shape(10, p);
1983 return d3yd3y * clough_raw_shape(8, p)
1984 + d3yd3x * clough_raw_shape(7, p)
1985 + d3yd1n * clough_raw_shape(9, p)
1986 + d3yd2n * clough_raw_shape(10, p);
1988 return d1nd1n * clough_raw_shape(9, p);
1990 return d2nd2n * clough_raw_shape(10, p);
1992 return d3nd3n * clough_raw_shape(11, p);
1995 libmesh_error_msg(
"Invalid shape function index i = " << i);
1999 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2004 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);
2017 libmesh_error_msg(
"Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
2026 const unsigned int i,
2027 const unsigned int j,
2029 const bool add_p_level)
2033 clough_compute_coefs(elem);
2037 const Order totalorder =
2038 static_cast<Order>(order + add_p_level * elem->
p_level());
2048 libmesh_experimental();
2054 libmesh_assert_less (i, 9);
2063 return clough_raw_shape_deriv(0, j, p)
2064 + d1d2n * clough_raw_shape_deriv(10, j, p)
2065 + d1d3n * clough_raw_shape_deriv(11, j, p);
2067 return clough_raw_shape_deriv(1, j, p)
2068 + d2d3n * clough_raw_shape_deriv(11, j, p)
2069 + d2d1n * clough_raw_shape_deriv(9, j, p);
2071 return clough_raw_shape_deriv(2, j, p)
2072 + d3d1n * clough_raw_shape_deriv(9, j, p)
2073 + d3d2n * clough_raw_shape_deriv(10, j, p);
2075 return d1xd1x * clough_raw_shape_deriv(3, j, p)
2076 + d1xd1y * clough_raw_shape_deriv(4, j, p)
2077 + d1xd2n * clough_raw_shape_deriv(10, j, p)
2078 + d1xd3n * clough_raw_shape_deriv(11, j, p)
2079 + 0.5 * N01x * d3nd3n * clough_raw_shape_deriv(11, j, p)
2080 + 0.5 * N02x * d2nd2n * clough_raw_shape_deriv(10, j, p);
2082 return d1yd1y * clough_raw_shape_deriv(4, j, p)
2083 + d1yd1x * clough_raw_shape_deriv(3, j, p)
2084 + d1yd2n * clough_raw_shape_deriv(10, j, p)
2085 + d1yd3n * clough_raw_shape_deriv(11, j, p)
2086 + 0.5 * N01y * d3nd3n * clough_raw_shape_deriv(11, j, p)
2087 + 0.5 * N02y * d2nd2n * clough_raw_shape_deriv(10, j, p);
2089 return d2xd2x * clough_raw_shape_deriv(5, j, p)
2090 + d2xd2y * clough_raw_shape_deriv(6, j, p)
2091 + d2xd3n * clough_raw_shape_deriv(11, j, p)
2092 + d2xd1n * clough_raw_shape_deriv(9, j, p)
2093 + 0.5 * N10x * d3nd3n * clough_raw_shape_deriv(11, j, p)
2094 + 0.5 * N12x * d1nd1n * clough_raw_shape_deriv(9, j, p);
2096 return d2yd2y * clough_raw_shape_deriv(6, j, p)
2097 + d2yd2x * clough_raw_shape_deriv(5, j, p)
2098 + d2yd3n * clough_raw_shape_deriv(11, j, p)
2099 + d2yd1n * clough_raw_shape_deriv(9, j, p)
2100 + 0.5 * N10y * d3nd3n * clough_raw_shape_deriv(11, j, p)
2101 + 0.5 * N12y * d1nd1n * clough_raw_shape_deriv(9, j, p);
2103 return d3xd3x * clough_raw_shape_deriv(7, j, p)
2104 + d3xd3y * clough_raw_shape_deriv(8, j, p)
2105 + d3xd1n * clough_raw_shape_deriv(9, j, p)
2106 + d3xd2n * clough_raw_shape_deriv(10, j, p)
2107 + 0.5 * N20x * d2nd2n * clough_raw_shape_deriv(10, j, p)
2108 + 0.5 * N21x * d1nd1n * clough_raw_shape_deriv(9, j, p);
2110 return d3yd3y * clough_raw_shape_deriv(8, j, p)
2111 + d3yd3x * clough_raw_shape_deriv(7, j, p)
2112 + d3yd1n * clough_raw_shape_deriv(9, j, p)
2113 + d3yd2n * clough_raw_shape_deriv(10, j, p)
2114 + 0.5 * N20y * d2nd2n * clough_raw_shape_deriv(10, j, p)
2115 + 0.5 * N21y * d1nd1n * clough_raw_shape_deriv(9, j, p);
2117 libmesh_error_msg(
"Invalid shape function index i = " << i);
2121 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2132 libmesh_assert_less (i, 12);
2142 return clough_raw_shape_deriv(0, j, p)
2143 + d1d2n * clough_raw_shape_deriv(10, j, p)
2144 + d1d3n * clough_raw_shape_deriv(11, j, p);
2146 return clough_raw_shape_deriv(1, j, p)
2147 + d2d3n * clough_raw_shape_deriv(11, j, p)
2148 + d2d1n * clough_raw_shape_deriv(9, j, p);
2150 return clough_raw_shape_deriv(2, j, p)
2151 + d3d1n * clough_raw_shape_deriv(9, j, p)
2152 + d3d2n * clough_raw_shape_deriv(10, j, p);
2154 return d1xd1x * clough_raw_shape_deriv(3, j, p)
2155 + d1xd1y * clough_raw_shape_deriv(4, j, p)
2156 + d1xd2n * clough_raw_shape_deriv(10, j, p)
2157 + d1xd3n * clough_raw_shape_deriv(11, j, p);
2159 return d1yd1y * clough_raw_shape_deriv(4, j, p)
2160 + d1yd1x * clough_raw_shape_deriv(3, j, p)
2161 + d1yd2n * clough_raw_shape_deriv(10, j, p)
2162 + d1yd3n * clough_raw_shape_deriv(11, j, p);
2164 return d2xd2x * clough_raw_shape_deriv(5, j, p)
2165 + d2xd2y * clough_raw_shape_deriv(6, j, p)
2166 + d2xd3n * clough_raw_shape_deriv(11, j, p)
2167 + d2xd1n * clough_raw_shape_deriv(9, j, p);
2169 return d2yd2y * clough_raw_shape_deriv(6, j, p)
2170 + d2yd2x * clough_raw_shape_deriv(5, j, p)
2171 + d2yd3n * clough_raw_shape_deriv(11, j, p)
2172 + d2yd1n * clough_raw_shape_deriv(9, j, p);
2174 return d3xd3x * clough_raw_shape_deriv(7, j, p)
2175 + d3xd3y * clough_raw_shape_deriv(8, j, p)
2176 + d3xd1n * clough_raw_shape_deriv(9, j, p)
2177 + d3xd2n * clough_raw_shape_deriv(10, j, p);
2179 return d3yd3y * clough_raw_shape_deriv(8, j, p)
2180 + d3yd3x * clough_raw_shape_deriv(7, j, p)
2181 + d3yd1n * clough_raw_shape_deriv(9, j, p)
2182 + d3yd2n * clough_raw_shape_deriv(10, j, p);
2184 return d1nd1n * clough_raw_shape_deriv(9, j, p);
2186 return d2nd2n * clough_raw_shape_deriv(10, j, p);
2188 return d3nd3n * clough_raw_shape_deriv(11, j, p);
2191 libmesh_error_msg(
"Invalid shape function index i = " << i);
2195 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2200 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);
2206 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
2215 libmesh_error_msg(
"Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
2223 const unsigned int i,
2224 const unsigned int j,
2226 const bool add_p_level)
2230 clough_compute_coefs(elem);
2234 const Order totalorder =
2235 static_cast<Order>(order + add_p_level * elem->
p_level());
2247 libmesh_assert_less (i, 9);
2256 return clough_raw_shape_second_deriv(0, j, p)
2257 + d1d2n * clough_raw_shape_second_deriv(10, j, p)
2258 + d1d3n * clough_raw_shape_second_deriv(11, j, p);
2260 return clough_raw_shape_second_deriv(1, j, p)
2261 + d2d3n * clough_raw_shape_second_deriv(11, j, p)
2262 + d2d1n * clough_raw_shape_second_deriv(9, j, p);
2264 return clough_raw_shape_second_deriv(2, j, p)
2265 + d3d1n * clough_raw_shape_second_deriv(9, j, p)
2266 + d3d2n * clough_raw_shape_second_deriv(10, j, p);
2268 return d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2269 + d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2270 + d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2271 + d1xd3n * clough_raw_shape_second_deriv(11, j, p)
2272 + 0.5 * N01x * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2273 + 0.5 * N02x * d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2275 return d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2276 + d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2277 + d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2278 + d1yd3n * clough_raw_shape_second_deriv(11, j, p)
2279 + 0.5 * N01y * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2280 + 0.5 * N02y * d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2282 return d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2283 + d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2284 + d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2285 + d2xd1n * clough_raw_shape_second_deriv(9, j, p)
2286 + 0.5 * N10x * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2287 + 0.5 * N12x * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2289 return d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2290 + d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2291 + d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2292 + d2yd1n * clough_raw_shape_second_deriv(9, j, p)
2293 + 0.5 * N10y * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2294 + 0.5 * N12y * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2296 return d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2297 + d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2298 + d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2299 + d3xd2n * clough_raw_shape_second_deriv(10, j, p)
2300 + 0.5 * N20x * d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2301 + 0.5 * N21x * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2303 return d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2304 + d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2305 + d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2306 + d3yd2n * clough_raw_shape_second_deriv(10, j, p)
2307 + 0.5 * N20y * d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2308 + 0.5 * N21y * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2310 libmesh_error_msg(
"Invalid shape function index i = " << i);
2314 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2325 libmesh_assert_less (i, 12);
2335 return clough_raw_shape_second_deriv(0, j, p)
2336 + d1d2n * clough_raw_shape_second_deriv(10, j, p)
2337 + d1d3n * clough_raw_shape_second_deriv(11, j, p);
2339 return clough_raw_shape_second_deriv(1, j, p)
2340 + d2d3n * clough_raw_shape_second_deriv(11, j, p)
2341 + d2d1n * clough_raw_shape_second_deriv(9, j, p);
2343 return clough_raw_shape_second_deriv(2, j, p)
2344 + d3d1n * clough_raw_shape_second_deriv(9, j, p)
2345 + d3d2n * clough_raw_shape_second_deriv(10, j, p);
2347 return d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2348 + d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2349 + d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2350 + d1xd3n * clough_raw_shape_second_deriv(11, j, p);
2352 return d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2353 + d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2354 + d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2355 + d1yd3n * clough_raw_shape_second_deriv(11, j, p);
2357 return d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2358 + d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2359 + d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2360 + d2xd1n * clough_raw_shape_second_deriv(9, j, p);
2362 return d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2363 + d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2364 + d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2365 + d2yd1n * clough_raw_shape_second_deriv(9, j, p);
2367 return d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2368 + d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2369 + d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2370 + d3xd2n * clough_raw_shape_second_deriv(10, j, p);
2372 return d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2373 + d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2374 + d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2375 + d3yd2n * clough_raw_shape_second_deriv(10, j, p);
2377 return d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2379 return d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2381 return d3nd3n * clough_raw_shape_second_deriv(11, j, p);
2384 libmesh_error_msg(
"Invalid shape function index i = " << i);
2388 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2393 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);