www.mooseframework.org
GeneralizedMaxwellModel.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
12 registerMooseObject("TensorMechanicsApp", GeneralizedMaxwellModel);
13 
15 
16 InputParameters
18 {
19  InputParameters params = GeneralizedMaxwellBase::validParams();
20  params.addClassDescription(
21  "Generalized Maxwell model composed of a parallel assembly of unit Maxwell modules");
22  params.addRequiredParam<Real>("young_modulus", "initial elastic modulus of the material");
23  params.addRequiredParam<Real>("poisson_ratio", "initial poisson ratio of the material");
24  params.addRequiredParam<std::vector<Real>>(
25  "creep_modulus", "list of the elastic moduli of the different springs in the material");
26  params.addRequiredParam<std::vector<Real>>(
27  "creep_viscosity",
28  "list of the characteristic times of the different dashpots in the material");
29  params.addParam<std::vector<Real>>(
30  "creep_ratio", "list of the poisson ratios of the different springs in the material");
31  params.set<bool>("force_recompute_properties") = false;
32  params.suppressParameter<bool>("force_recompute_properties");
33  return params;
34 }
35 
36 GeneralizedMaxwellModel::GeneralizedMaxwellModel(const InputParameters & parameters)
37  : GeneralizedMaxwellBase(parameters),
38  _Ci(getParam<std::vector<Real>>("creep_modulus").size()),
39  _eta_i(getParam<std::vector<Real>>("creep_viscosity")),
40  _Si(getParam<std::vector<Real>>("creep_modulus").size())
41 {
42  Real young_modulus = getParam<Real>("young_modulus");
43  Real poisson_ratio = getParam<Real>("poisson_ratio");
44 
45  _C0.fillFromInputVector({young_modulus, poisson_ratio}, RankFourTensor::symmetric_isotropic_E_nu);
46 
47  std::vector<Real> creep_modulus = getParam<std::vector<Real>>("creep_modulus");
48  std::vector<Real> creep_ratio;
49  if (isParamValid("creep_ratio"))
50  creep_ratio = getParam<std::vector<Real>>("creep_ratio");
51  else
52  creep_ratio.resize(_Ci.size(), poisson_ratio);
53 
54  if (creep_modulus.size() != _Ci.size())
55  mooseError("incompatible number of creep moduli and viscosities");
56  if (creep_ratio.size() != _Ci.size())
57  mooseError("incompatible number of creep ratios and viscosities");
58  if (_Ci.size() != _eta_i.size())
59  mooseError("incompatible number of creep ratios and viscosities");
60 
61  for (unsigned int i = 0; i < _Ci.size(); ++i)
62  {
63  _Ci[i].fillFromInputVector({creep_modulus[i], creep_ratio[i]},
64  RankFourTensor::symmetric_isotropic_E_nu);
65  _Si[i] = _Ci[i].invSymm();
66  _C0 -= _Ci[i];
67  }
68 
69  if (MooseUtils::absoluteFuzzyEqual(_C0.L2norm(), 0.0))
70  _S0.zero();
71  else
72  _S0 = _C0.invSymm();
73 
74  for (unsigned int i = 0; i < _eta_i.size(); ++i)
75  {
76  if (_eta_i[i] < 0 || MooseUtils::absoluteFuzzyEqual(_eta_i[i], 0.0))
77  mooseError("material viscosity must be strictly > 0");
78  }
79 
80  _components = _eta_i.size();
81  _has_longterm_dashpot = (_eta_i.size() == _Ci.size() + 1);
82 
85 }
86 
87 void
89 {
91 
92  for (unsigned int i = 0; i < _Ci.size(); ++i)
93  (*_springs_elasticity_tensors[i])[_qp] = _Ci[i];
94 
95  for (unsigned int i = 0; i < _eta_i.size(); ++i)
96  (*_dashpot_viscosities[i])[_qp] = _eta_i[i];
97 }
98 
99 void
101 {
102  (*_first_elasticity_tensor_inv)[_qp] = _S0;
103 
104  for (unsigned int i = 0; i < _Si.size(); ++i)
105  (*_springs_elasticity_tensors_inv[i])[_qp] = _Si[i];
106 }
LinearViscoelasticityBase::_first_elasticity_tensor
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
Definition: LinearViscoelasticityBase.h:217
GeneralizedMaxwellModel::_Si
std::vector< RankFourTensor > _Si
The inverse of each subsequent spring elasticity tensor.
Definition: GeneralizedMaxwellModel.h:50
defineLegacyParams
defineLegacyParams(GeneralizedMaxwellModel)
LinearViscoelasticityBase::_springs_elasticity_tensors_inv
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors_inv
Definition: LinearViscoelasticityBase.h:223
LinearViscoelasticityBase::_dashpot_viscosities
std::vector< MaterialProperty< Real > * > _dashpot_viscosities
List of viscosities of each subsequent dashpot in the chain.
Definition: LinearViscoelasticityBase.h:228
GeneralizedMaxwellModel::computeQpViscoelasticPropertiesInv
virtual void computeQpViscoelasticPropertiesInv()
This method computes the inverse elasticity tensor of each spring in the system (if required).
Definition: GeneralizedMaxwellModel.C:100
LinearViscoelasticityBase::declareViscoelasticProperties
void declareViscoelasticProperties()
Declare all necessary MaterialProperties for the model.
Definition: LinearViscoelasticityBase.C:102
GuaranteeProvider::issueGuarantee
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
Definition: GuaranteeProvider.C:27
GeneralizedMaxwellModel.h
LinearViscoelasticityBase::_has_longterm_dashpot
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring.
Definition: LinearViscoelasticityBase.h:209
GeneralizedMaxwellModel::computeQpViscoelasticProperties
virtual void computeQpViscoelasticProperties()
This method assigns the mechanical properties of each spring and dashpot in the system.
Definition: GeneralizedMaxwellModel.C:88
GeneralizedMaxwellModel::GeneralizedMaxwellModel
GeneralizedMaxwellModel(const InputParameters &parameters)
Definition: GeneralizedMaxwellModel.C:36
GeneralizedMaxwellBase
This class represents an assembly of springs and dashpots following a generalized Maxwell model (an a...
Definition: GeneralizedMaxwellBase.h:35
GeneralizedMaxwellModel::_S0
RankFourTensor _S0
The inverse of the elasticity tensor of the first spring.
Definition: GeneralizedMaxwellModel.h:48
GeneralizedMaxwellModel
This class is an implementation of a generalized Maxwell model with constant mechanical properties.
Definition: GeneralizedMaxwellModel.h:26
GeneralizedMaxwellModel::_C0
RankFourTensor _C0
The elasticity tensor associated with the first spring.
Definition: GeneralizedMaxwellModel.h:41
GeneralizedMaxwellModel::_eta_i
std::vector< Real > _eta_i
The viscosity of each dashpot.
Definition: GeneralizedMaxwellModel.h:45
ComputeElasticityTensorBase::_elasticity_tensor_name
std::string _elasticity_tensor_name
Definition: ComputeElasticityTensorBase.h:38
GeneralizedMaxwellModel::_Ci
std::vector< RankFourTensor > _Ci
The elasticity tensor of each subsequent spring.
Definition: GeneralizedMaxwellModel.h:43
LinearViscoelasticityBase::_springs_elasticity_tensors
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
Definition: LinearViscoelasticityBase.h:222
GeneralizedMaxwellModel::validParams
static InputParameters validParams()
Definition: GeneralizedMaxwellModel.C:17
GeneralizedMaxwellBase::validParams
static InputParameters validParams()
Definition: GeneralizedMaxwellBase.C:15
registerMooseObject
registerMooseObject("TensorMechanicsApp", GeneralizedMaxwellModel)
Guarantee::ISOTROPIC
LinearViscoelasticityBase::_components
unsigned int _components
This is the number of internal variables required by the model.
Definition: LinearViscoelasticityBase.h:214