version 0.4.1
linearstress.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2021-2025 The Ikarus Developers ikarus@ibb.uni-stuttgart.de
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
11#pragma once
12
13#include <dune/common/fvector.hh>
14#include <dune/localfefunctions/eigenDuneTransformations.hh>
15#include <dune/localfefunctions/expressions/linearStrainsExpr.hh>
16
17#include <Eigen/Core>
18
19namespace Ikarus::PS {
20
22{
36 template <typename GEO, typename AST>
37 static auto value(const GEO& geo, const Dune::FieldVector<double, GEO::mydimension>& gpPos, const AST& asFunction,
38 const auto& beta) {
39 const auto P = asFunction(gpPos);
40 return (P * beta).eval();
41 }
42
61 template <typename GEO, typename AST>
62 static auto firstDerivative(const GEO& geo, const auto& uFunction, const auto& localBasis, const auto& gpIndex,
63 const Dune::FieldVector<double, GEO::mydimension>& gpPos, const AST& asFunction,
64 const auto& beta, const int node = sNaN) {
65 return asFunction(gpPos);
66 }
67
90 template <typename GEO, typename ST, typename AST>
91 static auto secondDerivative(const GEO& geo, const auto& uFunction, const auto& localBasis, const auto& gpIndex,
93 const Eigen::Vector<ST, GEO::mydimension*(GEO::mydimension + 1) / 2>& S,
94 const AST& asFunction, const auto& beta, const int I = sNaN, const int J = sNaN) {
95 constexpr int myDim = GEO::mydimension;
96 constexpr int assumedStressSize = AST::assumedStressSize;
97 return Eigen::Matrix<ST, assumedStressSize, assumedStressSize>::Zero().eval();
98 }
99
101 static constexpr auto name() { return std::string("Linear Stress"); }
102
103private:
104 static constexpr int sNaN = std::numeric_limits<int>::signaling_NaN();
105};
106
107} // namespace Ikarus::PS
Definition: linearstress.hh:19
Definition: linearstress.hh:22
static auto firstDerivative(const GEO &geo, const auto &uFunction, const auto &localBasis, const auto &gpIndex, const Dune::FieldVector< double, GEO::mydimension > &gpPos, const AST &asFunction, const auto &beta, const int node=sNaN)
Compute the first derivative of the linear stress w.r.t beta for a given node and integration point.
Definition: linearstress.hh:62
static auto secondDerivative(const GEO &geo, const auto &uFunction, const auto &localBasis, const auto &gpIndex, const Dune::FieldVector< double, GEO::mydimension > &gpPos, const Eigen::Vector< ST, GEO::mydimension *(GEO::mydimension+1)/2 > &S, const AST &asFunction, const auto &beta, const int I=sNaN, const int J=sNaN)
Compute the second derivative of the linear stress w.r.t beta for a given node and integration point.
Definition: linearstress.hh:91
static auto value(const GEO &geo, const Dune::FieldVector< double, GEO::mydimension > &gpPos, const AST &asFunction, const auto &beta)
Compute the stress vector at a given integration point or its index.
Definition: linearstress.hh:37
static constexpr auto name()
The name of the assumed stress type.
Definition: linearstress.hh:101
Definition: utils/dirichletvalues.hh:32