36 static const Elem * old_elem_ptr =
nullptr;
41 static Real d1d2n, d1d3n, d2d3n, d2d1n, d3d1n, d3d2n;
42 static Real d1xd1x, d1xd1y, d1xd2n, d1xd3n;
43 static Real d1yd1x, d1yd1y, d1yd2n, d1yd3n;
44 static Real d2xd2x, d2xd2y, d2xd3n, d2xd1n;
45 static Real d2yd2x, d2yd2y, d2yd3n, d2yd1n;
46 static Real d3xd3x, d3xd3y, d3xd1n, d3xd2n;
47 static Real d3yd3x, d3yd3y, d3yd1n, d3yd2n;
48 static Real d1nd1n, d2nd2n, d3nd3n;
51 static Real N01x, N01y, N10x, N10y;
52 static Real N02x, N02y, N20x, N20y;
53 static Real N21x, N21y, N12x, N12y;
55 Real clough_raw_shape_second_deriv(
const unsigned int basis_num,
56 const unsigned int deriv_type,
58 Real clough_raw_shape_deriv(
const unsigned int basis_num,
59 const unsigned int deriv_type,
61 Real clough_raw_shape(
const unsigned int basis_num,
63 unsigned char subtriangle_lookup(
const Point & p);
67 void clough_compute_coefs(
const Elem * elem)
76 if (elem->
id() == old_elem_id &&
81 const Order mapping_order (elem->default_order());
82 const ElemType mapping_elem_type (elem->type());
83 const int n_mapping_shape_functions =
88 std::vector<Point> dofpt;
89 dofpt.push_back(
Point(0,0));
90 dofpt.push_back(
Point(1,0));
91 dofpt.push_back(
Point(0,1));
92 dofpt.push_back(
Point(1/2.,1/2.));
93 dofpt.push_back(
Point(0,1/2.));
94 dofpt.push_back(
Point(1/2.,0));
97 std::vector<Real> dxdxi(6), dxdeta(6), dydxi(6), dydeta(6);
98 std::vector<Real> dxidx(6), detadx(6), dxidy(6), detady(6);
100 for (
int p = 0; p != 6; ++p)
103 for (
int i = 0; i != n_mapping_shape_functions; ++i)
106 (mapping_elem_type, mapping_order, i, 0, dofpt[p]);
108 (mapping_elem_type, mapping_order, i, 1, dofpt[p]);
113 dxdxi[p] += elem->point(i)(0) * ddxi;
114 dydxi[p] += elem->point(i)(1) * ddxi;
115 dxdeta[p] += elem->point(i)(0) * ddeta;
116 dydeta[p] += elem->point(i)(1) * ddeta;
129 const Real inv_jac = 1. / (dxdxi[p]*dydeta[p] -
131 dxidx[p] = dydeta[p] * inv_jac;
132 dxidy[p] = - dxdeta[p] * inv_jac;
133 detadx[p] = - dydxi[p] * inv_jac;
134 detady[p] = dxdxi[p] * inv_jac;
138 Real N1x = dydeta[3] - dydxi[3];
139 Real N1y = dxdxi[3] - dxdeta[3];
140 Real Nlength = std::sqrt(static_cast<Real>(N1x*N1x + N1y*N1y));
141 N1x /= Nlength; N1y /= Nlength;
143 Real N2x = - dydeta[4];
144 Real N2y = dxdeta[4];
145 Nlength = std::sqrt(static_cast<Real>(N2x*N2x + N2y*N2y));
146 N2x /= Nlength; N2y /= Nlength;
149 Real N3y = - dxdxi[5];
150 Nlength = std::sqrt(static_cast<Real>(N3x*N3x + N3y*N3y));
151 N3x /= Nlength; N3y /= Nlength;
156 Nlength = std::sqrt(static_cast<Real>(N01x*N01x + N01y*N01y));
157 N01x /= Nlength; N01y /= Nlength;
161 Nlength = std::sqrt(static_cast<Real>(N10x*N10x + N10y*N10y));
162 N10x /= Nlength; N10y /= Nlength;
166 Nlength = std::sqrt(static_cast<Real>(N02x*N02x + N02y*N02y));
167 N02x /= Nlength; N02y /= Nlength;
171 Nlength = std::sqrt(static_cast<Real>(N20x*N20x + N20y*N20y));
172 N20x /= Nlength; N20y /= Nlength;
174 N12x = dydeta[1] - dydxi[1];
175 N12y = dxdxi[1] - dxdeta[1];
176 Nlength = std::sqrt(static_cast<Real>(N12x*N12x + N12y*N12y));
177 N12x /= Nlength; N12y /= Nlength;
179 N21x = dydeta[1] - dydxi[1];
180 N21y = dxdxi[1] - dxdeta[1];
181 Nlength = std::sqrt(static_cast<Real>(N21x*N21x + N21y*N21y));
182 N21x /= Nlength; N21y /= Nlength;
198 if (elem->point(2) < elem->point(1))
204 N1x = -N1x; N1y = -N1y;
205 N12x = -N12x; N12y = -N12y;
206 N21x = -N21x; N21y = -N21y;
215 if (elem->point(0) < elem->point(2))
222 N2x = -N2x; N2y = -N2y;
223 N02x = -N02x; N02y = -N02y;
224 N20x = -N20x; N20y = -N20y;
234 if (elem->point(1) < elem->point(0))
242 N01x = -N01x; N01y = -N01y;
243 N10x = -N10x; N10y = -N10y;
263 Real d1d2ndxi = clough_raw_shape_deriv(0, 0, dofpt[4]);
264 Real d1d2ndeta = clough_raw_shape_deriv(0, 1, dofpt[4]);
265 Real d1d2ndx = d1d2ndxi * dxidx[4] + d1d2ndeta * detadx[4];
266 Real d1d2ndy = d1d2ndxi * dxidy[4] + d1d2ndeta * detady[4];
267 Real d1d3ndxi = clough_raw_shape_deriv(0, 0, dofpt[5]);
268 Real d1d3ndeta = clough_raw_shape_deriv(0, 1, dofpt[5]);
269 Real d1d3ndx = d1d3ndxi * dxidx[5] + d1d3ndeta * detadx[5];
270 Real d1d3ndy = d1d3ndxi * dxidy[5] + d1d3ndeta * detady[5];
271 Real d2d3ndxi = clough_raw_shape_deriv(1, 0, dofpt[5]);
272 Real d2d3ndeta = clough_raw_shape_deriv(1, 1, dofpt[5]);
273 Real d2d3ndx = d2d3ndxi * dxidx[5] + d2d3ndeta * detadx[5];
274 Real d2d3ndy = d2d3ndxi * dxidy[5] + d2d3ndeta * detady[5];
275 Real d2d1ndxi = clough_raw_shape_deriv(1, 0, dofpt[3]);
276 Real d2d1ndeta = clough_raw_shape_deriv(1, 1, dofpt[3]);
277 Real d2d1ndx = d2d1ndxi * dxidx[3] + d2d1ndeta * detadx[3];
278 Real d2d1ndy = d2d1ndxi * dxidy[3] + d2d1ndeta * detady[3];
279 Real d3d1ndxi = clough_raw_shape_deriv(2, 0, dofpt[3]);
280 Real d3d1ndeta = clough_raw_shape_deriv(2, 1, dofpt[3]);
281 Real d3d1ndx = d3d1ndxi * dxidx[3] + d3d1ndeta * detadx[3];
282 Real d3d1ndy = d3d1ndxi * dxidy[3] + d3d1ndeta * detady[3];
283 Real d3d2ndxi = clough_raw_shape_deriv(2, 0, dofpt[4]);
284 Real d3d2ndeta = clough_raw_shape_deriv(2, 1, dofpt[4]);
285 Real d3d2ndx = d3d2ndxi * dxidx[4] + d3d2ndeta * detadx[4];
286 Real d3d2ndy = d3d2ndxi * dxidy[4] + d3d2ndeta * detady[4];
287 Real d1xd2ndxi = clough_raw_shape_deriv(3, 0, dofpt[4]);
288 Real d1xd2ndeta = clough_raw_shape_deriv(3, 1, dofpt[4]);
289 Real d1xd2ndx = d1xd2ndxi * dxidx[4] + d1xd2ndeta * detadx[4];
290 Real d1xd2ndy = d1xd2ndxi * dxidy[4] + d1xd2ndeta * detady[4];
291 Real d1xd3ndxi = clough_raw_shape_deriv(3, 0, dofpt[5]);
292 Real d1xd3ndeta = clough_raw_shape_deriv(3, 1, dofpt[5]);
293 Real d1xd3ndx = d1xd3ndxi * dxidx[5] + d1xd3ndeta * detadx[5];
294 Real d1xd3ndy = d1xd3ndxi * dxidy[5] + d1xd3ndeta * detady[5];
295 Real d1yd2ndxi = clough_raw_shape_deriv(4, 0, dofpt[4]);
296 Real d1yd2ndeta = clough_raw_shape_deriv(4, 1, dofpt[4]);
297 Real d1yd2ndx = d1yd2ndxi * dxidx[4] + d1yd2ndeta * detadx[4];
298 Real d1yd2ndy = d1yd2ndxi * dxidy[4] + d1yd2ndeta * detady[4];
299 Real d1yd3ndxi = clough_raw_shape_deriv(4, 0, dofpt[5]);
300 Real d1yd3ndeta = clough_raw_shape_deriv(4, 1, dofpt[5]);
301 Real d1yd3ndx = d1yd3ndxi * dxidx[5] + d1yd3ndeta * detadx[5];
302 Real d1yd3ndy = d1yd3ndxi * dxidy[5] + d1yd3ndeta * detady[5];
303 Real d2xd3ndxi = clough_raw_shape_deriv(5, 0, dofpt[5]);
304 Real d2xd3ndeta = clough_raw_shape_deriv(5, 1, dofpt[5]);
305 Real d2xd3ndx = d2xd3ndxi * dxidx[5] + d2xd3ndeta * detadx[5];
306 Real d2xd3ndy = d2xd3ndxi * dxidy[5] + d2xd3ndeta * detady[5];
307 Real d2xd1ndxi = clough_raw_shape_deriv(5, 0, dofpt[3]);
308 Real d2xd1ndeta = clough_raw_shape_deriv(5, 1, dofpt[3]);
309 Real d2xd1ndx = d2xd1ndxi * dxidx[3] + d2xd1ndeta * detadx[3];
310 Real d2xd1ndy = d2xd1ndxi * dxidy[3] + d2xd1ndeta * detady[3];
311 Real d2yd3ndxi = clough_raw_shape_deriv(6, 0, dofpt[5]);
312 Real d2yd3ndeta = clough_raw_shape_deriv(6, 1, dofpt[5]);
313 Real d2yd3ndx = d2yd3ndxi * dxidx[5] + d2yd3ndeta * detadx[5];
314 Real d2yd3ndy = d2yd3ndxi * dxidy[5] + d2yd3ndeta * detady[5];
315 Real d2yd1ndxi = clough_raw_shape_deriv(6, 0, dofpt[3]);
316 Real d2yd1ndeta = clough_raw_shape_deriv(6, 1, dofpt[3]);
317 Real d2yd1ndx = d2yd1ndxi * dxidx[3] + d2yd1ndeta * detadx[3];
318 Real d2yd1ndy = d2yd1ndxi * dxidy[3] + d2yd1ndeta * detady[3];
319 Real d3xd1ndxi = clough_raw_shape_deriv(7, 0, dofpt[3]);
320 Real d3xd1ndeta = clough_raw_shape_deriv(7, 1, dofpt[3]);
321 Real d3xd1ndx = d3xd1ndxi * dxidx[3] + d3xd1ndeta * detadx[3];
322 Real d3xd1ndy = d3xd1ndxi * dxidy[3] + d3xd1ndeta * detady[3];
323 Real d3xd2ndxi = clough_raw_shape_deriv(7, 0, dofpt[4]);
324 Real d3xd2ndeta = clough_raw_shape_deriv(7, 1, dofpt[4]);
325 Real d3xd2ndx = d3xd2ndxi * dxidx[4] + d3xd2ndeta * detadx[4];
326 Real d3xd2ndy = d3xd2ndxi * dxidy[4] + d3xd2ndeta * detady[4];
327 Real d3yd1ndxi = clough_raw_shape_deriv(8, 0, dofpt[3]);
328 Real d3yd1ndeta = clough_raw_shape_deriv(8, 1, dofpt[3]);
329 Real d3yd1ndx = d3yd1ndxi * dxidx[3] + d3yd1ndeta * detadx[3];
330 Real d3yd1ndy = d3yd1ndxi * dxidy[3] + d3yd1ndeta * detady[3];
331 Real d3yd2ndxi = clough_raw_shape_deriv(8, 0, dofpt[4]);
332 Real d3yd2ndeta = clough_raw_shape_deriv(8, 1, dofpt[4]);
333 Real d3yd2ndx = d3yd2ndxi * dxidx[4] + d3yd2ndeta * detadx[4];
334 Real d3yd2ndy = d3yd2ndxi * dxidy[4] + d3yd2ndeta * detady[4];
335 Real d1nd1ndxi = clough_raw_shape_deriv(9, 0, dofpt[3]);
336 Real d1nd1ndeta = clough_raw_shape_deriv(9, 1, dofpt[3]);
337 Real d1nd1ndx = d1nd1ndxi * dxidx[3] + d1nd1ndeta * detadx[3];
338 Real d1nd1ndy = d1nd1ndxi * dxidy[3] + d1nd1ndeta * detady[3];
339 Real d2nd2ndxi = clough_raw_shape_deriv(10, 0, dofpt[4]);
340 Real d2nd2ndeta = clough_raw_shape_deriv(10, 1, dofpt[4]);
341 Real d2nd2ndx = d2nd2ndxi * dxidx[4] + d2nd2ndeta * detadx[4];
342 Real d2nd2ndy = d2nd2ndxi * dxidy[4] + d2nd2ndeta * detady[4];
343 Real d3nd3ndxi = clough_raw_shape_deriv(11, 0, dofpt[5]);
344 Real d3nd3ndeta = clough_raw_shape_deriv(11, 1, dofpt[5]);
345 Real d3nd3ndx = d3nd3ndxi * dxidx[3] + d3nd3ndeta * detadx[3];
346 Real d3nd3ndy = d3nd3ndxi * dxidy[3] + d3nd3ndeta * detady[3];
348 Real d1xd1dxi = clough_raw_shape_deriv(3, 0, dofpt[0]);
349 Real d1xd1deta = clough_raw_shape_deriv(3, 1, dofpt[0]);
350 Real d1xd1dx = d1xd1dxi * dxidx[0] + d1xd1deta * detadx[0];
351 Real d1xd1dy = d1xd1dxi * dxidy[0] + d1xd1deta * detady[0];
352 Real d1yd1dxi = clough_raw_shape_deriv(4, 0, dofpt[0]);
353 Real d1yd1deta = clough_raw_shape_deriv(4, 1, dofpt[0]);
354 Real d1yd1dx = d1yd1dxi * dxidx[0] + d1yd1deta * detadx[0];
355 Real d1yd1dy = d1yd1dxi * dxidy[0] + d1yd1deta * detady[0];
356 Real d2xd2dxi = clough_raw_shape_deriv(5, 0, dofpt[1]);
357 Real d2xd2deta = clough_raw_shape_deriv(5, 1, dofpt[1]);
358 Real d2xd2dx = d2xd2dxi * dxidx[1] + d2xd2deta * detadx[1];
359 Real d2xd2dy = d2xd2dxi * dxidy[1] + d2xd2deta * detady[1];
379 Real d2yd2dxi = clough_raw_shape_deriv(6, 0, dofpt[1]);
380 Real d2yd2deta = clough_raw_shape_deriv(6, 1, dofpt[1]);
381 Real d2yd2dx = d2yd2dxi * dxidx[1] + d2yd2deta * detadx[1];
382 Real d2yd2dy = d2yd2dxi * dxidy[1] + d2yd2deta * detady[1];
383 Real d3xd3dxi = clough_raw_shape_deriv(7, 0, dofpt[2]);
384 Real d3xd3deta = clough_raw_shape_deriv(7, 1, dofpt[2]);
385 Real d3xd3dx = d3xd3dxi * dxidx[1] + d3xd3deta * detadx[1];
386 Real d3xd3dy = d3xd3dxi * dxidy[1] + d3xd3deta * detady[1];
387 Real d3yd3dxi = clough_raw_shape_deriv(8, 0, dofpt[2]);
388 Real d3yd3deta = clough_raw_shape_deriv(8, 1, dofpt[2]);
389 Real d3yd3dx = d3yd3dxi * dxidx[1] + d3yd3deta * detadx[1];
390 Real d3yd3dy = d3yd3dxi * dxidy[1] + d3yd3deta * detady[1];
394 Real d1nd1ndn = d1nd1ndx * N1x + d1nd1ndy * N1y;
395 Real d1xd2ndn = d1xd2ndx * N2x + d1xd2ndy * N2y;
396 Real d1xd3ndn = d1xd3ndx * N3x + d1xd3ndy * N3y;
397 Real d1yd2ndn = d1yd2ndx * N2x + d1yd2ndy * N2y;
398 Real d1yd3ndn = d1yd3ndx * N3x + d1yd3ndy * N3y;
400 Real d2nd2ndn = d2nd2ndx * N2x + d2nd2ndy * N2y;
401 Real d2xd3ndn = d2xd3ndx * N3x + d2xd3ndy * N3y;
402 Real d2xd1ndn = d2xd1ndx * N1x + d2xd1ndy * N1y;
403 Real d2yd3ndn = d2yd3ndx * N3x + d2yd3ndy * N3y;
404 Real d2yd1ndn = d2yd1ndx * N1x + d2yd1ndy * N1y;
406 Real d3nd3ndn = d3nd3ndx * N3x + d3nd3ndy * N3y;
407 Real d3xd1ndn = d3xd1ndx * N1x + d3xd1ndy * N1y;
408 Real d3xd2ndn = d3xd2ndx * N2x + d3xd2ndy * N2y;
409 Real d3yd1ndn = d3yd1ndx * N1x + d3yd1ndy * N1y;
410 Real d3yd2ndn = d3yd2ndx * N2x + d3yd2ndy * N2y;
414 d1nd1n = 1. / d1nd1ndn;
415 d2nd2n = 1. / d2nd2ndn;
416 d3nd3n = 1. / d3nd3ndn;
424 if (elem->id() == old_elem_id &&
425 elem == old_elem_ptr)
427 libmesh_assert_equal_to(d1d2n, -(d1d2ndx * N2x + d1d2ndy * N2y) / d2nd2ndn);
428 libmesh_assert_equal_to(d1d3n, -(d1d3ndx * N3x + d1d3ndy * N3y) / d3nd3ndn);
429 libmesh_assert_equal_to(d2d3n, -(d2d3ndx * N3x + d2d3ndy * N3y) / d3nd3ndn);
430 libmesh_assert_equal_to(d2d1n, -(d2d1ndx * N1x + d2d1ndy * N1y) / d1nd1ndn);
431 libmesh_assert_equal_to(d3d1n, -(d3d1ndx * N1x + d3d1ndy * N1y) / d1nd1ndn);
432 libmesh_assert_equal_to(d3d2n, -(d3d2ndx * N2x + d3d2ndy * N2y) / d2nd2ndn);
433 libmesh_assert_equal_to(d1xd1x, 1. / (d1xd1dx - d1xd1dy * d1yd1dx / d1yd1dy));
434 libmesh_assert_equal_to(d1xd1y, 1. / (d1yd1dx - d1xd1dx * d1yd1dy / d1xd1dy));
435 libmesh_assert_equal_to(d1yd1y, 1. / (d1yd1dy - d1yd1dx * d1xd1dy / d1xd1dx));
436 libmesh_assert_equal_to(d1yd1x, 1. / (d1xd1dy - d1yd1dy * d1xd1dx / d1yd1dx));
437 libmesh_assert_equal_to(d2xd2x, 1. / (d2xd2dx - d2xd2dy * d2yd2dx / d2yd2dy));
438 libmesh_assert_equal_to(d2xd2y, 1. / (d2yd2dx - d2xd2dx * d2yd2dy / d2xd2dy));
439 libmesh_assert_equal_to(d2yd2y, 1. / (d2yd2dy - d2yd2dx * d2xd2dy / d2xd2dx));
440 libmesh_assert_equal_to(d2yd2x, 1. / (d2xd2dy - d2yd2dy * d2xd2dx / d2yd2dx));
441 libmesh_assert_equal_to(d3xd3x, 1. / (d3xd3dx - d3xd3dy * d3yd3dx / d3yd3dy));
442 libmesh_assert_equal_to(d3xd3y, 1. / (d3yd3dx - d3xd3dx * d3yd3dy / d3xd3dy));
443 libmesh_assert_equal_to(d3yd3y, 1. / (d3yd3dy - d3yd3dx * d3xd3dy / d3xd3dx));
444 libmesh_assert_equal_to(d3yd3x, 1. / (d3xd3dy - d3yd3dy * d3xd3dx / d3yd3dx));
445 libmesh_assert_equal_to(d1xd2n, -(d1xd1x * d1xd2ndn + d1xd1y * d1yd2ndn) / d2nd2ndn);
446 libmesh_assert_equal_to(d1yd2n, -(d1yd1y * d1yd2ndn + d1yd1x * d1xd2ndn) / d2nd2ndn);
447 libmesh_assert_equal_to(d1xd3n, -(d1xd1x * d1xd3ndn + d1xd1y * d1yd3ndn) / d3nd3ndn);
448 libmesh_assert_equal_to(d1yd3n, -(d1yd1y * d1yd3ndn + d1yd1x * d1xd3ndn) / d3nd3ndn);
449 libmesh_assert_equal_to(d2xd3n, -(d2xd2x * d2xd3ndn + d2xd2y * d2yd3ndn) / d3nd3ndn);
450 libmesh_assert_equal_to(d2yd3n, -(d2yd2y * d2yd3ndn + d2yd2x * d2xd3ndn) / d3nd3ndn);
451 libmesh_assert_equal_to(d2xd1n, -(d2xd2x * d2xd1ndn + d2xd2y * d2yd1ndn) / d1nd1ndn);
452 libmesh_assert_equal_to(d2yd1n, -(d2yd2y * d2yd1ndn + d2yd2x * d2xd1ndn) / d1nd1ndn);
453 libmesh_assert_equal_to(d3xd1n, -(d3xd3x * d3xd1ndn + d3xd3y * d3yd1ndn) / d1nd1ndn);
454 libmesh_assert_equal_to(d3yd1n, -(d3yd3y * d3yd1ndn + d3yd3x * d3xd1ndn) / d1nd1ndn);
455 libmesh_assert_equal_to(d3xd2n, -(d3xd3x * d3xd2ndn + d3xd3y * d3yd2ndn) / d2nd2ndn);
456 libmesh_assert_equal_to(d3yd2n, -(d3yd3y * d3yd2ndn + d3yd3x * d3xd2ndn) / d2nd2ndn);
460 d1d2n = -(d1d2ndx * N2x + d1d2ndy * N2y) / d2nd2ndn;
461 d1d3n = -(d1d3ndx * N3x + d1d3ndy * N3y) / d3nd3ndn;
462 d2d3n = -(d2d3ndx * N3x + d2d3ndy * N3y) / d3nd3ndn;
463 d2d1n = -(d2d1ndx * N1x + d2d1ndy * N1y) / d1nd1ndn;
464 d3d1n = -(d3d1ndx * N1x + d3d1ndy * N1y) / d1nd1ndn;
465 d3d2n = -(d3d2ndx * N2x + d3d2ndy * N2y) / d2nd2ndn;
469 d1xd1x = 1. / (d1xd1dx - d1xd1dy * d1yd1dx / d1yd1dy);
470 d1xd1y = 1. / (d1yd1dx - d1xd1dx * d1yd1dy / d1xd1dy);
472 d1yd1y = 1. / (d1yd1dy - d1yd1dx * d1xd1dy / d1xd1dx);
473 d1yd1x = 1. / (d1xd1dy - d1yd1dy * d1xd1dx / d1yd1dx);
475 d2xd2x = 1. / (d2xd2dx - d2xd2dy * d2yd2dx / d2yd2dy);
476 d2xd2y = 1. / (d2yd2dx - d2xd2dx * d2yd2dy / d2xd2dy);
478 d2yd2y = 1. / (d2yd2dy - d2yd2dx * d2xd2dy / d2xd2dx);
479 d2yd2x = 1. / (d2xd2dy - d2yd2dy * d2xd2dx / d2yd2dx);
481 d3xd3x = 1. / (d3xd3dx - d3xd3dy * d3yd3dx / d3yd3dy);
482 d3xd3y = 1. / (d3yd3dx - d3xd3dx * d3yd3dy / d3xd3dy);
484 d3yd3y = 1. / (d3yd3dy - d3yd3dx * d3xd3dy / d3xd3dx);
485 d3yd3x = 1. / (d3xd3dy - d3yd3dy * d3xd3dx / d3yd3dx);
504 d1xd2n = -(d1xd1x * d1xd2ndn + d1xd1y * d1yd2ndn) / d2nd2ndn;
505 d1yd2n = -(d1yd1y * d1yd2ndn + d1yd1x * d1xd2ndn) / d2nd2ndn;
506 d1xd3n = -(d1xd1x * d1xd3ndn + d1xd1y * d1yd3ndn) / d3nd3ndn;
507 d1yd3n = -(d1yd1y * d1yd3ndn + d1yd1x * d1xd3ndn) / d3nd3ndn;
508 d2xd3n = -(d2xd2x * d2xd3ndn + d2xd2y * d2yd3ndn) / d3nd3ndn;
509 d2yd3n = -(d2yd2y * d2yd3ndn + d2yd2x * d2xd3ndn) / d3nd3ndn;
510 d2xd1n = -(d2xd2x * d2xd1ndn + d2xd2y * d2yd1ndn) / d1nd1ndn;
511 d2yd1n = -(d2yd2y * d2yd1ndn + d2yd2x * d2xd1ndn) / d1nd1ndn;
512 d3xd1n = -(d3xd3x * d3xd1ndn + d3xd3y * d3yd1ndn) / d1nd1ndn;
513 d3yd1n = -(d3yd3y * d3yd1ndn + d3yd3x * d3xd1ndn) / d1nd1ndn;
514 d3xd2n = -(d3xd3x * d3xd2ndn + d3xd3y * d3yd2ndn) / d2nd2ndn;
515 d3yd2n = -(d3yd3y * d3yd2ndn + d3yd3x * d3xd2ndn) / d2nd2ndn;
517 old_elem_id = elem->id();
565 unsigned char subtriangle_lookup(
const Point & p)
567 if ((p(0) >= p(1)) && (p(0) + 2 * p(1) <= 1))
569 if ((p(0) <= p(1)) && (p(1) + 2 * p(0) <= 1))
576 Real clough_raw_shape_second_deriv(
const unsigned int basis_num,
577 const unsigned int deriv_type,
580 Real xi = p(0), eta = p(1);
590 switch (subtriangle_lookup(p))
595 return -30 + 42*xi + 42*eta;
597 return -6 + 18*xi - 6*eta;
600 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
601 subtriangle_lookup(p));
604 switch (subtriangle_lookup(p))
609 return 18 - 27*xi - 21*eta;
611 return 6 - 15*xi + 3*eta;
614 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
615 subtriangle_lookup(p));
618 switch (subtriangle_lookup(p))
623 return 12 - 15*xi - 21*eta;
625 return -3*xi + 3*eta;
628 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
629 subtriangle_lookup(p));
632 switch (subtriangle_lookup(p))
637 return -9 + 13*xi + 8*eta;
639 return -1 - 7*xi + 4*eta;
642 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
643 subtriangle_lookup(p));
646 switch (subtriangle_lookup(p))
651 return 1 - 2*xi + 3*eta;
653 return -3 + 14*xi - eta;
656 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
657 subtriangle_lookup(p));
660 switch (subtriangle_lookup(p))
665 return -4 + 17./2.*xi + 7./2.*eta;
667 return -2 + 13./2.*xi - 1./2.*eta;
670 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
671 subtriangle_lookup(p));
674 switch (subtriangle_lookup(p))
679 return 9 - 23./2.*xi - 23./2.*eta;
681 return -1 + 5./2.*xi + 9./2.*eta;
684 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
685 subtriangle_lookup(p));
688 switch (subtriangle_lookup(p))
693 return 7 - 17./2.*xi - 25./2.*eta;
695 return 1 - 13./2.*xi + 7./2.*eta;
698 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
699 subtriangle_lookup(p));
702 switch (subtriangle_lookup(p))
707 return -2 + 5./2.*xi + 7./2.*eta;
709 return 1./2.*xi - 1./2.*eta;
712 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
713 subtriangle_lookup(p));
716 switch (subtriangle_lookup(p))
721 return std::sqrt(2.) * (8 - 10*xi - 14*eta);
723 return std::sqrt(2.) * (-2*xi + 2*eta);
726 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
727 subtriangle_lookup(p));
730 switch (subtriangle_lookup(p))
735 return -4 + 4*xi + 8*eta;
737 return -4 + 20*xi - 8*eta;
740 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
741 subtriangle_lookup(p));
744 switch (subtriangle_lookup(p))
749 return -12 + 16*xi + 12*eta;
751 return 4 - 16*xi - 4*eta;
754 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
755 subtriangle_lookup(p));
759 libmesh_error_msg(
"Invalid shape function index i = " <<
768 switch (subtriangle_lookup(p))
779 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
780 subtriangle_lookup(p));
783 switch (subtriangle_lookup(p))
788 return 15 - 21*xi - 21*eta;
793 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
794 subtriangle_lookup(p));
797 switch (subtriangle_lookup(p))
802 return 15 - 21*xi - 21*eta;
807 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
808 subtriangle_lookup(p));
811 switch (subtriangle_lookup(p))
816 return -4 + 8*xi + 3*eta;
818 return -3 + 4*xi + 4*eta;
821 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
822 subtriangle_lookup(p));
825 switch (subtriangle_lookup(p))
828 return -3 + 4*xi + 4*eta;
830 return - 4 + 3*xi + 8*eta;
835 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
836 subtriangle_lookup(p));
839 switch (subtriangle_lookup(p))
844 return -5./2. + 7./2.*xi + 7./2.*eta;
849 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
850 subtriangle_lookup(p));
853 switch (subtriangle_lookup(p))
856 return -1 + 4*xi + 7./2.*eta;
858 return 19./2. - 23./2.*xi - 25./2.*eta;
863 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
864 subtriangle_lookup(p));
867 switch (subtriangle_lookup(p))
872 return 19./2. - 25./2.*xi - 23./2.*eta;
874 return -1 + 7./2.*xi + 4*eta;
877 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
878 subtriangle_lookup(p));
881 switch (subtriangle_lookup(p))
886 return -5./2. + 7./2.*xi + 7./2.*eta;
891 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
892 subtriangle_lookup(p));
895 switch (subtriangle_lookup(p))
898 return std::sqrt(2.) * (2*eta);
900 return std::sqrt(2.) * (10 - 14*xi - 14*eta);
902 return std::sqrt(2.) * (2*xi);
905 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
906 subtriangle_lookup(p));
909 switch (subtriangle_lookup(p))
914 return - 8 + 8*xi + 12*eta;
916 return 4 - 8*xi - 8*eta;
919 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
920 subtriangle_lookup(p));
923 switch (subtriangle_lookup(p))
926 return 4 - 8*xi - 8*eta;
928 return -8 + 12*xi + 8*eta;
933 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
934 subtriangle_lookup(p));
938 libmesh_error_msg(
"Invalid shape function index i = " <<
947 switch (subtriangle_lookup(p))
950 return -6 - 6*xi + 18*eta;
952 return -30 + 42*xi + 42*eta;
957 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
958 subtriangle_lookup(p));
961 switch (subtriangle_lookup(p))
966 return 12 - 21*xi - 15*eta;
971 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
972 subtriangle_lookup(p));
975 switch (subtriangle_lookup(p))
978 return 6 + 3*xi - 15*eta;
980 return 18 - 21.*xi - 27*eta;
985 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
986 subtriangle_lookup(p));
989 switch (subtriangle_lookup(p))
992 return -3 - xi + 14*eta;
994 return 1 + 3*xi - 2*eta;
999 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1000 subtriangle_lookup(p));
1003 switch (subtriangle_lookup(p))
1006 return -1 + 4*xi - 7*eta;
1008 return -9 + 8*xi + 13*eta;
1013 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1014 subtriangle_lookup(p));
1017 switch (subtriangle_lookup(p))
1020 return - 1./2.*xi + 1./2.*eta;
1022 return -2 + 7./2.*xi + 5./2.*eta;
1027 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1028 subtriangle_lookup(p));
1031 switch (subtriangle_lookup(p))
1034 return 1 + 7./2.*xi - 13./2.*eta;
1036 return 7 - 25./2.*xi - 17./2.*eta;
1041 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1042 subtriangle_lookup(p));
1045 switch (subtriangle_lookup(p))
1048 return -1 + 9./2.*xi + 5./2.*eta;
1050 return 9 - 23./2.*xi - 23./2.*eta;
1055 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1056 subtriangle_lookup(p));
1059 switch (subtriangle_lookup(p))
1062 return -2 - 1./2.*xi + 13./2.*eta;
1064 return -4 + 7./2.*xi + 17./2.*eta;
1069 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1070 subtriangle_lookup(p));
1073 switch (subtriangle_lookup(p))
1076 return std::sqrt(2.) * (2*xi - 2*eta);
1078 return std::sqrt(2.) * (8 - 14*xi - 10*eta);
1083 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1084 subtriangle_lookup(p));
1087 switch (subtriangle_lookup(p))
1090 return 4 - 4*xi - 16*eta;
1092 return -12 + 12*xi + 16*eta;
1097 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1098 subtriangle_lookup(p));
1101 switch (subtriangle_lookup(p))
1104 return -4 - 8*xi + 20*eta;
1106 return -4 + 8*xi + 4*eta;
1111 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1112 subtriangle_lookup(p));
1116 libmesh_error_msg(
"Invalid shape function index i = " <<
1121 libmesh_error_msg(
"Invalid shape function derivative j = " <<
1128 Real clough_raw_shape_deriv(
const unsigned int basis_num,
1129 const unsigned int deriv_type,
1132 Real xi = p(0), eta = p(1);
1141 switch (subtriangle_lookup(p))
1144 return -6*xi + 6*xi*xi
1147 return 9 - 30*xi + 21*xi*xi
1148 - 30*eta + 42*xi*eta
1151 return -6*xi + 9*xi*xi
1155 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1156 subtriangle_lookup(p));
1159 switch (subtriangle_lookup(p))
1162 return 6*xi - 6*xi*xi
1165 return - 9./2. + 18*xi - 27./2.*xi*xi
1166 + 15*eta - 21*xi*eta
1169 return 6*xi - 15./2.*xi*xi
1173 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1174 subtriangle_lookup(p));
1177 switch (subtriangle_lookup(p))
1180 return 3./2.*eta*eta;
1182 return - 9./2. + 12*xi - 15./2.*xi*xi
1183 + 15*eta - 21*xi*eta
1190 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1191 subtriangle_lookup(p));
1194 switch (subtriangle_lookup(p))
1197 return 1 - 4*xi + 3*xi*xi
1200 return 5./2. - 9*xi + 13./2.*xi*xi
1204 return 1 - xi - 7./2.*xi*xi
1209 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1210 subtriangle_lookup(p));
1213 switch (subtriangle_lookup(p))
1216 return - 3*eta + 4*xi*eta
1223 return -3*xi + 7*xi*xi
1227 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1228 subtriangle_lookup(p));
1231 switch (subtriangle_lookup(p))
1234 return -2*xi + 3*xi*xi
1237 return 3./4. - 4*xi + 17./4.*xi*xi
1238 - 5./2.*eta + 7./2.*xi*eta
1241 return -2*xi + 13./4.*xi*xi
1245 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1246 subtriangle_lookup(p));
1249 switch (subtriangle_lookup(p))
1252 return -eta + 4*xi*eta
1255 return -13./4. + 9*xi - 23./4.*xi*xi
1256 + 19./2.*eta - 23./2.*xi*eta
1259 return -xi + 5./4.*xi*xi
1263 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1264 subtriangle_lookup(p));
1267 switch (subtriangle_lookup(p))
1270 return 9./4.*eta*eta;
1272 return - 11./4. + 7*xi - 17./4.*xi*xi
1273 + 19./2.*eta - 25./2.*xi*eta
1276 return xi - 13./4.*xi*xi
1277 - eta + 7./2.*xi*eta + 2*eta*eta;
1280 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1281 subtriangle_lookup(p));
1284 switch (subtriangle_lookup(p))
1287 return - 1./4.*eta*eta;
1289 return 3./4. - 2*xi + 5./4.*xi*xi
1290 - 5./2.*eta + 7./2.*xi*eta
1297 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1298 subtriangle_lookup(p));
1301 switch (subtriangle_lookup(p))
1304 return std::sqrt(2.) * eta*eta;
1306 return std::sqrt(2.) * (-3 + 8*xi - 5*xi*xi
1307 + 10*eta - 14*xi*eta
1310 return std::sqrt(2.) * (-xi*xi + 2*xi*eta);
1313 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1314 subtriangle_lookup(p));
1317 switch (subtriangle_lookup(p))
1322 return 2 - 4*xi + 2*xi*xi
1326 return -4*xi + 10*xi*xi
1331 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1332 subtriangle_lookup(p));
1335 switch (subtriangle_lookup(p))
1338 return 4*eta - 8*xi*eta
1341 return 4 - 12*xi + 8*xi*xi
1345 return 4*xi - 8*xi*xi
1349 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1350 subtriangle_lookup(p));
1354 libmesh_error_msg(
"Invalid shape function index i = " <<
1363 switch (subtriangle_lookup(p))
1366 return - 6*eta - 6*xi*eta + 9*eta*eta;
1368 return 9 - 30*xi + 21*xi*xi
1369 - 30*eta + 42*xi*eta + 21*eta*eta;
1372 - 6*eta + 6*eta*eta;
1375 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1376 subtriangle_lookup(p));
1379 switch (subtriangle_lookup(p))
1385 return - 9./2. + 15*xi - 21./2.*xi*xi
1386 + 12*eta - 21*xi*eta - 15./2.*eta*eta;
1388 return + 3./2.*xi*xi;
1391 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1392 subtriangle_lookup(p));
1395 switch (subtriangle_lookup(p))
1398 return 6*eta + 3*xi*eta - 15./2.*eta*eta;
1400 return - 9./2. + 15*xi - 21./2.*xi*xi
1401 + 18*eta - 21.*xi*eta - 27./2.*eta*eta;
1404 + 6*eta - 6*eta*eta;
1407 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1408 subtriangle_lookup(p));
1411 switch (subtriangle_lookup(p))
1414 return - 3*eta - xi*eta + 7*eta*eta;
1416 return - 4*xi + 4*xi*xi
1417 + eta + 3*xi*eta - eta*eta;
1419 return - 3*xi + 2*xi*xi
1423 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1424 subtriangle_lookup(p));
1427 switch (subtriangle_lookup(p))
1430 return 1 - 3*xi + 2*xi*xi
1431 - eta + 4*xi*eta - 7./2.*eta*eta;
1433 return 5./2. - 4*xi + 3./2.*xi*xi
1434 - 9.*eta + 8*xi*eta + 13./2.*eta*eta;
1436 return 1 - 1./2.*xi*xi - 4*eta + 3*eta*eta;
1439 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1440 subtriangle_lookup(p));
1443 switch (subtriangle_lookup(p))
1446 return - 1./2.*xi*eta + 1./4.*eta*eta;
1448 return 3./4. - 5./2.*xi + 7./4.*xi*xi
1449 - 2*eta + 7./2.*xi*eta + 5./4.*eta*eta;
1451 return - 1./4.*xi*xi;
1454 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1455 subtriangle_lookup(p));
1458 switch (subtriangle_lookup(p))
1461 return -xi + 2*xi*xi
1462 + eta + 7./2.*xi*eta - 13./4.*eta*eta;
1464 return - 11./4. + 19./2.*xi - 23./4.*xi*xi
1465 + 7*eta - 25./2.*xi*eta - 17./4.*eta*eta;
1470 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1471 subtriangle_lookup(p));
1474 switch (subtriangle_lookup(p))
1477 return -eta + 9./2.*xi*eta + 5./4.*eta*eta;
1479 return - 13./4. + 19./2.*xi - 25./4.*xi*xi
1480 + 9*eta - 23./2.*xi*eta - 23./4.*eta*eta;
1482 return - xi + 7./4.*xi*xi + 4*xi*eta;
1485 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1486 subtriangle_lookup(p));
1489 switch (subtriangle_lookup(p))
1492 return -2*eta - 1./2.*xi*eta + 13./4.*eta*eta;
1494 return 3./4. - 5./2.*xi + 7./4.*xi*xi
1495 - 4*eta + 7./2.*xi*eta + 17./4.*eta*eta;
1497 return - 1./4.*xi*xi
1498 - 2*eta + 3*eta*eta;
1501 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1502 subtriangle_lookup(p));
1505 switch (subtriangle_lookup(p))
1508 return std::sqrt(2.) * (2*xi*eta - eta*eta);
1510 return std::sqrt(2.) * (- 3 + 10*xi - 7*xi*xi
1511 + 8*eta - 14*xi*eta - 5*eta*eta);
1513 return std::sqrt(2.) * (xi*xi);
1516 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1517 subtriangle_lookup(p));
1520 switch (subtriangle_lookup(p))
1523 return 4*eta - 4*xi*eta - 8*eta*eta;
1525 return 4 - 8*xi + 4*xi*xi
1526 - 12*eta + 12*xi*eta + 8*eta*eta;
1528 return 4*xi - 4*xi*xi
1532 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1533 subtriangle_lookup(p));
1536 switch (subtriangle_lookup(p))
1539 return 4*xi - 4*xi*xi
1540 - 4*eta - 8*xi*eta + 10.*eta*eta;
1542 return 2 - 8*xi + 6*xi*xi
1543 - 4*eta + 8*xi*eta + 2*eta*eta;
1548 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1549 subtriangle_lookup(p));
1553 libmesh_error_msg(
"Invalid shape function index i = " <<
1558 libmesh_error_msg(
"Invalid shape function derivative j = " <<
1563 Real clough_raw_shape(
const unsigned int basis_num,
1566 Real xi = p(0), eta = p(1);
1571 switch (subtriangle_lookup(p))
1574 return 1 - 3*xi*xi + 2*xi*xi*xi
1575 - 3*eta*eta - 3*xi*eta*eta + 3*eta*eta*eta;
1577 return -1 + 9*xi - 15*xi*xi + 7*xi*xi*xi
1578 + 9*eta - 30*xi*eta +21*xi*xi*eta
1579 - 15*eta*eta + 21*xi*eta*eta + 7*eta*eta*eta;
1581 return 1 - 3*xi*xi + 3*xi*xi*xi
1583 - 3*eta*eta + 2*eta*eta*eta;
1586 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1587 subtriangle_lookup(p));
1590 switch (subtriangle_lookup(p))
1593 return 3*xi*xi - 2*xi*xi*xi
1595 - 1./2.*eta*eta*eta;
1597 return 1 - 9./2.*xi + 9*xi*xi - 9./2.*xi*xi*xi
1598 - 9./2.*eta + 15*xi*eta - 21./2.*xi*xi*eta
1599 + 6*eta*eta - 21./2.*xi*eta*eta - 5./2.*eta*eta*eta;
1601 return 3*xi*xi - 5./2.*xi*xi*xi
1605 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1606 subtriangle_lookup(p));
1609 switch (subtriangle_lookup(p))
1612 return 3*eta*eta + 3./2.*xi*eta*eta - 5./2.*eta*eta*eta;
1614 return 1 - 9./2.*xi + 6*xi*xi - 5./2.*xi*xi*xi
1615 - 9./2.*eta + 15*xi*eta - 21./2.*xi*xi*eta
1616 + 9*eta*eta - 21./2.*xi*eta*eta - 9./2.*eta*eta*eta;
1618 return -1./2.*xi*xi*xi
1620 + 3*eta*eta - 2*eta*eta*eta;
1623 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1624 subtriangle_lookup(p));
1627 switch (subtriangle_lookup(p))
1630 return xi - 2*xi*xi + xi*xi*xi
1631 - 3./2.*eta*eta - 1./2.*xi*eta*eta + 7./3.*eta*eta*eta;
1633 return -1./6. + 5./2.*xi - 9./2.*xi*xi + 13./6.*xi*xi*xi
1634 - 4*xi*eta + 4*xi*xi*eta
1635 + 1./2.*eta*eta + 3./2.*xi*eta*eta - 1./3.*eta*eta*eta;
1637 return xi - 1./2.*xi*xi - 7./6.*xi*xi*xi
1638 - 3*xi*eta + 2*xi*xi*eta
1642 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1643 subtriangle_lookup(p));
1646 switch (subtriangle_lookup(p))
1649 return eta - 3*xi*eta + 2*xi*xi*eta
1650 - 1./2.*eta*eta + 2*xi*eta*eta - 7./6.*eta*eta*eta;
1652 return -1./6. + 1./2.*xi*xi - 1./3.*xi*xi*xi
1653 + 5./2.*eta - 4*xi*eta + 3./2.*xi*xi*eta
1654 - 9./2.*eta*eta + 4*xi*eta*eta + 13./6.*eta*eta*eta;
1656 return -3./2.*xi*xi + 7./3.*xi*xi*xi
1657 + eta - 1./2.*xi*xi*eta - 2*eta*eta + eta*eta*eta;
1660 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1661 subtriangle_lookup(p));
1664 switch (subtriangle_lookup(p))
1667 return -xi*xi + xi*xi*xi
1668 - 1./4.*xi*eta*eta + 1./12.*eta*eta*eta;
1670 return -1./6. + 3./4.*xi - 2*xi*xi + 17./12.*xi*xi*xi
1671 + 3./4.*eta - 5./2.*xi*eta + 7./4.*xi*xi*eta
1672 - eta*eta + 7./4.*xi*eta*eta + 5./12.*eta*eta*eta;
1674 return -xi*xi + 13./12.*xi*xi*xi
1678 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1679 subtriangle_lookup(p));
1682 switch (subtriangle_lookup(p))
1685 return -xi*eta + 2*xi*xi*eta
1686 + 1./2.*eta*eta + 7./4.*xi*eta*eta - 13./12.*eta*eta*eta;
1688 return 2./3. - 13./4.*xi + 9./2.*xi*xi - 23./12.*xi*xi*xi
1689 - 11./4.*eta + 19./2.*xi*eta - 23./4.*xi*xi*eta
1690 + 7./2.*eta*eta - 25./4.*xi*eta*eta - 17./12.*eta*eta*eta;
1692 return -1./2.*xi*xi + 5./12.*xi*xi*xi
1696 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1697 subtriangle_lookup(p));
1700 switch (subtriangle_lookup(p))
1703 return -1./2.*eta*eta + 9./4.*xi*eta*eta + 5./12.*eta*eta*eta;
1705 return 2./3. - 11./4.*xi + 7./2.*xi*xi - 17./12.*xi*xi*xi
1706 - 13./4.*eta + 19./2.*xi*eta - 25./4.*xi*xi*eta
1707 + 9./2.*eta*eta - 23./4.*xi*eta*eta - 23./12.*eta*eta*eta;
1709 return 1./2.*xi*xi - 13./12.*xi*xi*xi
1710 - xi*eta + 7./4.*xi*xi*eta + 2*xi*eta*eta;
1713 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1714 subtriangle_lookup(p));
1717 switch (subtriangle_lookup(p))
1720 return -eta*eta - 1./4.*xi*eta*eta + 13./12.*eta*eta*eta;
1722 return -1./6. + 3./4.*xi - xi*xi + 5./12.*xi*xi*xi
1723 + 3./4.*eta - 5./2.*xi*eta + 7./4.*xi*xi*eta
1724 - 2*eta*eta + 7./4.*xi*eta*eta + 17./12.*eta*eta*eta;
1726 return 1./12.*xi*xi*xi
1728 - eta*eta + eta*eta*eta;
1731 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1732 subtriangle_lookup(p));
1735 switch (subtriangle_lookup(p))
1738 return std::sqrt(2.) * (xi*eta*eta - 1./3.*eta*eta*eta);
1740 return std::sqrt(2.) * (2./3. - 3*xi + 4*xi*xi - 5./3.*xi*xi*xi
1741 - 3*eta + 10*xi*eta - 7*xi*xi*eta
1742 + 4*eta*eta - 7*xi*eta*eta - 5./3.*eta*eta*eta);
1744 return std::sqrt(2.) * (-1./3.*xi*xi*xi + xi*xi*eta);
1747 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1748 subtriangle_lookup(p));
1751 switch (subtriangle_lookup(p))
1754 return 2*eta*eta - 2*xi*eta*eta - 8./3.*eta*eta*eta;
1756 return -2./3. + 2*xi - 2*xi*xi + 2./3.*xi*xi*xi
1757 + 4*eta - 8*xi*eta + 4*xi*xi*eta
1758 - 6*eta*eta + 6*xi*eta*eta + 8./3.*eta*eta*eta;
1760 return -2*xi*xi + 10./3.*xi*xi*xi
1761 + 4*xi*eta - 4*xi*xi*eta
1765 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1766 subtriangle_lookup(p));
1769 switch (subtriangle_lookup(p))
1772 return 4*xi*eta - 4*xi*xi*eta
1773 - 2*eta*eta - 4*xi*eta*eta + 10./3.*eta*eta*eta;
1775 return -2./3. + 4*xi - 6*xi*xi + 8./3.*xi*xi*xi
1776 + 2*eta - 8*xi*eta + 6*xi*xi*eta
1777 - 2*eta*eta + 4*xi*eta*eta + 2./3.*eta*eta*eta;
1779 return 2*xi*xi - 8./3.*xi*xi*xi
1783 libmesh_error_msg(
"Invalid subtriangle lookup = " <<
1784 subtriangle_lookup(p));
1788 libmesh_error_msg(
"Invalid shape function index i = " <<
1807 libmesh_error_msg(
"Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
1816 const unsigned int i,
1819 libmesh_assert(elem);
1821 clough_compute_coefs(elem);
1835 libmesh_experimental();
1841 libmesh_assert_less (i, 9);
1850 return clough_raw_shape(0, p)
1851 + d1d2n * clough_raw_shape(10, p)
1852 + d1d3n * clough_raw_shape(11, p);
1854 return clough_raw_shape(1, p)
1855 + d2d3n * clough_raw_shape(11, p)
1856 + d2d1n * clough_raw_shape(9, p);
1858 return clough_raw_shape(2, p)
1859 + d3d1n * clough_raw_shape(9, p)
1860 + d3d2n * clough_raw_shape(10, p);
1862 return d1xd1x * clough_raw_shape(3, p)
1863 + d1xd1y * clough_raw_shape(4, p)
1864 + d1xd2n * clough_raw_shape(10, p)
1865 + d1xd3n * clough_raw_shape(11, p)
1866 + 0.5 * N01x * d3nd3n * clough_raw_shape(11, p)
1867 + 0.5 * N02x * d2nd2n * clough_raw_shape(10, p);
1869 return d1yd1y * clough_raw_shape(4, p)
1870 + d1yd1x * clough_raw_shape(3, p)
1871 + d1yd2n * clough_raw_shape(10, p)
1872 + d1yd3n * clough_raw_shape(11, p)
1873 + 0.5 * N01y * d3nd3n * clough_raw_shape(11, p)
1874 + 0.5 * N02y * d2nd2n * clough_raw_shape(10, p);
1876 return d2xd2x * clough_raw_shape(5, p)
1877 + d2xd2y * clough_raw_shape(6, p)
1878 + d2xd3n * clough_raw_shape(11, p)
1879 + d2xd1n * clough_raw_shape(9, p)
1880 + 0.5 * N10x * d3nd3n * clough_raw_shape(11, p)
1881 + 0.5 * N12x * d1nd1n * clough_raw_shape(9, p);
1883 return d2yd2y * clough_raw_shape(6, p)
1884 + d2yd2x * clough_raw_shape(5, p)
1885 + d2yd3n * clough_raw_shape(11, p)
1886 + d2yd1n * clough_raw_shape(9, p)
1887 + 0.5 * N10y * d3nd3n * clough_raw_shape(11, p)
1888 + 0.5 * N12y * d1nd1n * clough_raw_shape(9, p);
1890 return d3xd3x * clough_raw_shape(7, p)
1891 + d3xd3y * clough_raw_shape(8, p)
1892 + d3xd1n * clough_raw_shape(9, p)
1893 + d3xd2n * clough_raw_shape(10, p)
1894 + 0.5 * N20x * d2nd2n * clough_raw_shape(10, p)
1895 + 0.5 * N21x * d1nd1n * clough_raw_shape(9, p);
1897 return d3yd3y * clough_raw_shape(8, p)
1898 + d3yd3x * clough_raw_shape(7, p)
1899 + d3yd1n * clough_raw_shape(9, p)
1900 + d3yd2n * clough_raw_shape(10, p)
1901 + 0.5 * N20y * d2nd2n * clough_raw_shape(10, p)
1902 + 0.5 * N21y * d1nd1n * clough_raw_shape(9, p);
1904 libmesh_error_msg(
"Invalid shape function index i = " << i);
1908 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
1919 libmesh_assert_less (i, 12);
1929 return clough_raw_shape(0, p)
1930 + d1d2n * clough_raw_shape(10, p)
1931 + d1d3n * clough_raw_shape(11, p);
1933 return clough_raw_shape(1, p)
1934 + d2d3n * clough_raw_shape(11, p)
1935 + d2d1n * clough_raw_shape(9, p);
1937 return clough_raw_shape(2, p)
1938 + d3d1n * clough_raw_shape(9, p)
1939 + d3d2n * clough_raw_shape(10, p);
1941 return d1xd1x * clough_raw_shape(3, p)
1942 + d1xd1y * clough_raw_shape(4, p)
1943 + d1xd2n * clough_raw_shape(10, p)
1944 + d1xd3n * clough_raw_shape(11, p);
1946 return d1yd1y * clough_raw_shape(4, p)
1947 + d1yd1x * clough_raw_shape(3, p)
1948 + d1yd2n * clough_raw_shape(10, p)
1949 + d1yd3n * clough_raw_shape(11, p);
1951 return d2xd2x * clough_raw_shape(5, p)
1952 + d2xd2y * clough_raw_shape(6, p)
1953 + d2xd3n * clough_raw_shape(11, p)
1954 + d2xd1n * clough_raw_shape(9, p);
1956 return d2yd2y * clough_raw_shape(6, p)
1957 + d2yd2x * clough_raw_shape(5, p)
1958 + d2yd3n * clough_raw_shape(11, p)
1959 + d2yd1n * clough_raw_shape(9, p);
1961 return d3xd3x * clough_raw_shape(7, p)
1962 + d3xd3y * clough_raw_shape(8, p)
1963 + d3xd1n * clough_raw_shape(9, p)
1964 + d3xd2n * clough_raw_shape(10, p);
1966 return d3yd3y * clough_raw_shape(8, p)
1967 + d3yd3x * clough_raw_shape(7, p)
1968 + d3yd1n * clough_raw_shape(9, p)
1969 + d3yd2n * clough_raw_shape(10, p);
1971 return d1nd1n * clough_raw_shape(9, p);
1973 return d2nd2n * clough_raw_shape(10, p);
1975 return d3nd3n * clough_raw_shape(11, p);
1978 libmesh_error_msg(
"Invalid shape function index i = " << i);
1982 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
1987 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);
2000 libmesh_error_msg(
"Clough-Tocher elements require the real element \nto construct gradient-based degrees of freedom.");
2009 const unsigned int i,
2010 const unsigned int j,
2013 libmesh_assert(elem);
2015 clough_compute_coefs(elem);
2029 libmesh_experimental();
2035 libmesh_assert_less (i, 9);
2044 return clough_raw_shape_deriv(0, j, p)
2045 + d1d2n * clough_raw_shape_deriv(10, j, p)
2046 + d1d3n * clough_raw_shape_deriv(11, j, p);
2048 return clough_raw_shape_deriv(1, j, p)
2049 + d2d3n * clough_raw_shape_deriv(11, j, p)
2050 + d2d1n * clough_raw_shape_deriv(9, j, p);
2052 return clough_raw_shape_deriv(2, j, p)
2053 + d3d1n * clough_raw_shape_deriv(9, j, p)
2054 + d3d2n * clough_raw_shape_deriv(10, j, p);
2056 return d1xd1x * clough_raw_shape_deriv(3, j, p)
2057 + d1xd1y * clough_raw_shape_deriv(4, j, p)
2058 + d1xd2n * clough_raw_shape_deriv(10, j, p)
2059 + d1xd3n * clough_raw_shape_deriv(11, j, p)
2060 + 0.5 * N01x * d3nd3n * clough_raw_shape_deriv(11, j, p)
2061 + 0.5 * N02x * d2nd2n * clough_raw_shape_deriv(10, j, p);
2063 return d1yd1y * clough_raw_shape_deriv(4, j, p)
2064 + d1yd1x * clough_raw_shape_deriv(3, j, p)
2065 + d1yd2n * clough_raw_shape_deriv(10, j, p)
2066 + d1yd3n * clough_raw_shape_deriv(11, j, p)
2067 + 0.5 * N01y * d3nd3n * clough_raw_shape_deriv(11, j, p)
2068 + 0.5 * N02y * d2nd2n * clough_raw_shape_deriv(10, j, p);
2070 return d2xd2x * clough_raw_shape_deriv(5, j, p)
2071 + d2xd2y * clough_raw_shape_deriv(6, j, p)
2072 + d2xd3n * clough_raw_shape_deriv(11, j, p)
2073 + d2xd1n * clough_raw_shape_deriv(9, j, p)
2074 + 0.5 * N10x * d3nd3n * clough_raw_shape_deriv(11, j, p)
2075 + 0.5 * N12x * d1nd1n * clough_raw_shape_deriv(9, j, p);
2077 return d2yd2y * clough_raw_shape_deriv(6, j, p)
2078 + d2yd2x * clough_raw_shape_deriv(5, j, p)
2079 + d2yd3n * clough_raw_shape_deriv(11, j, p)
2080 + d2yd1n * clough_raw_shape_deriv(9, j, p)
2081 + 0.5 * N10y * d3nd3n * clough_raw_shape_deriv(11, j, p)
2082 + 0.5 * N12y * d1nd1n * clough_raw_shape_deriv(9, j, p);
2084 return d3xd3x * clough_raw_shape_deriv(7, j, p)
2085 + d3xd3y * clough_raw_shape_deriv(8, j, p)
2086 + d3xd1n * clough_raw_shape_deriv(9, j, p)
2087 + d3xd2n * clough_raw_shape_deriv(10, j, p)
2088 + 0.5 * N20x * d2nd2n * clough_raw_shape_deriv(10, j, p)
2089 + 0.5 * N21x * d1nd1n * clough_raw_shape_deriv(9, j, p);
2091 return d3yd3y * clough_raw_shape_deriv(8, j, p)
2092 + d3yd3x * clough_raw_shape_deriv(7, j, p)
2093 + d3yd1n * clough_raw_shape_deriv(9, j, p)
2094 + d3yd2n * clough_raw_shape_deriv(10, j, p)
2095 + 0.5 * N20y * d2nd2n * clough_raw_shape_deriv(10, j, p)
2096 + 0.5 * N21y * d1nd1n * clough_raw_shape_deriv(9, j, p);
2098 libmesh_error_msg(
"Invalid shape function index i = " << i);
2102 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2113 libmesh_assert_less (i, 12);
2123 return clough_raw_shape_deriv(0, j, p)
2124 + d1d2n * clough_raw_shape_deriv(10, j, p)
2125 + d1d3n * clough_raw_shape_deriv(11, j, p);
2127 return clough_raw_shape_deriv(1, j, p)
2128 + d2d3n * clough_raw_shape_deriv(11, j, p)
2129 + d2d1n * clough_raw_shape_deriv(9, j, p);
2131 return clough_raw_shape_deriv(2, j, p)
2132 + d3d1n * clough_raw_shape_deriv(9, j, p)
2133 + d3d2n * clough_raw_shape_deriv(10, j, p);
2135 return d1xd1x * clough_raw_shape_deriv(3, j, p)
2136 + d1xd1y * clough_raw_shape_deriv(4, j, p)
2137 + d1xd2n * clough_raw_shape_deriv(10, j, p)
2138 + d1xd3n * clough_raw_shape_deriv(11, j, p);
2140 return d1yd1y * clough_raw_shape_deriv(4, j, p)
2141 + d1yd1x * clough_raw_shape_deriv(3, j, p)
2142 + d1yd2n * clough_raw_shape_deriv(10, j, p)
2143 + d1yd3n * clough_raw_shape_deriv(11, j, p);
2145 return d2xd2x * clough_raw_shape_deriv(5, j, p)
2146 + d2xd2y * clough_raw_shape_deriv(6, j, p)
2147 + d2xd3n * clough_raw_shape_deriv(11, j, p)
2148 + d2xd1n * clough_raw_shape_deriv(9, j, p);
2150 return d2yd2y * clough_raw_shape_deriv(6, j, p)
2151 + d2yd2x * clough_raw_shape_deriv(5, j, p)
2152 + d2yd3n * clough_raw_shape_deriv(11, j, p)
2153 + d2yd1n * clough_raw_shape_deriv(9, j, p);
2155 return d3xd3x * clough_raw_shape_deriv(7, j, p)
2156 + d3xd3y * clough_raw_shape_deriv(8, j, p)
2157 + d3xd1n * clough_raw_shape_deriv(9, j, p)
2158 + d3xd2n * clough_raw_shape_deriv(10, j, p);
2160 return d3yd3y * clough_raw_shape_deriv(8, j, p)
2161 + d3yd3x * clough_raw_shape_deriv(7, j, p)
2162 + d3yd1n * clough_raw_shape_deriv(9, j, p)
2163 + d3yd2n * clough_raw_shape_deriv(10, j, p);
2165 return d1nd1n * clough_raw_shape_deriv(9, j, p);
2167 return d2nd2n * clough_raw_shape_deriv(10, j, p);
2169 return d3nd3n * clough_raw_shape_deriv(11, j, p);
2172 libmesh_error_msg(
"Invalid shape function index i = " << i);
2176 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2181 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);
2190 const unsigned int i,
2191 const unsigned int j,
2194 libmesh_assert(elem);
2196 clough_compute_coefs(elem);
2212 libmesh_assert_less (i, 9);
2221 return clough_raw_shape_second_deriv(0, j, p)
2222 + d1d2n * clough_raw_shape_second_deriv(10, j, p)
2223 + d1d3n * clough_raw_shape_second_deriv(11, j, p);
2225 return clough_raw_shape_second_deriv(1, j, p)
2226 + d2d3n * clough_raw_shape_second_deriv(11, j, p)
2227 + d2d1n * clough_raw_shape_second_deriv(9, j, p);
2229 return clough_raw_shape_second_deriv(2, j, p)
2230 + d3d1n * clough_raw_shape_second_deriv(9, j, p)
2231 + d3d2n * clough_raw_shape_second_deriv(10, j, p);
2233 return d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2234 + d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2235 + d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2236 + d1xd3n * clough_raw_shape_second_deriv(11, j, p)
2237 + 0.5 * N01x * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2238 + 0.5 * N02x * d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2240 return d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2241 + d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2242 + d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2243 + d1yd3n * clough_raw_shape_second_deriv(11, j, p)
2244 + 0.5 * N01y * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2245 + 0.5 * N02y * d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2247 return d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2248 + d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2249 + d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2250 + d2xd1n * clough_raw_shape_second_deriv(9, j, p)
2251 + 0.5 * N10x * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2252 + 0.5 * N12x * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2254 return d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2255 + d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2256 + d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2257 + d2yd1n * clough_raw_shape_second_deriv(9, j, p)
2258 + 0.5 * N10y * d3nd3n * clough_raw_shape_second_deriv(11, j, p)
2259 + 0.5 * N12y * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2261 return d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2262 + d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2263 + d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2264 + d3xd2n * clough_raw_shape_second_deriv(10, j, p)
2265 + 0.5 * N20x * d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2266 + 0.5 * N21x * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2268 return d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2269 + d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2270 + d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2271 + d3yd2n * clough_raw_shape_second_deriv(10, j, p)
2272 + 0.5 * N20y * d2nd2n * clough_raw_shape_second_deriv(10, j, p)
2273 + 0.5 * N21y * d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2275 libmesh_error_msg(
"Invalid shape function index i = " << i);
2279 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2290 libmesh_assert_less (i, 12);
2300 return clough_raw_shape_second_deriv(0, j, p)
2301 + d1d2n * clough_raw_shape_second_deriv(10, j, p)
2302 + d1d3n * clough_raw_shape_second_deriv(11, j, p);
2304 return clough_raw_shape_second_deriv(1, j, p)
2305 + d2d3n * clough_raw_shape_second_deriv(11, j, p)
2306 + d2d1n * clough_raw_shape_second_deriv(9, j, p);
2308 return clough_raw_shape_second_deriv(2, j, p)
2309 + d3d1n * clough_raw_shape_second_deriv(9, j, p)
2310 + d3d2n * clough_raw_shape_second_deriv(10, j, p);
2312 return d1xd1x * clough_raw_shape_second_deriv(3, j, p)
2313 + d1xd1y * clough_raw_shape_second_deriv(4, j, p)
2314 + d1xd2n * clough_raw_shape_second_deriv(10, j, p)
2315 + d1xd3n * clough_raw_shape_second_deriv(11, j, p);
2317 return d1yd1y * clough_raw_shape_second_deriv(4, j, p)
2318 + d1yd1x * clough_raw_shape_second_deriv(3, j, p)
2319 + d1yd2n * clough_raw_shape_second_deriv(10, j, p)
2320 + d1yd3n * clough_raw_shape_second_deriv(11, j, p);
2322 return d2xd2x * clough_raw_shape_second_deriv(5, j, p)
2323 + d2xd2y * clough_raw_shape_second_deriv(6, j, p)
2324 + d2xd3n * clough_raw_shape_second_deriv(11, j, p)
2325 + d2xd1n * clough_raw_shape_second_deriv(9, j, p);
2327 return d2yd2y * clough_raw_shape_second_deriv(6, j, p)
2328 + d2yd2x * clough_raw_shape_second_deriv(5, j, p)
2329 + d2yd3n * clough_raw_shape_second_deriv(11, j, p)
2330 + d2yd1n * clough_raw_shape_second_deriv(9, j, p);
2332 return d3xd3x * clough_raw_shape_second_deriv(7, j, p)
2333 + d3xd3y * clough_raw_shape_second_deriv(8, j, p)
2334 + d3xd1n * clough_raw_shape_second_deriv(9, j, p)
2335 + d3xd2n * clough_raw_shape_second_deriv(10, j, p);
2337 return d3yd3y * clough_raw_shape_second_deriv(8, j, p)
2338 + d3yd3x * clough_raw_shape_second_deriv(7, j, p)
2339 + d3yd1n * clough_raw_shape_second_deriv(9, j, p)
2340 + d3yd2n * clough_raw_shape_second_deriv(10, j, p);
2342 return d1nd1n * clough_raw_shape_second_deriv(9, j, p);
2344 return d2nd2n * clough_raw_shape_second_deriv(10, j, p);
2346 return d3nd3n * clough_raw_shape_second_deriv(11, j, p);
2349 libmesh_error_msg(
"Invalid shape function index i = " << i);
2353 libmesh_error_msg(
"ERROR: Unsupported element type = " << type);
2358 libmesh_error_msg(
"ERROR: Unsupported polynomial order = " << order);
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
The base class for all geometric element types.
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
unsigned int p_level() const
virtual unsigned int n_shape_functions() const override
static const dof_id_type invalid_id
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual ElemType type() const =0
A geometric point in (x,y,z) space.
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)