21 #include "libmesh/dof_map.h" 
   22 #include "libmesh/fe.h" 
   23 #include "libmesh/fe_interface.h" 
   24 #include "libmesh/elem.h" 
   25 #include "libmesh/enum_to_string.h" 
   36 void l2_lagrange_nodal_soln(
const Elem * elem,
 
   38                             const std::vector<Number> & elem_soln,
 
   39                             std::vector<Number> &       nodal_soln)
 
   41   const unsigned int n_nodes = elem->n_nodes();
 
   44   const Order totalorder = static_cast<Order>(order+elem->p_level());
 
   59               libmesh_assert_equal_to (elem_soln.size(), 2);
 
   60               libmesh_assert_equal_to (nodal_soln.size(), 3);
 
   62               nodal_soln[0] = elem_soln[0];
 
   63               nodal_soln[1] = elem_soln[1];
 
   64               nodal_soln[2] = .5*(elem_soln[0] + elem_soln[1]);
 
   71               libmesh_assert_equal_to (elem_soln.size(), 2);
 
   72               libmesh_assert_equal_to (nodal_soln.size(), 4);
 
   74               nodal_soln[0] = elem_soln[0];
 
   75               nodal_soln[1] = elem_soln[1];
 
   76               nodal_soln[2] = (2.*elem_soln[0] + elem_soln[1])/3.;
 
   77               nodal_soln[3] = (elem_soln[0] + 2.*elem_soln[1])/3.;
 
   85               libmesh_assert_equal_to (elem_soln.size(), 3);
 
   86               libmesh_assert_equal_to (nodal_soln.size(), 6);
 
   88               nodal_soln[0] = elem_soln[0];
 
   89               nodal_soln[1] = elem_soln[1];
 
   90               nodal_soln[2] = elem_soln[2];
 
   91               nodal_soln[3] = .5*(elem_soln[0] + elem_soln[1]);
 
   92               nodal_soln[4] = .5*(elem_soln[1] + elem_soln[2]);
 
   93               nodal_soln[5] = .5*(elem_soln[2] + elem_soln[0]);
 
  102               libmesh_assert_equal_to (elem_soln.size(), 4);
 
  105                 libmesh_assert_equal_to (nodal_soln.size(), 8);
 
  107                 libmesh_assert_equal_to (nodal_soln.size(), 9);
 
  110               nodal_soln[0] = elem_soln[0];
 
  111               nodal_soln[1] = elem_soln[1];
 
  112               nodal_soln[2] = elem_soln[2];
 
  113               nodal_soln[3] = elem_soln[3];
 
  114               nodal_soln[4] = .5*(elem_soln[0] + elem_soln[1]);
 
  115               nodal_soln[5] = .5*(elem_soln[1] + elem_soln[2]);
 
  116               nodal_soln[6] = .5*(elem_soln[2] + elem_soln[3]);
 
  117               nodal_soln[7] = .5*(elem_soln[3] + elem_soln[0]);
 
  120                 nodal_soln[8] = .25*(elem_soln[0] + elem_soln[1] + elem_soln[2] + elem_soln[3]);
 
  128               libmesh_assert_equal_to (elem_soln.size(), 4);
 
  129               libmesh_assert_equal_to (nodal_soln.size(), 10);
 
  131               nodal_soln[0] = elem_soln[0];
 
  132               nodal_soln[1] = elem_soln[1];
 
  133               nodal_soln[2] = elem_soln[2];
 
  134               nodal_soln[3] = elem_soln[3];
 
  135               nodal_soln[4] = .5*(elem_soln[0] + elem_soln[1]);
 
  136               nodal_soln[5] = .5*(elem_soln[1] + elem_soln[2]);
 
  137               nodal_soln[6] = .5*(elem_soln[2] + elem_soln[0]);
 
  138               nodal_soln[7] = .5*(elem_soln[3] + elem_soln[0]);
 
  139               nodal_soln[8] = .5*(elem_soln[3] + elem_soln[1]);
 
  140               nodal_soln[9] = .5*(elem_soln[3] + elem_soln[2]);
 
  149               libmesh_assert_equal_to (elem_soln.size(), 8);
 
  152                 libmesh_assert_equal_to (nodal_soln.size(), 20);
 
  154                 libmesh_assert_equal_to (nodal_soln.size(), 27);
 
  156               nodal_soln[0]  = elem_soln[0];
 
  157               nodal_soln[1]  = elem_soln[1];
 
  158               nodal_soln[2]  = elem_soln[2];
 
  159               nodal_soln[3]  = elem_soln[3];
 
  160               nodal_soln[4]  = elem_soln[4];
 
  161               nodal_soln[5]  = elem_soln[5];
 
  162               nodal_soln[6]  = elem_soln[6];
 
  163               nodal_soln[7]  = elem_soln[7];
 
  164               nodal_soln[8]  = .5*(elem_soln[0] + elem_soln[1]);
 
  165               nodal_soln[9]  = .5*(elem_soln[1] + elem_soln[2]);
 
  166               nodal_soln[10] = .5*(elem_soln[2] + elem_soln[3]);
 
  167               nodal_soln[11] = .5*(elem_soln[3] + elem_soln[0]);
 
  168               nodal_soln[12] = .5*(elem_soln[0] + elem_soln[4]);
 
  169               nodal_soln[13] = .5*(elem_soln[1] + elem_soln[5]);
 
  170               nodal_soln[14] = .5*(elem_soln[2] + elem_soln[6]);
 
  171               nodal_soln[15] = .5*(elem_soln[3] + elem_soln[7]);
 
  172               nodal_soln[16] = .5*(elem_soln[4] + elem_soln[5]);
 
  173               nodal_soln[17] = .5*(elem_soln[5] + elem_soln[6]);
 
  174               nodal_soln[18] = .5*(elem_soln[6] + elem_soln[7]);
 
  175               nodal_soln[19] = .5*(elem_soln[4] + elem_soln[7]);
 
  179                   nodal_soln[20] = .25*(elem_soln[0] + elem_soln[1] + elem_soln[2] + elem_soln[3]);
 
  180                   nodal_soln[21] = .25*(elem_soln[0] + elem_soln[1] + elem_soln[4] + elem_soln[5]);
 
  181                   nodal_soln[22] = .25*(elem_soln[1] + elem_soln[2] + elem_soln[5] + elem_soln[6]);
 
  182                   nodal_soln[23] = .25*(elem_soln[2] + elem_soln[3] + elem_soln[6] + elem_soln[7]);
 
  183                   nodal_soln[24] = .25*(elem_soln[3] + elem_soln[0] + elem_soln[7] + elem_soln[4]);
 
  184                   nodal_soln[25] = .25*(elem_soln[4] + elem_soln[5] + elem_soln[6] + elem_soln[7]);
 
  186                   nodal_soln[26] = .125*(elem_soln[0] + elem_soln[1] + elem_soln[2] + elem_soln[3] +
 
  187                                          elem_soln[4] + elem_soln[5] + elem_soln[6] + elem_soln[7]);
 
  197               libmesh_assert_equal_to (elem_soln.size(), 6);
 
  200                 libmesh_assert_equal_to (nodal_soln.size(), 15);
 
  202                 libmesh_assert_equal_to (nodal_soln.size(), 18);
 
  204               nodal_soln[0]  = elem_soln[0];
 
  205               nodal_soln[1]  = elem_soln[1];
 
  206               nodal_soln[2]  = elem_soln[2];
 
  207               nodal_soln[3]  = elem_soln[3];
 
  208               nodal_soln[4]  = elem_soln[4];
 
  209               nodal_soln[5]  = elem_soln[5];
 
  210               nodal_soln[6]  = .5*(elem_soln[0] + elem_soln[1]);
 
  211               nodal_soln[7]  = .5*(elem_soln[1] + elem_soln[2]);
 
  212               nodal_soln[8]  = .5*(elem_soln[0] + elem_soln[2]);
 
  213               nodal_soln[9]  = .5*(elem_soln[0] + elem_soln[3]);
 
  214               nodal_soln[10] = .5*(elem_soln[1] + elem_soln[4]);
 
  215               nodal_soln[11] = .5*(elem_soln[2] + elem_soln[5]);
 
  216               nodal_soln[12] = .5*(elem_soln[3] + elem_soln[4]);
 
  217               nodal_soln[13] = .5*(elem_soln[4] + elem_soln[5]);
 
  218               nodal_soln[14] = .5*(elem_soln[3] + elem_soln[5]);
 
  222                   nodal_soln[15] = .25*(elem_soln[0] + elem_soln[1] + elem_soln[4] + elem_soln[3]);
 
  223                   nodal_soln[16] = .25*(elem_soln[1] + elem_soln[2] + elem_soln[5] + elem_soln[4]);
 
  224                   nodal_soln[17] = .25*(elem_soln[2] + elem_soln[0] + elem_soln[3] + elem_soln[5]);
 
  236               nodal_soln = elem_soln;
 
  249               libmesh_assert_equal_to (elem_soln.size(), 3);
 
  250               libmesh_assert_equal_to (nodal_soln.size(), 4);
 
  253               nodal_soln[0] = elem_soln[0];
 
  254               nodal_soln[1] = elem_soln[1];
 
  255               nodal_soln[2] = (2.*elem_soln[0] - elem_soln[1] +
 
  257               nodal_soln[3] = (-elem_soln[0] + 2.*elem_soln[1] +
 
  266               nodal_soln = elem_soln;
 
  280         nodal_soln = elem_soln;
 
  290 unsigned int l2_lagrange_n_dofs(
const ElemType t, 
const Order o)
 
  417       libmesh_error_msg(
"ERROR: Invalid Order " << 
Utility::enum_to_string(o) << 
" selected for L2_LAGRANGE FE family!");
 
  430                                    const std::vector<Number> & elem_soln,
 
  431                                    std::vector<Number> & nodal_soln)
 
  432 { l2_lagrange_nodal_soln(elem, order, elem_soln, nodal_soln); }
 
  437                                    const std::vector<Number> & elem_soln,
 
  438                                    std::vector<Number> & nodal_soln)
 
  439 { l2_lagrange_nodal_soln(elem, order, elem_soln, nodal_soln); }
 
  444                                    const std::vector<Number> & elem_soln,
 
  445                                    std::vector<Number> & nodal_soln)
 
  446 { l2_lagrange_nodal_soln(elem, order, elem_soln, nodal_soln); }
 
  451                                    const std::vector<Number> & elem_soln,
 
  452                                    std::vector<Number> & nodal_soln)
 
  453 { l2_lagrange_nodal_soln(elem, order, elem_soln, nodal_soln); }
 
  498 #ifdef LIBMESH_ENABLE_AMR 
  512 #endif // LIBMESH_ENABLE_AMR