19 "Generalized Kelvin-Voigt model composed of a serial assembly of unit Kelvin-Voigt modules");
23 "creep_modulus",
"list of the elastic moduli of the different springs in the material");
26 "list of the characteristic times of the different dashpots in the material");
28 "creep_ratio",
"list of the poisson ratios of the different springs in the material");
30 "Young's modulus used in elasticity tensor associated with the long-term " 31 "dashpot (defaults to young_modulus if not specified)");
33 "Poisson's ratio of the elasticity tensor associated with the long-term " 34 "dashpot (defaults to poisson_ratio if not specified)");
35 params.
set<
bool>(
"force_recompute_properties") =
false;
42 _Ci(getParam<
std::vector<
Real>>(
"creep_modulus").size()),
43 _eta_i(getParam<
std::vector<
Real>>(
"creep_viscosity")),
44 _Si(getParam<
std::vector<
Real>>(
"creep_modulus").size()),
45 _C_longterm(
std::nullopt),
46 _S_longterm(
std::nullopt)
48 Real young_modulus = getParam<Real>(
"young_modulus");
49 Real poisson_ratio = getParam<Real>(
"poisson_ratio");
54 std::vector<Real> creep_modulus = getParam<std::vector<Real>>(
"creep_modulus");
55 std::vector<Real> creep_ratio;
57 creep_ratio =
getParam<std::vector<Real>>(
"creep_ratio");
59 creep_ratio.resize(
_Ci.size(), poisson_ratio);
61 if (creep_modulus.size() !=
_Ci.size())
62 mooseError(
"incompatible number of creep moduli and viscosities");
63 if (creep_ratio.size() !=
_Ci.size())
64 mooseError(
"incompatible number of creep ratios and viscosities");
66 mooseError(
"incompatible number of creep ratios and viscosities");
68 for (
unsigned int i = 0; i <
_Ci.size(); ++i)
70 _Ci[i].fillFromInputVector({creep_modulus[i], creep_ratio[i]},
75 for (
unsigned int i = 0; i <
_eta_i.size(); ++i)
77 if (
_eta_i[i] < 0 || MooseUtils::absoluteFuzzyEqual(
_eta_i[i], 0.0))
78 mooseError(
"material viscosity must be strictly > 0");
86 Real longterm_youngs_modulus =
87 (
isParamValid(
"longterm_youngs_modulus") ? getParam<Real>(
"longterm_youngs_modulus")
89 Real longterm_poissons_ratio =
90 (
isParamValid(
"longterm_poissons_ratio") ? getParam<Real>(
"longterm_poissons_ratio")
93 _C_longterm->fillFromInputVector({longterm_youngs_modulus, longterm_poissons_ratio},
108 for (
unsigned int i = 0; i <
_Ci.size(); ++i)
111 for (
unsigned int i = 0; i <
_eta_i.size(); ++i)
121 (*_first_elasticity_tensor_inv)[
_qp] =
_S0;
123 for (
unsigned int i = 0; i <
_Si.size(); ++i)
This class is an implementation of a generalized Kelvin-Voigt model with constant mechanical properti...
virtual void computeQpViscoelasticPropertiesInv()
This method computes the inverse elasticity tensor of each spring in the system (if required)...
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors_inv
const T & getParam(const std::string &name) const
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
std::vector< Real > _eta_i
The viscosity of each dashpot.
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
RankFourTensor _S0
The inverse of the elasticity tensor of the first spring.
std::vector< RankFourTensor > _Ci
The elasticity tensor of each subsequent spring.
void fillFromInputVector(const std::vector< T > &input, FillMethod fill_method)
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
registerMooseObject("SolidMechanicsApp", GeneralizedKelvinVoigtModel)
virtual void declareViscoelasticProperties() override
Declare all necessary MaterialProperties for the model.
static InputParameters validParams()
virtual void computeQpViscoelasticProperties()
This method assigns the mechanical properties of each spring and dashpot in the system.
std::optional< RankFourTensor > _C_longterm
The elasticity tensor associated with the long-term dashpot, if applicable.
RankFourTensor _C0
The elasticity tensor associated with the first spring.
GeneralizedKelvinVoigtModel(const InputParameters ¶meters)
std::vector< MaterialProperty< Real > * > _dashpot_viscosities
List of viscosities of each subsequent dashpot in the chain.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
static InputParameters validParams()
unsigned int _components
This is the number of internal variables required by the model.
This class represents an assembly of springs and dashpots following a generalized Kelvin-Voigt model ...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::optional< RankFourTensor > _S_longterm
The inverse of the elasticity tensor associated with the long-term dashpot, if applicable.
std::vector< RankFourTensor > _Si
The inverse of each subsequent spring elasticity tensor.
std::string _elasticity_tensor_name
void mooseError(Args &&... args) const
bool isParamValid(const std::string &name) const
RankFourTensorTempl< T > invSymm() const