984 {
986
987 if (!jac)
988 jac = boost::make_shared<MatrixDouble>();
989 if (!det)
990 det = boost::make_shared<VectorDouble>();
991 if (!inv_jac)
992 inv_jac = boost::make_shared<MatrixDouble>();
993
994 if (geom_field_name.empty()) {
995
996 pipeline.push_back(new OpCalculateHOJac<3>(jac));
997
998 } else {
999
1000 pipeline.push_back(new OpCalculateHOCoords<3>(geom_field_name));
1001 pipeline.push_back(
1002 new OpCalculateVectorFieldGradient<3, 3>(geom_field_name, jac));
1003 }
1004
1005 pipeline.push_back(new OpInvertMatrix<3>(jac, det, inv_jac));
1006 pipeline.push_back(new OpSetHOWeights(det));
1007
1008 for (auto s : spaces) {
1009 switch (s) {
1011 break;
1013 pipeline.push_back(
new OpSetHOInvJacToScalarBases<3>(
H1, inv_jac));
1014 break;
1016 pipeline.push_back(
new OpSetHOCovariantPiolaTransform(
HCURL, inv_jac));
1017 pipeline.push_back(
new OpSetHOInvJacVectorBase(
HCURL, inv_jac));
1018 break;
1020 pipeline.push_back(
1021 new OpSetHOContravariantPiolaTransform(
HDIV, det, jac));
1022 break;
1024 pipeline.push_back(
new OpSetHOInvJacToScalarBases<3>(
L2, inv_jac));
1025 break;
1026 default:
1029 break;
1030 }
1031 }
1032
1034}
@ 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()