22 template <
int DisplacementDim>
23 std::optional<std::tuple<typename MechanicsBase<DisplacementDim>::KelvinVector,
24 std::unique_ptr<
typename MechanicsBase<
25 DisplacementDim>::MaterialStateVariables>,
34 auto const& eps_m = std::get<MPL::SymmetricTensor<DisplacementDim>>(
35 variable_array[
static_cast<int>(MPL::Variable::mechanical_strain)]);
36 auto const& eps_m_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
37 variable_array_prev[
static_cast<int>(
38 MPL::Variable::mechanical_strain)]);
39 auto const& sigma_prev = std::get<MPL::SymmetricTensor<DisplacementDim>>(
40 variable_array_prev[
static_cast<int>(MPL::Variable::stress)]);
41 auto const& T = std::get<double>(
46 KelvinVector sigma = sigma_prev + C * (eps_m - eps_m_prev);
48 return {std::make_tuple(
55 template <
int DisplacementDim>
63 auto const& mp = _mp.evaluate(t, x);
64 auto const E = [&mp](
int const i) {
return mp.E(i); };
65 auto const G = [&mp](
int const i,
int const j) {
return mp.G(i, j); };
66 auto const nu = [&mp](
int const i,
int const j) {
return mp.nu(i, j); };
70 S_ortho.template topLeftCorner<3, 3>() <<
71 1. / E(1), -nu(2, 1) / E(2), -nu(3, 1) / E(3),
72 -nu(1, 2) / E(1), 1. / E(2), -nu(3, 2) / E(3),
73 -nu(1, 3) / E(1), -nu(2, 3) / E(2), 1. / E(3);
75 S_ortho.template bottomRightCorner<3, 3>().diagonal() <<
84 if (!_local_coordinate_system)
88 Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
89 R.template topLeftCorner<DisplacementDim, DisplacementDim>().noalias() =
90 _local_coordinate_system->transformation<DisplacementDim>(x);
97 return (Q * C_ortho * Q.transpose())
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
std::optional< std::tuple< typename MechanicsBase< DisplacementDim >::KelvinVector, std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables >, typename MechanicsBase< DisplacementDim >::KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
KelvinMatrix getElasticTensor(double const t, ParameterLib::SpatialPosition const &x, double const T) const
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
KelvinMatrixType< DisplacementDim > fourthOrderRotationMatrix(Eigen::Matrix< double, DisplacementDim, DisplacementDim, Eigen::ColMajor, DisplacementDim, DisplacementDim > const &transformation)
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix