798 {
800
801 if (!jac)
802 jac = boost::make_shared<MatrixDouble>();
803 if (!det)
804 det = boost::make_shared<VectorDouble>();
805 if (!inv_jac)
806 inv_jac = boost::make_shared<MatrixDouble>();
807
808 if (geom_field_name.empty()) {
809
810 pipeline.push_back(new OpCalculateHOJac<3>(jac));
811
812 } else {
813
814 pipeline.push_back(new OpCalculateHOCoords<3>(geom_field_name));
815 pipeline.push_back(
817 }
818
819 pipeline.push_back(new OpInvertMatrix<3>(jac, det, inv_jac));
820 pipeline.push_back(new OpSetHOWeights(det));
821
822 for (auto s : spaces) {
823 switch (s) {
825 break;
827 pipeline.push_back(
new OpSetHOInvJacToScalarBases<3>(
H1, inv_jac));
828 break;
830 pipeline.push_back(
new OpSetHOCovariantPiolaTransform(
HCURL, inv_jac));
831 pipeline.push_back(
new OpSetHOInvJacVectorBase(
HCURL, inv_jac));
832 break;
834 pipeline.push_back(
835 new OpSetHOContravariantPiolaTransform(
HDIV, det, jac));
836 pipeline.push_back(
new OpSetHOInvJacVectorBase(
HDIV, inv_jac));
837 break;
839 pipeline.push_back(
new OpSetHOInvJacToScalarBases<3>(
L2, inv_jac));
840 break;
841 default:
844 break;
845 }
846 }
847
849}
@ 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()