50void 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!");