21 #include "libmesh/dof_map.h" 22 #include "libmesh/elem.h" 23 #include "libmesh/enum_to_string.h" 24 #include "libmesh/fe.h" 25 #include "libmesh/fe_interface.h" 26 #include "libmesh/fe_macro.h" 27 #include "libmesh/tensor_value.h" 50 void lagrange_vec_nodal_soln(
const Elem * elem,
52 const std::vector<Number> & elem_soln,
54 std::vector<Number> & nodal_soln,
55 const bool add_p_level)
60 const Order totalorder = order + add_p_level*elem->
p_level();
72 libmesh_assert_equal_to (nodal_soln.size(), 14);
73 nodal_soln[12] = (elem_soln[0] + elem_soln[2] + elem_soln[4])/3.;
74 nodal_soln[13] = (elem_soln[1] + elem_soln[3] + elem_soln[5])/3.;
75 libmesh_fallthrough();
79 libmesh_assert_equal_to (elem_soln.size(), 2*3);
82 nodal_soln[0] = elem_soln[0];
83 nodal_soln[1] = elem_soln[1];
86 nodal_soln[2] = elem_soln[2];
87 nodal_soln[3] = elem_soln[3];
90 nodal_soln[4] = elem_soln[4];
91 nodal_soln[5] = elem_soln[5];
94 nodal_soln[6] = .5*(elem_soln[0] + elem_soln[2]);
95 nodal_soln[7] = .5*(elem_soln[1] + elem_soln[3]);
98 nodal_soln[8] = .5*(elem_soln[2] + elem_soln[4]);
99 nodal_soln[9] = .5*(elem_soln[3] + elem_soln[5]);
102 nodal_soln[10] = .5*(elem_soln[0] + elem_soln[4]);
103 nodal_soln[11] = .5*(elem_soln[1] + elem_soln[5]);
112 libmesh_assert_equal_to (elem_soln.size(), 2*4);
115 libmesh_assert_equal_to (nodal_soln.size(), 2*8);
117 libmesh_assert_equal_to (nodal_soln.size(), 2*9);
120 nodal_soln[0] = elem_soln[0];
121 nodal_soln[1] = elem_soln[1];
124 nodal_soln[2] = elem_soln[2];
125 nodal_soln[3] = elem_soln[3];
128 nodal_soln[4] = elem_soln[4];
129 nodal_soln[5] = elem_soln[5];
132 nodal_soln[6] = elem_soln[6];
133 nodal_soln[7] = elem_soln[7];
136 nodal_soln[8] = .5*(elem_soln[0] + elem_soln[2]);
137 nodal_soln[9] = .5*(elem_soln[1] + elem_soln[3]);
140 nodal_soln[10] = .5*(elem_soln[2] + elem_soln[4]);
141 nodal_soln[11] = .5*(elem_soln[3] + elem_soln[5]);
144 nodal_soln[12] = .5*(elem_soln[4] + elem_soln[6]);
145 nodal_soln[13] = .5*(elem_soln[5] + elem_soln[7]);
148 nodal_soln[14] = .5*(elem_soln[6] + elem_soln[0]);
149 nodal_soln[15] = .5*(elem_soln[7] + elem_soln[1]);
154 nodal_soln[16] = .25*(elem_soln[0] + elem_soln[2] + elem_soln[4] + elem_soln[6]);
155 nodal_soln[17] = .25*(elem_soln[1] + elem_soln[3] + elem_soln[5] + elem_soln[7]);
163 libmesh_assert_equal_to (nodal_soln.size(), 3*14);
166 nodal_soln[30] = 1./3. * (elem_soln[0] + elem_soln[3] + elem_soln[6]);
167 nodal_soln[31] = 1./3. * (elem_soln[1] + elem_soln[4] + elem_soln[7]);
168 nodal_soln[32] = 1./3. * (elem_soln[2] + elem_soln[5] + elem_soln[8]);
171 nodal_soln[33] = 1./3. * (elem_soln[0] + elem_soln[3] + elem_soln[9]);
172 nodal_soln[34] = 1./3. * (elem_soln[1] + elem_soln[4] + elem_soln[10]);
173 nodal_soln[35] = 1./3. * (elem_soln[2] + elem_soln[5] + elem_soln[11]);
176 nodal_soln[36] = 1./3. * (elem_soln[3] + elem_soln[6] + elem_soln[9]);
177 nodal_soln[37] = 1./3. * (elem_soln[4] + elem_soln[7] + elem_soln[10]);
178 nodal_soln[38] = 1./3. * (elem_soln[5] + elem_soln[8] + elem_soln[11]);
181 nodal_soln[39] = 1./3. * (elem_soln[0] + elem_soln[6] + elem_soln[9]);
182 nodal_soln[40] = 1./3. * (elem_soln[1] + elem_soln[7] + elem_soln[10]);
183 nodal_soln[41] = 1./3. * (elem_soln[2] + elem_soln[8] + elem_soln[11]);
185 libmesh_fallthrough();
189 libmesh_assert_equal_to (elem_soln.size(), 3*4);
192 nodal_soln[0] = elem_soln[0];
193 nodal_soln[1] = elem_soln[1];
194 nodal_soln[2] = elem_soln[2];
197 nodal_soln[3] = elem_soln[3];
198 nodal_soln[4] = elem_soln[4];
199 nodal_soln[5] = elem_soln[5];
202 nodal_soln[6] = elem_soln[6];
203 nodal_soln[7] = elem_soln[7];
204 nodal_soln[8] = elem_soln[8];
207 nodal_soln[9] = elem_soln[9];
208 nodal_soln[10] = elem_soln[10];
209 nodal_soln[11] = elem_soln[11];
212 nodal_soln[12] = .5*(elem_soln[0] + elem_soln[3]);
213 nodal_soln[13] = .5*(elem_soln[1] + elem_soln[4]);
214 nodal_soln[14] = .5*(elem_soln[2] + elem_soln[5]);
217 nodal_soln[15] = .5*(elem_soln[3] + elem_soln[6]);
218 nodal_soln[16] = .5*(elem_soln[4] + elem_soln[7]);
219 nodal_soln[17] = .5*(elem_soln[5] + elem_soln[8]);
222 nodal_soln[18] = .5*(elem_soln[6] + elem_soln[0]);
223 nodal_soln[19] = .5*(elem_soln[7] + elem_soln[1]);
224 nodal_soln[20] = .5*(elem_soln[8] + elem_soln[2]);
227 nodal_soln[21] = .5*(elem_soln[9] + elem_soln[0]);
228 nodal_soln[22] = .5*(elem_soln[10] + elem_soln[1]);
229 nodal_soln[23] = .5*(elem_soln[11] + elem_soln[2]);
232 nodal_soln[24] = .5*(elem_soln[9] + elem_soln[3]);
233 nodal_soln[25] = .5*(elem_soln[10] + elem_soln[4]);
234 nodal_soln[26] = .5*(elem_soln[11] + elem_soln[5]);
237 nodal_soln[27] = .5*(elem_soln[9] + elem_soln[6]);
238 nodal_soln[28] = .5*(elem_soln[10] + elem_soln[7]);
239 nodal_soln[29] = .5*(elem_soln[11] + elem_soln[8]);
248 libmesh_assert_equal_to (elem_soln.size(), 3*8);
251 libmesh_assert_equal_to (nodal_soln.size(), 3*20);
253 libmesh_assert_equal_to (nodal_soln.size(), 3*27);
256 nodal_soln[0] = elem_soln[0];
257 nodal_soln[1] = elem_soln[1];
258 nodal_soln[2] = elem_soln[2];
261 nodal_soln[3] = elem_soln[3];
262 nodal_soln[4] = elem_soln[4];
263 nodal_soln[5] = elem_soln[5];
266 nodal_soln[6] = elem_soln[6];
267 nodal_soln[7] = elem_soln[7];
268 nodal_soln[8] = elem_soln[8];
271 nodal_soln[9] = elem_soln[9];
272 nodal_soln[10] = elem_soln[10];
273 nodal_soln[11] = elem_soln[11];
276 nodal_soln[12] = elem_soln[12];
277 nodal_soln[13] = elem_soln[13];
278 nodal_soln[14] = elem_soln[14];
281 nodal_soln[15] = elem_soln[15];
282 nodal_soln[16] = elem_soln[16];
283 nodal_soln[17] = elem_soln[17];
286 nodal_soln[18] = elem_soln[18];
287 nodal_soln[19] = elem_soln[19];
288 nodal_soln[20] = elem_soln[20];
291 nodal_soln[21] = elem_soln[21];
292 nodal_soln[22] = elem_soln[22];
293 nodal_soln[23] = elem_soln[23];
296 nodal_soln[24] = .5*(elem_soln[0] + elem_soln[3]);
297 nodal_soln[25] = .5*(elem_soln[1] + elem_soln[4]);
298 nodal_soln[26] = .5*(elem_soln[2] + elem_soln[5]);
301 nodal_soln[27] = .5*(elem_soln[3] + elem_soln[6]);
302 nodal_soln[28] = .5*(elem_soln[4] + elem_soln[7]);
303 nodal_soln[29] = .5*(elem_soln[5] + elem_soln[8]);
306 nodal_soln[30] = .5*(elem_soln[6] + elem_soln[9]);
307 nodal_soln[31] = .5*(elem_soln[7] + elem_soln[10]);
308 nodal_soln[32] = .5*(elem_soln[8] + elem_soln[11]);
311 nodal_soln[33] = .5*(elem_soln[9] + elem_soln[0]);
312 nodal_soln[34] = .5*(elem_soln[10] + elem_soln[1]);
313 nodal_soln[35] = .5*(elem_soln[11] + elem_soln[2]);
316 nodal_soln[36] = .5*(elem_soln[0] + elem_soln[12]);
317 nodal_soln[37] = .5*(elem_soln[1] + elem_soln[13]);
318 nodal_soln[38] = .5*(elem_soln[2] + elem_soln[14]);
321 nodal_soln[39] = .5*(elem_soln[3] + elem_soln[15]);
322 nodal_soln[40] = .5*(elem_soln[4] + elem_soln[16]);
323 nodal_soln[41] = .5*(elem_soln[5] + elem_soln[17]);
326 nodal_soln[42] = .5*(elem_soln[6] + elem_soln[18]);
327 nodal_soln[43] = .5*(elem_soln[7] + elem_soln[19]);
328 nodal_soln[44] = .5*(elem_soln[8] + elem_soln[20]);
331 nodal_soln[45] = .5*(elem_soln[9] + elem_soln[21]);
332 nodal_soln[46] = .5*(elem_soln[10] + elem_soln[22]);
333 nodal_soln[47] = .5*(elem_soln[11] + elem_soln[23]);
336 nodal_soln[48] = .5*(elem_soln[12] + elem_soln[15]);
337 nodal_soln[49] = .5*(elem_soln[13] + elem_soln[16]);
338 nodal_soln[50] = .5*(elem_soln[14] + elem_soln[17]);
341 nodal_soln[51] = .5*(elem_soln[15] + elem_soln[18]);
342 nodal_soln[52] = .5*(elem_soln[16] + elem_soln[19]);
343 nodal_soln[53] = .5*(elem_soln[17] + elem_soln[20]);
346 nodal_soln[54] = .5*(elem_soln[18] + elem_soln[21]);
347 nodal_soln[55] = .5*(elem_soln[19] + elem_soln[22]);
348 nodal_soln[56] = .5*(elem_soln[20] + elem_soln[23]);
351 nodal_soln[57] = .5*(elem_soln[12] + elem_soln[21]);
352 nodal_soln[58] = .5*(elem_soln[13] + elem_soln[22]);
353 nodal_soln[59] = .5*(elem_soln[14] + elem_soln[23]);
358 nodal_soln[60] = .25*(elem_soln[0] + elem_soln[3] + elem_soln[6] + elem_soln[9]);
359 nodal_soln[61] = .25*(elem_soln[1] + elem_soln[4] + elem_soln[7] + elem_soln[10]);
360 nodal_soln[62] = .25*(elem_soln[2] + elem_soln[5] + elem_soln[8] + elem_soln[11]);
363 nodal_soln[63] = .25*(elem_soln[0] + elem_soln[3] + elem_soln[12] + elem_soln[15]);
364 nodal_soln[64] = .25*(elem_soln[1] + elem_soln[4] + elem_soln[13] + elem_soln[16]);
365 nodal_soln[65] = .25*(elem_soln[2] + elem_soln[5] + elem_soln[14] + elem_soln[17]);
368 nodal_soln[66] = .25*(elem_soln[3] + elem_soln[6] + elem_soln[15] + elem_soln[18]);
369 nodal_soln[67] = .25*(elem_soln[4] + elem_soln[7] + elem_soln[16] + elem_soln[19]);
370 nodal_soln[68] = .25*(elem_soln[5] + elem_soln[8] + elem_soln[17] + elem_soln[20]);
373 nodal_soln[69] = .25*(elem_soln[6] + elem_soln[9] + elem_soln[18] + elem_soln[21]);
374 nodal_soln[70] = .25*(elem_soln[7] + elem_soln[10] + elem_soln[19] + elem_soln[22]);
375 nodal_soln[71] = .25*(elem_soln[8] + elem_soln[11] + elem_soln[20] + elem_soln[23]);
378 nodal_soln[72] = .25*(elem_soln[9] + elem_soln[0] + elem_soln[21] + elem_soln[12]);
379 nodal_soln[73] = .25*(elem_soln[10] + elem_soln[1] + elem_soln[22] + elem_soln[13]);
380 nodal_soln[74] = .25*(elem_soln[11] + elem_soln[2] + elem_soln[23] + elem_soln[14]);
383 nodal_soln[75] = .25*(elem_soln[12] + elem_soln[15] + elem_soln[18] + elem_soln[21]);
384 nodal_soln[76] = .25*(elem_soln[13] + elem_soln[16] + elem_soln[19] + elem_soln[22]);
385 nodal_soln[77] = .25*(elem_soln[14] + elem_soln[17] + elem_soln[20] + elem_soln[23]);
388 nodal_soln[78] = .125*(elem_soln[0] + elem_soln[3] + elem_soln[6] + elem_soln[9] +
389 elem_soln[12] + elem_soln[15] + elem_soln[18] + elem_soln[21]);
391 nodal_soln[79] = .125*(elem_soln[1] + elem_soln[4] + elem_soln[7] + elem_soln[10] +
392 elem_soln[13] + elem_soln[16] + elem_soln[19] + elem_soln[22]);
394 nodal_soln[80] = .125*(elem_soln[2] + elem_soln[5] + elem_soln[8] + elem_soln[11] +
395 elem_soln[14] + elem_soln[17] + elem_soln[20] + elem_soln[23]);
403 libmesh_assert_equal_to (nodal_soln.size(), 3*21);
406 nodal_soln[60] = (elem_soln[27] + elem_soln[30] + elem_soln[33])/
Real(3);
407 nodal_soln[61] = (elem_soln[28] + elem_soln[31] + elem_soln[34])/
Real(3);
408 nodal_soln[62] = (elem_soln[29] + elem_soln[32] + elem_soln[35])/
Real(3);
409 libmesh_fallthrough();
412 libmesh_assert_equal_to (nodal_soln.size(), 3*20);
415 nodal_soln[54] = (elem_soln[0] + elem_soln[3] + elem_soln[6])/
Real(3);
416 nodal_soln[55] = (elem_soln[1] + elem_soln[4] + elem_soln[7])/
Real(3);
417 nodal_soln[56] = (elem_soln[2] + elem_soln[5] + elem_soln[8])/
Real(3);
420 nodal_soln[57] = (elem_soln[9] + elem_soln[12] + elem_soln[15])/
Real(3);
421 nodal_soln[58] = (elem_soln[10] + elem_soln[13] + elem_soln[16])/
Real(3);
422 nodal_soln[59] = (elem_soln[11] + elem_soln[14] + elem_soln[17])/
Real(3);
424 libmesh_fallthrough();
427 libmesh_assert_equal_to (nodal_soln.size(), 3*18);
430 nodal_soln[45] = .25*(elem_soln[0] + elem_soln[3] + elem_soln[12] + elem_soln[9]);
431 nodal_soln[46] = .25*(elem_soln[1] + elem_soln[4] + elem_soln[13] + elem_soln[10]);
432 nodal_soln[47] = .25*(elem_soln[2] + elem_soln[5] + elem_soln[14] + elem_soln[11]);
435 nodal_soln[48] = .25*(elem_soln[3] + elem_soln[6] + elem_soln[15] + elem_soln[12]);
436 nodal_soln[49] = .25*(elem_soln[4] + elem_soln[7] + elem_soln[16] + elem_soln[13]);
437 nodal_soln[50] = .25*(elem_soln[5] + elem_soln[8] + elem_soln[17] + elem_soln[14]);
440 nodal_soln[51] = .25*(elem_soln[6] + elem_soln[0] + elem_soln[9] + elem_soln[15]);
441 nodal_soln[52] = .25*(elem_soln[7] + elem_soln[1] + elem_soln[10] + elem_soln[16]);
442 nodal_soln[53] = .25*(elem_soln[8] + elem_soln[2] + elem_soln[11] + elem_soln[17]);
444 libmesh_fallthrough();
447 libmesh_assert_equal_to (elem_soln.size(), 3*6);
450 libmesh_assert_equal_to (nodal_soln.size(), 3*15);
453 nodal_soln[0] = elem_soln[0];
454 nodal_soln[1] = elem_soln[1];
455 nodal_soln[2] = elem_soln[2];
458 nodal_soln[3] = elem_soln[3];
459 nodal_soln[4] = elem_soln[4];
460 nodal_soln[5] = elem_soln[5];
463 nodal_soln[6] = elem_soln[6];
464 nodal_soln[7] = elem_soln[7];
465 nodal_soln[8] = elem_soln[8];
468 nodal_soln[9] = elem_soln[9];
469 nodal_soln[10] = elem_soln[10];
470 nodal_soln[11] = elem_soln[11];
473 nodal_soln[12] = elem_soln[12];
474 nodal_soln[13] = elem_soln[13];
475 nodal_soln[14] = elem_soln[14];
478 nodal_soln[15] = elem_soln[15];
479 nodal_soln[16] = elem_soln[16];
480 nodal_soln[17] = elem_soln[17];
483 nodal_soln[18] = .5*(elem_soln[0] + elem_soln[3]);
484 nodal_soln[19] = .5*(elem_soln[1] + elem_soln[4]);
485 nodal_soln[20] = .5*(elem_soln[2] + elem_soln[5]);
488 nodal_soln[21] = .5*(elem_soln[3] + elem_soln[6]);
489 nodal_soln[22] = .5*(elem_soln[4] + elem_soln[7]);
490 nodal_soln[23] = .5*(elem_soln[5] + elem_soln[8]);
493 nodal_soln[24] = .5*(elem_soln[0] + elem_soln[6]);
494 nodal_soln[25] = .5*(elem_soln[1] + elem_soln[7]);
495 nodal_soln[26] = .5*(elem_soln[2] + elem_soln[8]);
498 nodal_soln[27] = .5*(elem_soln[0] + elem_soln[9]);
499 nodal_soln[28] = .5*(elem_soln[1] + elem_soln[10]);
500 nodal_soln[29] = .5*(elem_soln[2] + elem_soln[11]);
503 nodal_soln[30] = .5*(elem_soln[3] + elem_soln[12]);
504 nodal_soln[31] = .5*(elem_soln[4] + elem_soln[13]);
505 nodal_soln[32] = .5*(elem_soln[5] + elem_soln[14]);
508 nodal_soln[33] = .5*(elem_soln[6] + elem_soln[15]);
509 nodal_soln[34] = .5*(elem_soln[7] + elem_soln[16]);
510 nodal_soln[35] = .5*(elem_soln[8] + elem_soln[17]);
513 nodal_soln[36] = .5*(elem_soln[9] + elem_soln[12]);
514 nodal_soln[37] = .5*(elem_soln[10] + elem_soln[13]);
515 nodal_soln[38] = .5*(elem_soln[11] + elem_soln[14]);
518 nodal_soln[39] = .5*(elem_soln[12] + elem_soln[15]);
519 nodal_soln[40] = .5*(elem_soln[13] + elem_soln[16]);
520 nodal_soln[41] = .5*(elem_soln[14] + elem_soln[17]);
523 nodal_soln[42] = .5*(elem_soln[12] + elem_soln[15]);
524 nodal_soln[43] = .5*(elem_soln[13] + elem_soln[16]);
525 nodal_soln[44] = .5*(elem_soln[14] + elem_soln[17]);
534 nodal_soln = elem_soln;
547 libmesh_assert_equal_to (elem_soln.size(), 12);
548 libmesh_assert_equal_to (nodal_soln.size(), 14);
550 for (
int i=0; i != 12; ++i)
551 nodal_soln[i] = elem_soln[i];
553 nodal_soln[12] = -1./9. * (elem_soln[0] + elem_soln[2] + elem_soln[4])
554 +4./9. * (elem_soln[6] + elem_soln[8] + elem_soln[10]);
555 nodal_soln[13] = -1./9. * (elem_soln[1] + elem_soln[3] + elem_soln[5])
556 +4./9. * (elem_soln[7] + elem_soln[9] + elem_soln[11]);
563 libmesh_assert_equal_to (elem_soln.size(), 10*3);
564 libmesh_assert_equal_to (nodal_soln.size(), 14*3);
566 for (
int i=0; i != 10*3; ++i)
567 nodal_soln[i] = elem_soln[i];
570 nodal_soln[30] = -1./9. * (elem_soln[0] + elem_soln[3] + elem_soln[6])
571 +4./9. * (elem_soln[12] + elem_soln[15] + elem_soln[18]);
572 nodal_soln[31] = -1./9. * (elem_soln[1] + elem_soln[4] + elem_soln[7])
573 +4./9. * (elem_soln[13] + elem_soln[16] + elem_soln[19]);
574 nodal_soln[32] = -1./9. * (elem_soln[2] + elem_soln[5] + elem_soln[8])
575 +4./9. * (elem_soln[14] + elem_soln[17] + elem_soln[20]);
578 nodal_soln[33] = -1./9. * (elem_soln[0] + elem_soln[3] + elem_soln[9])
579 +4./9. * (elem_soln[12] + elem_soln[21] + elem_soln[24]);
580 nodal_soln[34] = -1./9. * (elem_soln[1] + elem_soln[4] + elem_soln[10])
581 +4./9. * (elem_soln[13] + elem_soln[22] + elem_soln[25]);
582 nodal_soln[35] = -1./9. * (elem_soln[2] + elem_soln[5] + elem_soln[11])
583 +4./9. * (elem_soln[14] + elem_soln[23] + elem_soln[26]);
586 nodal_soln[36] = -1./9. * (elem_soln[3] + elem_soln[6] + elem_soln[9])
587 +4./9. * (elem_soln[15] + elem_soln[24] + elem_soln[27]);
588 nodal_soln[37] = -1./9. * (elem_soln[4] + elem_soln[7] + elem_soln[10])
589 +4./9. * (elem_soln[16] + elem_soln[25] + elem_soln[28]);
590 nodal_soln[38] = -1./9. * (elem_soln[5] + elem_soln[8] + elem_soln[11])
591 +4./9. * (elem_soln[17] + elem_soln[26] + elem_soln[29]);
594 nodal_soln[39] = -1./9. * (elem_soln[0] + elem_soln[6] + elem_soln[9])
595 +4./9. * (elem_soln[12] + elem_soln[21] + elem_soln[27]);
596 nodal_soln[40] = -1./9. * (elem_soln[1] + elem_soln[7] + elem_soln[10])
597 +4./9. * (elem_soln[13] + elem_soln[22] + elem_soln[28]);
598 nodal_soln[41] = -1./9. * (elem_soln[2] + elem_soln[8] + elem_soln[11])
599 +4./9. * (elem_soln[14] + elem_soln[23] + elem_soln[29]);
608 nodal_soln = elem_soln;
619 nodal_soln = elem_soln;
625 libmesh_error_msg(
"ERROR: Invalid Order " <<
Utility::enum_to_string(totalorder) <<
" selected for LAGRANGE FE family!");
644 const
bool add_p_level,
646 { lagrange_vec_nodal_soln(elem, order, elem_soln, 2 , nodal_soln, add_p_level); }
651 const std::vector<Number> & elem_soln,
652 std::vector<Number> & nodal_soln,
653 const bool add_p_level,
655 { lagrange_vec_nodal_soln(elem, order, elem_soln, 3 , nodal_soln, add_p_level); }
671 const
unsigned int i, const
Point & p)
677 const unsigned int i,
const unsigned int j,
684 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 687 const unsigned int i,
const unsigned int j,
696 const unsigned int i,
const Point & p)
701 const unsigned int i,
const unsigned int j,
707 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 710 const unsigned int i,
const unsigned int j,
719 const unsigned int i,
const Point & p)
725 const unsigned int i,
const unsigned int j,
731 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 733 const unsigned int i,
const unsigned int j,
743 const unsigned int i,
const Point & p)
748 const unsigned int i,
const unsigned int j,
754 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 757 const unsigned int i,
const unsigned int j,
766 const unsigned int i,
const Point & p)
779 libmesh_error_msg(
"i%2 must be either 0 or 1!");
786 const unsigned int i,
const unsigned int j,
800 libmesh_error_msg(
"i%2 must be either 0 or 1!");
807 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 809 const unsigned int i,
const unsigned int j,
823 libmesh_error_msg(
"i%2 must be either 0 or 1!");
833 const unsigned int i,
const Point & p)
839 const unsigned int i,
const unsigned int j,
845 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 847 const unsigned int i,
const unsigned int j,
857 const unsigned int i,
const Point & p)
873 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
880 const unsigned int i,
const unsigned int j,
897 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
904 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 907 const unsigned int i,
const unsigned int j,
924 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
934 const unsigned int i,
const Point & p)
940 const unsigned int i,
const unsigned int j,
946 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 948 const unsigned int i,
const unsigned int j,
959 const unsigned int i,
const Point & p,
960 const bool add_p_level)
966 const unsigned int i,
const unsigned int j,
968 const bool add_p_level)
974 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 977 const unsigned int i,
const unsigned int j,
979 const bool add_p_level)
988 const unsigned int i,
const Point & p,
989 const bool add_p_level)
994 const unsigned int i,
const unsigned int j,
996 const bool add_p_level)
1001 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1004 const unsigned int i,
const unsigned int j,
1006 const bool add_p_level)
1015 const unsigned int i,
const Point & p,
1016 const bool add_p_level)
1022 const unsigned int i,
const unsigned int j,
1024 const bool add_p_level)
1030 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1032 const unsigned int i,
const unsigned int j,
1034 const bool add_p_level)
1043 const unsigned int i,
const Point & p,
1044 const bool add_p_level)
1049 const unsigned int i,
const unsigned int j,
1051 const bool add_p_level)
1056 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1059 const unsigned int i,
const unsigned int j,
1061 const bool add_p_level)
1070 const unsigned int i,
const Point & p,
1071 const bool add_p_level)
1084 libmesh_error_msg(
"i%2 must be either 0 or 1!");
1091 const unsigned int i,
const unsigned int j,
1093 const bool add_p_level)
1106 libmesh_error_msg(
"i%2 must be either 0 or 1!");
1113 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1115 const unsigned int i,
const unsigned int j,
1117 const bool add_p_level)
1130 libmesh_error_msg(
"i%2 must be either 0 or 1!");
1140 const unsigned int i,
const Point & p,
1141 const bool add_p_level)
1146 const unsigned int i,
const unsigned int j,
1148 const bool add_p_level)
1153 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1156 const unsigned int i,
const unsigned int j,
1158 const bool add_p_level)
1167 const unsigned int i,
const Point & p,
1168 const bool add_p_level)
1184 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
1191 const unsigned int i,
const unsigned int j,
1193 const bool add_p_level)
1209 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
1216 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1219 const unsigned int i,
const unsigned int j,
1221 const bool add_p_level)
1237 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
1247 const unsigned int i,
const Point & p,
1248 const bool add_p_level)
1253 const unsigned int i,
const unsigned int j,
1255 const bool add_p_level)
1260 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES 1263 const unsigned int i,
const unsigned int j,
1265 const bool add_p_level)
1377 #ifdef LIBMESH_ENABLE_AMR 1381 const unsigned int variable_number,
1390 const unsigned int variable_number,
1399 const unsigned int variable_number,
1408 const unsigned int variable_number,
1413 #endif // LIBMESH_ENABLE_AMR
static unsigned int n_dofs(const ElemType t, const Order o)
ElemType
Defines an enum for geometric element types.
RealVectorValue RealGradient
Order
defines an enum for polynomial orders.
LIBMESH_FE_NODAL_SOLN_DIM(LIBMESH_FE_NODAL_SOLN_DIM(HIERARCHIC_VEC,(FE< 0, HIERARCHIC >::nodal_soln), 0)
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
This is the base class from which all geometric element types are derived.
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
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 bool shapes_need_reinit() const override
The libMesh namespace provides an interface to certain functionality in the library.
virtual bool is_hierarchic() const override
This class handles the numbering of degrees of freedom on a mesh.
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
A specific instantiation of the FEBase class.
LIBMESH_FE_SIDE_NODAL_SOLN(HIERARCHIC_VEC)
const dof_id_type n_nodes
virtual unsigned int n_nodes() const =0
static void compute_proj_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
static unsigned int n_dofs_per_elem(const ElemType t, const Order o)
virtual FEContinuity get_continuity() const override
std::string enum_to_string(const T e)
static void compute_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.
The constraint matrix storage format.
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)