OGS
CreepBGRa.h
Go to the documentation of this file.
1
12#pragma once
13
14#include <cmath>
15#include <memory>
16#include <tuple>
17
22
23namespace MaterialLib
24{
25namespace Solids
26{
27namespace Creep
28{
38template <int DisplacementDim>
39class CreepBGRa final : public LinearElasticIsotropic<DisplacementDim>
40{
41public:
42 using LinearElasticIsotropic<DisplacementDim>::KelvinVectorSize;
43 using ResidualVectorType = Eigen::Matrix<double, KelvinVectorSize, 1>;
44 using JacobianMatrix = Eigen::Matrix<double, KelvinVectorSize,
45 KelvinVectorSize, Eigen::RowMajor>;
46
51
53
54 using LinearElasticIsotropic<DisplacementDim>::getBulkModulus;
55
56 std::unique_ptr<
59 {
61 DisplacementDim>::createMaterialStateVariables();
62 }
63
66 NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters,
67 Parameter const& A, Parameter const& n, Parameter const& sigma_f,
68 Parameter const& Q)
69 : LinearElasticIsotropic<DisplacementDim>(std::move(mp)),
70 _nonlinear_solver_parameters(std::move(nonlinear_solver_parameters)),
71 _a(A),
72 _n(n),
73 _sigma_f(sigma_f),
74 _q(Q)
75 {
76 }
77
78 std::optional<std::tuple<KelvinVector,
79 std::unique_ptr<typename MechanicsBase<
80 DisplacementDim>::MaterialStateVariables>,
83 MaterialPropertyLib::VariableArray const& variable_array_prev,
84 MaterialPropertyLib::VariableArray const& variable_array,
85 double const t, ParameterLib::SpatialPosition const& x, double const dt,
87 material_state_variables) const override;
88
93
95 double const t, double const dt, ParameterLib::SpatialPosition const& x,
96 double const T, double const deviatoric_stress_norm) const override;
97
98private:
100
101 Parameter const& _a;
102 Parameter const& _n;
104 Parameter const& _q;
105};
106
107extern template class CreepBGRa<2>;
108extern template class CreepBGRa<3>;
109
110} // end of namespace Creep
111} // end of namespace Solids
112} // namespace MaterialLib
A class for computing the BGRa creep model, which reads.
Definition CreepBGRa.h:40
Parameter const & _n
A parameter determined by experiment.
Definition CreepBGRa.h:102
Eigen::Matrix< double, KelvinVectorSize, KelvinVectorSize, Eigen::RowMajor > JacobianMatrix
Definition CreepBGRa.h:44
Eigen::Matrix< double, KelvinVectorSize, 1 > ResidualVectorType
Definition CreepBGRa.h:43
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
Definition CreepBGRa.h:49
Parameter const & _q
A stress scaling factor.
Definition CreepBGRa.h:104
ConstitutiveModel getConstitutiveModel() const override
Gets the type of constitutive model.
Definition CreepBGRa.h:89
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
Definition CreepBGRa.h:47
NumLib::NewtonRaphsonSolverParameters const _nonlinear_solver_parameters
Definition CreepBGRa.h:99
Parameter const & _sigma_f
Creep rate exponent n.
Definition CreepBGRa.h:103
double getTemperatureRelatedCoefficient(double const t, double const dt, ParameterLib::SpatialPosition const &x, double const T, double const deviatoric_stress_norm) const override
std::optional< std::tuple< KelvinVector, std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables >, KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const dt, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
Definition CreepBGRa.cpp:39
CreepBGRa(typename LinearElasticIsotropic< DisplacementDim >::MaterialProperties mp, NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters, Parameter const &A, Parameter const &n, Parameter const &sigma_f, Parameter const &Q)
Definition CreepBGRa.h:64
std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables() const override
Definition CreepBGRa.h:58
double getBulkModulus(double const t, ParameterLib::SpatialPosition const &x, KelvinMatrix const *const) const override
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType