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()
OpSetCovariantPiolaTransformOnFace2DImpl< 2 > OpSetCovariantPiolaTransformOnFace2D
OpSetContravariantPiolaTransformOnFace2DImpl< 2 > OpSetContravariantPiolaTransformOnFace2D
OpSetInvJacHcurlFaceImpl< 2 > OpSetInvJacHcurlFace