26 #include "libmesh/libmesh_common.h" 
   27 #include "libmesh/fe.h" 
   28 #include "libmesh/quadrature.h" 
   29 #include "libmesh/elem.h" 
   30 #include "libmesh/libmesh_logging.h" 
   44                       const std::vector<Point> * 
const,
 
   45                       const std::vector<Real> * 
const)
 
   47   libmesh_error_msg(
"ERROR: This method only makes sense for 2D/3D elements!");
 
   57                       const std::vector<Point> * 
const,
 
   58                       const std::vector<Real> * 
const)
 
   60   libmesh_error_msg(
"ERROR: This method only makes sense for 2D/3D elements!");
 
   66 template <
unsigned int Dim>
 
   70                         const std::vector<Point> * 
const pts,
 
   71                         const std::vector<Real> * 
const weights)
 
   76   libmesh_assert_not_equal_to (Dim, 1);
 
   87       this->shapes_on_quadrature = 
false;
 
   90       this->elem_type = elem->
type();
 
   93       this->_fe_map->template init_face_shape_functions<Dim>(*pts,  side.get());
 
   94       if (weights != 
nullptr)
 
   96           this->compute_face_values (elem, side.get(), *weights);
 
  100           std::vector<Real> dummy_weights (pts->size(), 1.);
 
  102           this->compute_face_values (elem, side.get(), dummy_weights);
 
  108       this->qrule->init(side->type(), elem->
p_level());
 
  112         this->elem_type = elem->
type();
 
  115         this->_fe_map->template init_face_shape_functions<Dim>(this->qrule->get_points(),  side.get());
 
  119       this->shapes_on_quadrature = 
false;
 
  121       this->compute_face_values (elem, side.get(), this->qrule->get_weights());
 
  127 template <
unsigned int Dim>
 
  130                                      const std::vector<Real> & qw)
 
  135   LOG_SCOPE(
"compute_face_values()", 
"FEXYZ");
 
  138   const std::size_t n_qp = qw.size();
 
  142   const unsigned int n_approx_shape_functions =
 
  143     this->n_shape_functions(this->get_type(),
 
  147   this->phi.resize    (n_approx_shape_functions);
 
  148   this->dphi.resize   (n_approx_shape_functions);
 
  149   this->dphidx.resize (n_approx_shape_functions);
 
  150   this->dphidy.resize (n_approx_shape_functions);
 
  151   this->dphidz.resize (n_approx_shape_functions);
 
  153   for (
unsigned int i=0; i<n_approx_shape_functions; i++)
 
  155       this->phi[i].resize    (n_qp);
 
  156       this->dphi[i].resize   (n_qp);
 
  157       this->dphidx[i].resize (n_qp);
 
  158       this->dphidy[i].resize (n_qp);
 
  159       this->dphidz[i].resize (n_qp);
 
  162   this->_fe_map->compute_face_map(this->
dim, qw, side);
 
  164   const std::vector<libMesh::Point> & xyz = this->_fe_map->get_xyz();
 
  174         for (
unsigned int i=0; i<n_approx_shape_functions; i++)
 
  175           for (std::size_t p=0; p<n_qp; p++)
 
  179               this->dphi[i][p](0) =
 
  182               this->dphi[i][p](1) =
 
  186               this->dphi[i][p](2) = 
 
  188                 this->dphidz[i][p] = 0.;
 
  199         for (
unsigned int i=0; i<n_approx_shape_functions; i++)
 
  200           for (std::size_t p=0; p<n_qp; p++)
 
  204               this->dphi[i][p](0) =
 
  207               this->dphi[i][p](1) =
 
  210               this->dphi[i][p](2) =
 
  219       libmesh_error_msg(
"Invalid dim " << this->
dim);