19template <
typename GEO>
22 static constexpr int strainSize = GEO::mydimension * (GEO::mydimension + 1) / 2;
24 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
25 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
28 explicit E0(
const GEO& ) {}
43template <
typename GEO>
48 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
49 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
52 explicit Q1E4(
const GEO& geometry)
53 : geometry_{
std::make_optional<GEO>(geometry)},
59 const double xi = quadPos[0];
60 const double eta = quadPos[1];
61 M(0, 0) = 2 * xi - 1.0;
62 M(1, 1) = 2 * eta - 1.0;
63 M(2, 2) = 2 * xi - 1.0;
64 M(2, 3) = 2 * eta - 1.0;
65 const double detJ = geometry_->integrationElement(quadPos);
66 M = T0InverseTransformed_ / detJ * M;
71 std::optional<GEO> geometry_;
72 Eigen::Matrix3d T0InverseTransformed_;
82template <
typename GEO>
87 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
88 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
91 explicit Q1E5(
const GEO& geometry)
92 : geometry_{
std::make_optional<GEO>(geometry)},
98 const double xi = quadPos[0];
99 const double eta = quadPos[1];
100 M(0, 0) = 2 * xi - 1.0;
101 M(1, 1) = 2 * eta - 1.0;
102 M(2, 2) = 2 * xi - 1.0;
103 M(2, 3) = 2 * eta - 1.0;
104 M(2, 4) = (2 * xi - 1.0) * (2 * eta - 1.0);
105 const double detJ = geometry_->integrationElement(quadPos);
106 M = T0InverseTransformed_ / detJ * M;
111 std::optional<GEO> geometry_;
112 Eigen::Matrix3d T0InverseTransformed_;
122template <
typename GEO>
127 using MType = Eigen::Matrix<double, strainSize, enhancedStrainSize>;
128 using DType = Eigen::Matrix<double, enhancedStrainSize, enhancedStrainSize>;
131 explicit Q1E7(
const GEO& geometry)
132 : geometry_{
std::make_optional<GEO>(geometry)},
138 const double xi = quadPos[0];
139 const double eta = quadPos[1];
140 M(0, 0) = 2 * xi - 1.0;
141 M(1, 1) = 2 * eta - 1.0;
142 M(2, 2) = 2 * xi - 1.0;
143 M(2, 3) = 2 * eta - 1.0;
144 M(0, 4) = (2 * xi - 1.0) * (2 * eta - 1.0);
145 M(1, 5) = (2 * xi - 1.0) * (2 * eta - 1.0);
146 M(2, 6) = (2 * xi - 1.0) * (2 * eta - 1.0);
147 const double detJ = geometry_->integrationElement(quadPos);
148 M = T0InverseTransformed_ / detJ * M;
153 std::optional<GEO> geometry_;
154 Eigen::Matrix3d T0InverseTransformed_;
Helper for the Eigen::Tensor types.
Eigen::Matrix3d calcTransformationMatrix2D(const Geometry &geometry)
Calculates the 2D transformation matrix.
Definition: tensorutils.hh:367
Dummy struct for displacement-based EAS elements, i.e. 0 enhanced modes.
Definition: eas2d.hh:21
static constexpr int strainSize
Definition: eas2d.hh:22
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas2d.hh:24
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas2d.hh:25
static auto calcM(const Dune::FieldVector< double, 2 > &)
Definition: eas2d.hh:31
E0(const GEO &)
Definition: eas2d.hh:28
static constexpr int enhancedStrainSize
Definition: eas2d.hh:23
Q1E4 structure for EAS with linear strains and 4 enhanced modes.
Definition: eas2d.hh:45
auto calcM(const Dune::FieldVector< double, 2 > &quadPos) const
Definition: eas2d.hh:56
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas2d.hh:49
static constexpr int strainSize
Definition: eas2d.hh:46
Q1E4(const GEO &geometry)
Definition: eas2d.hh:52
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas2d.hh:48
static constexpr int enhancedStrainSize
Definition: eas2d.hh:47
Structure representing EAS for Q1 with 5 enhanced strains.
Definition: eas2d.hh:84
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas2d.hh:88
auto calcM(const Dune::FieldVector< double, 2 > &quadPos) const
Definition: eas2d.hh:95
static constexpr int strainSize
Definition: eas2d.hh:85
Q1E5(const GEO &geometry)
Definition: eas2d.hh:91
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas2d.hh:87
static constexpr int enhancedStrainSize
Definition: eas2d.hh:86
Structure representing EAS for Q1 with 7 enhanced strains.
Definition: eas2d.hh:124
static constexpr int enhancedStrainSize
Definition: eas2d.hh:126
Eigen::Matrix< double, strainSize, enhancedStrainSize > MType
Definition: eas2d.hh:127
static constexpr int strainSize
Definition: eas2d.hh:125
Q1E7(const GEO &geometry)
Definition: eas2d.hh:131
Eigen::Matrix< double, enhancedStrainSize, enhancedStrainSize > DType
Definition: eas2d.hh:128
auto calcM(const Dune::FieldVector< double, 2 > &quadPos) const
Definition: eas2d.hh:135
Definition: utils/dirichletvalues.hh:32