Add high-order operators to the pipeline for 2D face elements. 
  780                                               {
  782 
  783  if (!jac_ptr)
  784    jac_ptr = boost::make_shared<MatrixDouble>();
  785  if (!det_ptr)
  786    det_ptr = boost::make_shared<VectorDouble>();
  787  if (!inv_jac_ptr)
  788    inv_jac_ptr = boost::make_shared<MatrixDouble>();
  789 
  790  if (geom_field_name.empty()) {
  791 
  792    pipeline.push_back(new OpCalculateHOJac<2>(jac_ptr));
  793 
  794  } else {
  795 
  796    pipeline.push_back(new OpCalculateHOCoords<2>(geom_field_name));
  797    pipeline.push_back(
  798        new OpCalculateVectorFieldGradient<2, 2>(geom_field_name, jac_ptr));
  799    pipeline.push_back(new OpGetHONormalsOnFace<2>(geom_field_name));
  800  }
  801 
  802  pipeline.push_back(new OpInvertMatrix<2>(jac_ptr, det_ptr, inv_jac_ptr));
  803  pipeline.push_back(new OpSetHOWeightsOnFace());
  804 
  805  for (auto s : spaces) {
  806    switch (s) {
  808      break;
  811      pipeline.push_back(new OpSetHOInvJacToScalarBases<2>(s, inv_jac_ptr));
  812      break;
  816      break;
  818      pipeline.push_back(new OpMakeHdivFromHcurl());
  821      break;
  822    default:
  825    }
  826  }
  827 
  829}
@ L2
field with C-1 continuity
@ HCURL
field with continuous tangents
@ HDIV
field with continuous normal traction
static const char *const FieldSpaceNames[]
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
OpSetInvJacHcurlFaceImpl< 2 > OpSetInvJacHcurlFace
OpSetCovariantPiolaTransformOnFace2DImpl< 2 > OpSetCovariantPiolaTransformOnFace2D
OpSetContravariantPiolaTransformOnFace2DImpl< 2 > OpSetContravariantPiolaTransformOnFace2D