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:336
 
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:30