23template <
typename GEO>
28 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
29 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
32 explicit H1E9(
const GEO& geometry)
33 : geometry_{
std::make_optional<GEO>(geometry)},
39 const double xi = quadPos[0];
40 const double eta = quadPos[1];
41 const double zeta = quadPos[2];
42 M(0, 0) = 2 * xi - 1.0;
43 M(1, 1) = 2 * eta - 1.0;
44 M(2, 2) = 2 * zeta - 1.0;
45 M(3, 3) = 2 * xi - 1.0;
46 M(3, 4) = 2 * eta - 1.0;
47 M(4, 5) = 2 * xi - 1.0;
48 M(4, 6) = 2 * zeta - 1.0;
49 M(5, 7) = 2 * eta - 1.0;
50 M(5, 8) = 2 * zeta - 1.0;
51 const double detJ = geometry_->integrationElement(quadPos);
52 M = T0InverseTransformed_ / detJ * M;
57 std::optional<GEO> geometry_;
58 Eigen::Matrix<double, strainSize, strainSize> T0InverseTransformed_;
68template <
typename GEO>
73 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
74 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
77 explicit H1E21(
const GEO& geometry)
78 : geometry_{
std::make_optional<GEO>(geometry)},
84 const double xi = quadPos[0];
85 const double eta = quadPos[1];
86 const double zeta = quadPos[2];
87 M(0, 0) = 2 * xi - 1.0;
88 M(1, 1) = 2 * eta - 1.0;
89 M(2, 2) = 2 * zeta - 1.0;
90 M(3, 3) = 2 * xi - 1.0;
91 M(3, 4) = 2 * eta - 1.0;
92 M(4, 5) = 2 * xi - 1.0;
93 M(4, 6) = 2 * zeta - 1.0;
94 M(5, 7) = 2 * eta - 1.0;
95 M(5, 8) = 2 * zeta - 1.0;
97 M(3, 9) = (2 * xi - 1.0) * (2 * zeta - 1.0);
98 M(3, 10) = (2 * eta - 1.0) * (2 * zeta - 1.0);
99 M(4, 11) = (2 * xi - 1.0) * (2 * eta - 1.0);
100 M(4, 12) = (2 * eta - 1.0) * (2 * zeta - 1.0);
101 M(5, 13) = (2 * xi - 1.0) * (2 * eta - 1.0);
102 M(5, 14) = (2 * xi - 1.0) * (2 * zeta - 1.0);
104 M(0, 15) = (2 * xi - 1.0) * (2 * eta - 1.0);
105 M(0, 16) = (2 * xi - 1.0) * (2 * zeta - 1.0);
106 M(1, 17) = (2 * xi - 1.0) * (2 * eta - 1.0);
107 M(1, 18) = (2 * eta - 1.0) * (2 * zeta - 1.0);
108 M(2, 19) = (2 * xi - 1.0) * (2 * zeta - 1.0);
109 M(2, 20) = (2 * eta - 1.0) * (2 * zeta - 1.0);
111 const double detJ = geometry_->integrationElement(quadPos);
112 M = T0InverseTransformed / detJ * M;
117 std::optional<GEO> geometry_;
118 Eigen::Matrix<double, strainSize, strainSize> T0InverseTransformed;
Helper for the Eigen::Tensor types.
Eigen::Matrix< double, 6, 6 > calcTransformationMatrix3D(const Geometry &geometry)
Calculates the 3D transformation matrix.
Definition: tensorutils.hh:400
Structure representing EAS for H1 with 9 enhanced strains.
Definition: eas3d.hh:25
H1E9(const GEO &geometry)
Definition: eas3d.hh:32
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas3d.hh:28
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas3d.hh:29
static constexpr int enhancedStrainSize
Definition: eas3d.hh:27
auto calcM(const Dune::FieldVector< double, 3 > &quadPos) const
Definition: eas3d.hh:36
static constexpr int strainSize
Definition: eas3d.hh:26
Structure representing EAS for H1 with 21 enhanced strains.
Definition: eas3d.hh:70
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas3d.hh:73
H1E21(const GEO &geometry)
Definition: eas3d.hh:77
static constexpr int enhancedStrainSize
Definition: eas3d.hh:72
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas3d.hh:74
static constexpr int strainSize
Definition: eas3d.hh:71
auto calcM(const Dune::FieldVector< double, 3 > &quadPos) const
Definition: eas3d.hh:81
Definition: utils/dirichletvalues.hh:32