20 template <
typename GEO>
21 auto transformationMatrixAtCenter(
const GEO& geometry) {
22 const auto& referenceElement = Dune::ReferenceElements<double, GEO::mydimension>::general(geometry.type());
23 const auto quadPos0 = referenceElement.position(0, 0);
34template <
typename GEO,
int ass>
37 static constexpr int myDim = GEO::mydimension;
40 using AnsatzType = Eigen::Matrix<double, stressSize, assumedStressSize>;
41 using HType = Eigen::Matrix<double, assumedStressSize, assumedStressSize>;
44 explicit SX(
const GEO& geometry)
45 :
geometry_{std::make_optional<GEO>(geometry)},
46 T0_{Impl::transformationMatrixAtCenter(geometry)} {}
50 Eigen::Matrix<double, stressSize, stressSize>
T0_;
58template <
typename GEO>
69 explicit S5(
const GEO& geo)
80 const double xi = 2.0 * quadPos[0] - 1.0;
81 const double eta = 2.0 * quadPos[1] - 1.0;
97template <
typename GEO>
108 explicit S18(
const GEO& geo)
119 const double xi = 2.0 * quadPos[0] - 1.0;
120 const double eta = 2.0 * quadPos[1] - 1.0;
121 const double zeta = 2.0 * quadPos[2] - 1.0;
127 P(0, 3) = eta * zeta;
153 return this->
T0_ * P;
162template <
typename GEO>
173 explicit S24(
const GEO& geo)
184 const double xi = 2.0 * quadPos[0] - 1.0;
185 const double eta = 2.0 * quadPos[1] - 1.0;
186 const double zeta = 2.0 * quadPos[2] - 1.0;
192 P(0, 3) = eta * zeta;
210 P(3, 15) = xi * zeta;
216 P(4, 19) = eta * zeta;
221 P(5, 22) = eta * zeta;
222 P(5, 23) = xi * zeta;
224 return this->
T0_ * P;
233template <
typename GEO>
244 explicit S30(
const GEO& geo)
255 const double xi = 2.0 * quadPos[0] - 1.0;
256 const double eta = 2.0 * quadPos[1] - 1.0;
257 const double zeta = 2.0 * quadPos[2] - 1.0;
263 P(0, 3) = eta * zeta;
283 P(3, 17) = xi * zeta;
291 P(4, 23) = eta * zeta;
298 P(5, 28) = eta * zeta;
299 P(5, 29) = xi * zeta;
301 return this->
T0_ * P;
Helper for the Eigen::Tensor types.
Definition of several material related enums.
auto transpose(const Eigen::EigenBase< Derived > &A)
Eigen::Matrix3d transformationMatrix(const GEO &geometry, const Dune::FieldVector< double, 2 > &pos)
Calculates the 2D transformation matrix.
Definition: tensorutils.hh:410
Definition: linearstress.hh:19
Interface for displacement-based Assumed Stress elements, where linear or PK2 stresses are assumed.
Definition: linearandpk2stress.hh:36
Eigen::Matrix< double, stressSize, stressSize > T0_
Definition: linearandpk2stress.hh:50
SX(const GEO &geometry)
Definition: linearandpk2stress.hh:44
std::optional< GEO > geometry_
Definition: linearandpk2stress.hh:49
Eigen::Matrix< double, stressSize, assumedStressSize > AnsatzType
Definition: linearandpk2stress.hh:40
static constexpr int stressSize
Definition: linearandpk2stress.hh:38
static constexpr int assumedStressSize
Definition: linearandpk2stress.hh:39
static constexpr int myDim
Definition: linearandpk2stress.hh:37
Eigen::Matrix< double, assumedStressSize, assumedStressSize > HType
Definition: linearandpk2stress.hh:41
S5 struct for AssumedStress (PS) for Q1 with 5 assumed stress parameters.
Definition: linearandpk2stress.hh:60
static constexpr int myDim
Definition: linearandpk2stress.hh:62
S5(const GEO &geo)
Definition: linearandpk2stress.hh:69
static constexpr int stressSize
Definition: linearandpk2stress.hh:63
typename Base::HType HType
Definition: linearandpk2stress.hh:66
typename Base::AnsatzType AnsatzType
Definition: linearandpk2stress.hh:65
static constexpr int assumedStressSize
Definition: linearandpk2stress.hh:64
AnsatzType operator()(const Dune::FieldVector< double, myDim > &quadPos) const
A function that implements the ansatz for the stress measure.
Definition: linearandpk2stress.hh:77
S18 struct for AssumedStress (PS) for H1 with 18 stress parameters.
Definition: linearandpk2stress.hh:99
static constexpr int myDim
Definition: linearandpk2stress.hh:101
static constexpr int stressSize
Definition: linearandpk2stress.hh:102
AnsatzType operator()(const Dune::FieldVector< double, myDim > &quadPos) const
A function that implements the ansatz for the stress measure.
Definition: linearandpk2stress.hh:116
S18(const GEO &geo)
Definition: linearandpk2stress.hh:108
typename Base::HType HType
Definition: linearandpk2stress.hh:105
static constexpr int assumedStressSize
Definition: linearandpk2stress.hh:103
typename Base::AnsatzType AnsatzType
Definition: linearandpk2stress.hh:104
S24 struct for AssumedStress (PS) for H1 with 24 assumed stress parameters.
Definition: linearandpk2stress.hh:164
AnsatzType operator()(const Dune::FieldVector< double, myDim > &quadPos) const
A function that implements the ansatz for the stress measure.
Definition: linearandpk2stress.hh:181
static constexpr int stressSize
Definition: linearandpk2stress.hh:167
typename Base::AnsatzType AnsatzType
Definition: linearandpk2stress.hh:169
typename Base::HType HType
Definition: linearandpk2stress.hh:170
static constexpr int myDim
Definition: linearandpk2stress.hh:166
static constexpr int assumedStressSize
Definition: linearandpk2stress.hh:168
S24(const GEO &geo)
Definition: linearandpk2stress.hh:173
S30 struct for AssumedStress (PS) for H1 with 30 assumed stress parameters.
Definition: linearandpk2stress.hh:235
static constexpr int myDim
Definition: linearandpk2stress.hh:237
typename Base::HType HType
Definition: linearandpk2stress.hh:241
AnsatzType operator()(const Dune::FieldVector< double, myDim > &quadPos) const
A function that implements the ansatz for the stress measure.
Definition: linearandpk2stress.hh:252
S30(const GEO &geo)
Definition: linearandpk2stress.hh:244
typename Base::AnsatzType AnsatzType
Definition: linearandpk2stress.hh:240
static constexpr int assumedStressSize
Definition: linearandpk2stress.hh:239
static constexpr int stressSize
Definition: linearandpk2stress.hh:238
Definition: utils/dirichletvalues.hh:32