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)