GeneralizedMaxwellModel Class Reference

This class is an implementation of a generalized Maxwell model with constant mechanical properties. More...

#include <GeneralizedMaxwellModel.h>

Inheritance diagram for GeneralizedMaxwellModel:
[legend]

Public Types

enum  IntegrationRule { IntegrationRule::BackwardEuler, IntegrationRule::MidPoint, IntegrationRule::Newmark, IntegrationRule::Zienkiewicz }
Determines how theta is calculated for the time-integration system. More...

Public Member Functions

GeneralizedMaxwellModel (const InputParameters &parameters)

void recomputeQpApparentProperties (unsigned int qp)
Compute the apparent properties at a quadrature point. More...

bool hasGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)

Protected Member Functions

virtual void computeQpViscoelasticProperties ()
This method assigns the mechanical properties of each spring and dashpot in the system. More...

virtual void computeQpViscoelasticPropertiesInv ()
This method computes the inverse elasticity tensor of each spring in the system (if required). More...

virtual void computeQpApparentElasticityTensors () final
This method computes the apparent elasticity tensor used in the internal time-stepping scheme. More...

virtual void computeQpApparentCreepStrain () final
This method computes the apparent creep strain corresponding to the current viscous_strain of each dashpot. More...

virtual void updateQpViscousStrains () final
Update the internal viscous strains at a quadrature point. More...

virtual void initQpStatefulProperties () override

virtual void computeQpElasticityTensor () final
Inherited from ComputeElasticityTensorBase. More...

Real computeTheta (Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity. More...

virtual void computeQpProperties ()

void issueGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)

void revokeGuarantee (const MaterialPropertyName &prop_name, Guarantee guarantee)

Protected Attributes

RankFourTensor _C0
The elasticity tensor associated with the first spring. More...

std::vector< RankFourTensor > _Ci
The elasticity tensor of each subsequent spring. More...

std::vector< Real > _eta_i
The viscosity of each dashpot. More...

RankFourTensor _S0
The inverse of the elasticity tensor of the first spring. More...

std::vector< RankFourTensor > _Si
The inverse of each subsequent spring elasticity tensor. More...

IntegrationRule _integration_rule
Determines how theta is computed. More...

Real _theta
User-defined value for theta. More...

MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor
Apparent elasticity tensor. This is NOT the elasticity tensor of the material. More...

MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor. More...

MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material. More...

MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor_inv
Inverse of the instaneous elasticity tensor. More...

bool _need_viscoelastic_properties_inverse
If active, indicates that we need to call computeQpViscoelasticPropertiesInv() More...

bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring. More...

unsigned int _components
This is the number of internal variables required by the model. More...

MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain. More...

MaterialProperty< RankFourTensor > * _first_elasticity_tensor_inv

MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain. More...

MaterialProperty< std::vector< RankFourTensor > > * _springs_elasticity_tensors_inv

MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain. More...

MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains
The internal strain variables required by the time-stepping procedure (generally, on a one-on-one basis with the number of dashpot). More...

const MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains_old

MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains. More...

const MaterialProperty< RankTwoTensor > & _apparent_creep_strain_old

const MaterialProperty< RankTwoTensor > & _elastic_strain_old
previous value of the elastic strain for update purposes More...

const MaterialProperty< RankTwoTensor > & _creep_strain_old
Previous value of the true creep strain for update purposes. More...

const MaterialProperty< RankTwoTensor > & _stress_old
previous value of the stress for update purposes More...

bool _has_driving_eigenstrain
Indicates if the model is only driven by the stress, or also by an additional eigenstrain. More...

std::string _driving_eigenstrain_name
Name of the eigenstrain that drives the additional creep strain. More...

const MaterialProperty< RankTwoTensor > * _driving_eigenstrain
Pointer to the value of the driving eigenstrain. More...

bool _force_recompute_properties
If activated, the time-stepping scheme will be re-initialized at each step of the solver. More...

bool & _step_zero

std::string _base_name

std::string _elasticity_tensor_name

MaterialProperty< RankFourTensor > & _elasticity_tensor

Function *const _prefactor_function
prefactor function to multiply the elasticity tensor with More...

Detailed Description

This class is an implementation of a generalized Maxwell model with constant mechanical properties.

It consists of an arbitrary number of Kelvin-Voigt units associated in series with a single spring, and an optional dashpot. Having an optional dashpot may lead to divergence of the time-stepping scheme and should be used with care.

Definition at line 24 of file GeneralizedMaxwellModel.h.

Member Enumeration Documentation

 stronginherited

Determines how theta is calculated for the time-integration system.

Enumerator
BackwardEuler

theta = 1

MidPoint

theta = 0.5

Newmark

theta defined by the user

Zienkiewicz

theta automatically adjusted as a function of the time step and the viscosity

Definition at line 85 of file LinearViscoelasticityBase.h.

86  {
88  BackwardEuler,
90  MidPoint,
92  Newmark,
94  Zienkiewicz,
95  };

Constructor & Destructor Documentation

 GeneralizedMaxwellModel::GeneralizedMaxwellModel ( const InputParameters & parameters )

Definition at line 31 of file GeneralizedMaxwellModel.C.

32  : GeneralizedMaxwellBase(parameters),
33  _Ci(getParam<std::vector<Real>>("creep_modulus").size()),
34  _eta_i(getParam<std::vector<Real>>("creep_viscosity")),
35  _Si(getParam<std::vector<Real>>("creep_modulus").size())
36 {
37  Real young_modulus = getParam<Real>("young_modulus");
38  Real poisson_ratio = getParam<Real>("poisson_ratio");
39
40  _C0.fillFromInputVector({young_modulus, poisson_ratio}, RankFourTensor::symmetric_isotropic_E_nu);
41
42  std::vector<Real> creep_modulus = getParam<std::vector<Real>>("creep_modulus");
43  std::vector<Real> creep_ratio;
44  if (isParamValid("creep_ratio"))
45  creep_ratio = getParam<std::vector<Real>>("creep_ratio");
46  else
47  creep_ratio.resize(_Ci.size(), poisson_ratio);
48
49  if (creep_modulus.size() != _Ci.size())
50  mooseError("incompatible number of creep moduli and viscosities");
51  if (creep_ratio.size() != _Ci.size())
52  mooseError("incompatible number of creep ratios and viscosities");
53  if (_Ci.size() != _eta_i.size())
54  mooseError("incompatible number of creep ratios and viscosities");
55
56  for (unsigned int i = 0; i < _Ci.size(); ++i)
57  {
58  _Ci[i].fillFromInputVector({creep_modulus[i], creep_ratio[i]},
59  RankFourTensor::symmetric_isotropic_E_nu);
60  _Si[i] = _Ci[i].invSymm();
61  _C0 -= _Ci[i];
62  }
63
64  _S0 = _C0.invSymm();
65
66  for (unsigned int i = 0; i < _eta_i.size(); ++i)
67  {
68  if (_eta_i[i] < 0 || MooseUtils::absoluteFuzzyEqual(_eta_i[i], 0.0))
69  mooseError("material viscosity must be strictly > 0");
70  }
71
72  _components = _eta_i.size();
73  _has_longterm_dashpot = (_eta_i.size() == _Ci.size() + 1);
74
76 }
std::vector< RankFourTensor > _Si
The inverse of each subsequent spring elasticity tensor.
GeneralizedMaxwellBase(const InputParameters &parameters)
void issueGuarantee(const MaterialPropertyName &prop_name, Guarantee guarantee)
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
RankFourTensor _S0
The inverse of the elasticity tensor of the first spring.
unsigned int _components
This is the number of internal variables required by the model.
std::vector< Real > _eta_i
The viscosity of each dashpot.
std::vector< RankFourTensor > _Ci
The elasticity tensor of each subsequent spring.
RankFourTensor _C0
The elasticity tensor associated with the first spring.

Member Function Documentation

 void GeneralizedMaxwellBase::computeQpApparentCreepStrain ( )
finalprotectedvirtualinherited

This method computes the apparent creep strain corresponding to the current viscous_strain of each dashpot.

It must be called after the apparent elasticity tensors have been calculated.

This method is purely virtual. Inherited classes must override it.

This method is related to the internal time-stepping scheme. It should only be overwritten by classes that inherit directly from LinearViscoelasticityBase, and that represent a different spring-dashpot assembly. See GeneralizedKelvinVoigtBase for example.

Implements LinearViscoelasticityBase.

Definition at line 83 of file GeneralizedMaxwellBase.C.

84 {
85  _apparent_creep_strain[_qp].zero();
86
87  for (unsigned int i = 0; i < _springs_elasticity_tensors[_qp].size(); ++i)
88  {
89  Real theta_i = computeTheta(_dt, _dashpot_viscosities[_qp][i]);
90  Real gamma = _dashpot_viscosities[_qp][i] / (_dt * theta_i);
92  (_springs_elasticity_tensors[_qp][i] * _viscous_strains[_qp][i]) * (gamma / (1. + gamma));
93  }
94
96  {
97  Real theta_i = computeTheta(_dt, _dashpot_viscosities[_qp].back());
98  Real gamma = _dashpot_viscosities[_qp].back() / (_dt * theta_i);
100  (_first_elasticity_tensor[_qp] * _viscous_strains[_qp].back()) * gamma;
101  }
102
104
106  {
107  _apparent_creep_strain[_qp] +=
109  (*_driving_eigenstrain)[_qp];
110  _apparent_creep_strain[_qp] -= (*_driving_eigenstrain)[_qp];
111  }
112 }
MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains
The internal strain variables required by the time-stepping procedure (generally, on a one-on-one bas...
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain.
Real computeTheta(Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity.
MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains.
const MaterialProperty< RankTwoTensor > * _driving_eigenstrain
Pointer to the value of the driving eigenstrain.
bool _has_driving_eigenstrain
Indicates if the model is only driven by the stress, or also by an additional eigenstrain.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.
 void GeneralizedMaxwellBase::computeQpApparentElasticityTensors ( )
finalprotectedvirtualinherited

This method computes the apparent elasticity tensor used in the internal time-stepping scheme.

It is called after the mechanical properties have been set, and before the apparent creep strains are calculated.

This method is also responsible for calculating the instantaneous elasticity tensor, and the inverse of both the apparent and instantaneous elasticity tensors.

This method is purely virtual. Inherited classes must override it.

This method is related to the internal time-stepping scheme. It should only be overwritten by classes that inherit directly from LinearViscoelasticityBase, and that represent a different spring-dashpot assembly. See GeneralizedKelvinVoigtBase for example.

Implements LinearViscoelasticityBase.

Definition at line 53 of file GeneralizedMaxwellBase.C.

54 {
55
58
59  for (unsigned int i = 0; i < _springs_elasticity_tensors[_qp].size(); ++i)
60  {
61  Real theta_i = computeTheta(_dt, _dashpot_viscosities[_qp][i]);
62  Real gamma = _dashpot_viscosities[_qp][i] / (_dt * theta_i);
65  _springs_elasticity_tensors[_qp][i] * (gamma / (1. + gamma));
66  }
67
69  {
70  Real theta_i = computeTheta(_dt, _dashpot_viscosities[_qp].back());
71  Real gamma = _dashpot_viscosities[_qp].back() / (_dt * theta_i);
73
74  mooseDoOnce(mooseWarning("Generalized Maxwell model with longterm viscosity may not converge "
75  "under Dirichlet boundary conditions"));
76  }
77
80 }
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor
Apparent elasticity tensor. This is NOT the elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain.
Real computeTheta(Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity.
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor_inv
Inverse of the instaneous elasticity tensor.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.
 void LinearViscoelasticityBase::computeQpElasticityTensor ( )
finalprotectedvirtualinherited

Inherited from ComputeElasticityTensorBase.

Implements ComputeElasticityTensorBase.

Definition at line 166 of file LinearViscoelasticityBase.C.

167 {
170
172 }
void recomputeQpApparentProperties(unsigned int qp)
Compute the apparent properties at a quadrature point.
bool _force_recompute_properties
If activated, the time-stepping scheme will be re-initialized at each step of the solver...
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _elasticity_tensor
 void ComputeElasticityTensorBase::computeQpProperties ( )
protectedvirtualinherited

Definition at line 39 of file ComputeElasticityTensorBase.C.

40 {
42
43  // Multiply by prefactor
45  _elasticity_tensor[_qp] *= _prefactor_function->value(_t, _q_point[_qp]);
46 }
Function *const _prefactor_function
prefactor function to multiply the elasticity tensor with
virtual void computeQpElasticityTensor()=0
MaterialProperty< RankFourTensor > & _elasticity_tensor
 void GeneralizedMaxwellModel::computeQpViscoelasticProperties ( )
protectedvirtual

This method assigns the mechanical properties of each spring and dashpot in the system.

This method is purely virtual. Inherited classes must override it.

This method is related to the storage of the mechanical properties of each spring and dashpot in the system, and not the internal time-stepping procedure. Only end-user classes should override it. See GeneralizedKelvinVoigModel for example.

Implements LinearViscoelasticityBase.

Definition at line 79 of file GeneralizedMaxwellModel.C.

80 {
82
83  for (unsigned int i = 0; i < _Ci.size(); ++i)
84  _springs_elasticity_tensors[_qp][i] = _Ci[i];
85
86  for (unsigned int i = 0; i < _eta_i.size(); ++i)
87  _dashpot_viscosities[_qp][i] = _eta_i[i];
88 }
MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain.
std::vector< Real > _eta_i
The viscosity of each dashpot.
std::vector< RankFourTensor > _Ci
The elasticity tensor of each subsequent spring.
RankFourTensor _C0
The elasticity tensor associated with the first spring.
 void GeneralizedMaxwellModel::computeQpViscoelasticPropertiesInv ( )
protectedvirtual

This method computes the inverse elasticity tensor of each spring in the system (if required).

This method is virtual. Its default behavior computes the inverse of each tensor. It must be inherited only if there is a faster way to compute this inverse (for example, if they are known).

This method is related to the storage of the mechanical properties of each spring and dashpot in the system, and not the internal time-stepping procedure. Only end-user classes should override it. See GeneralizedKelvinVoigtModel for example.

Reimplemented from LinearViscoelasticityBase.

Definition at line 91 of file GeneralizedMaxwellModel.C.

92 {
93  (*_first_elasticity_tensor_inv)[_qp] = _S0;
94
95  for (unsigned int i = 0; i < _Si.size(); ++i)
96  (*_springs_elasticity_tensors_inv)[_qp][i] = _Si[i];
97 }
std::vector< RankFourTensor > _Si
The inverse of each subsequent spring elasticity tensor.
MaterialProperty< std::vector< RankFourTensor > > * _springs_elasticity_tensors_inv
RankFourTensor _S0
The inverse of the elasticity tensor of the first spring.
 Real LinearViscoelasticityBase::computeTheta ( Real dt, Real viscosity ) const
protectedinherited

Provides theta as a function of the time step and a viscosity.

Definition at line 192 of file LinearViscoelasticityBase.C.

193 {
194  if (MooseUtils::absoluteFuzzyEqual(dt, 0.0))
195  mooseError("linear viscoelasticity cannot be integrated over a dt of ", dt);
196
197  switch (_integration_rule)
198  {
200  return 1.;
202  return 0.5;
204  return _theta;
206  return 1. / (1. - std::exp(-dt / viscosity)) - viscosity / dt;
207  default:
208  return 1.;
209  }
210  return 1.;
211 }
theta automatically adjusted as a function of the time step and the viscosity
double FORTRAN_CALL() viscosity(double &rho, double &T)
Real _theta
User-defined value for theta.
IntegrationRule _integration_rule
Determines how theta is computed.
 bool GuaranteeProvider::hasGuarantee ( const MaterialPropertyName & prop_name, Guarantee guarantee )
inherited

Definition at line 14 of file GuaranteeProvider.C.

15 {
16  auto it = _guarantees.find(prop_name);
17  if (it == _guarantees.end())
18  return false;
19
20  auto it2 = it->second.find(guarantee);
21  return it2 != it->second.end();
22 }
std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees
 void LinearViscoelasticityBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Definition at line 117 of file LinearViscoelasticityBase.C.

118 {
119  _apparent_elasticity_tensor[_qp].zero();
123  _first_elasticity_tensor[_qp].zero();
124  _apparent_creep_strain[_qp].zero();
125
126  _springs_elasticity_tensors[_qp].resize(
127  (_has_longterm_dashpot && _components > 0) ? _components - 1 : _components, RankFourTensor());
128  _dashpot_viscosities[_qp].resize(_components, 0);
129  _viscous_strains[_qp].resize(_components, RankTwoTensor());
130
132  {
133  (*_first_elasticity_tensor_inv)[_qp].zero();
134  (*_springs_elasticity_tensors_inv)[_qp].resize(_components, RankFourTensor());
135  }
136 }
MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains
The internal strain variables required by the time-stepping procedure (generally, on a one-on-one bas...
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
bool _need_viscoelastic_properties_inverse
If active, indicates that we need to call computeQpViscoelasticPropertiesInv()
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor
Apparent elasticity tensor. This is NOT the elasticity tensor of the material.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain.
unsigned int _components
This is the number of internal variables required by the model.
MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains.
MaterialProperty< RankFourTensor > & _instantaneous_elasticity_tensor_inv
Inverse of the instaneous elasticity tensor.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.
 void GuaranteeProvider::issueGuarantee ( const MaterialPropertyName & prop_name, Guarantee guarantee )
protectedinherited

Definition at line 25 of file GuaranteeProvider.C.

26 {
27  // intentional insertion
28  _guarantees[prop_name].insert(guarantee);
29 }
std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees
 void LinearViscoelasticityBase::recomputeQpApparentProperties ( unsigned int qp )
inherited

Compute the apparent properties at a quadrature point.

This initializes the internal time-stepping scheme, and must be called at the beginning of the time step.

This method is called by LinearViscoelasticityManager.

Definition at line 139 of file LinearViscoelasticityBase.C.

Referenced by LinearViscoelasticityBase::computeQpElasticityTensor().

140 {
141  unsigned int qp_prev = _qp;
142  _qp = qp;
143
144  if (_t_step >= 1)
145  _step_zero = false;
146
147  // 1. we get the viscoelastic properties and their inverse if needed
151
152  // 2. we update the internal viscous strains from the previous time step
154
155  // 3. we compute the apparent elasticity tensor
157
158  // 4. we transform the internal viscous strains in an apparent creep strain
159  if (!_step_zero)
161
162  _qp = qp_prev;
163 }
bool _need_viscoelastic_properties_inverse
If active, indicates that we need to call computeQpViscoelasticPropertiesInv()
virtual void computeQpApparentElasticityTensors()=0
This method computes the apparent elasticity tensor used in the internal time-stepping scheme...
virtual void computeQpViscoelasticProperties()=0
This method assigns the mechanical properties of each spring and dashpot in the system.
virtual void computeQpApparentCreepStrain()=0
This method computes the apparent creep strain corresponding to the current viscous_strain of each da...
virtual void computeQpViscoelasticPropertiesInv()
This method computes the inverse elasticity tensor of each spring in the system (if required)...
virtual void updateQpViscousStrains()=0
Update the internal viscous strains at a quadrature point.
 void GuaranteeProvider::revokeGuarantee ( const MaterialPropertyName & prop_name, Guarantee guarantee )
protectedinherited

Definition at line 32 of file GuaranteeProvider.C.

Referenced by ComputeElasticityTensorCP::ComputeElasticityTensorCP().

33 {
34  auto it = _guarantees.find(prop_name);
35  if (it != _guarantees.end())
36  it->second.erase(guarantee);
37 }
std::map< MaterialPropertyName, std::set< Guarantee > > _guarantees
 void GeneralizedMaxwellBase::updateQpViscousStrains ( )
finalprotectedvirtualinherited

Update the internal viscous strains at a quadrature point.

Calling this method is required at the end of each time step to update the internal time-stepping scheme correctly.

This method is pure virtual. Inherited classes must override it.

This method is related to the internal time-stepping scheme. It should only be overwritten by classes that inherit directly from LinearViscoelasticityBase, and that represent a different spring-dashpot assembly. See GeneralizedKelvinVoigtBase or GeneralizedMaxwellBase for example.

Implements LinearViscoelasticityBase.

Definition at line 25 of file GeneralizedMaxwellBase.C.

26 {
27  RankTwoTensor effective_strain = _elastic_strain_old[_qp] + _creep_strain_old[_qp];
29  effective_strain += (*_driving_eigenstrain)[_qp];
30
31  for (unsigned int i = 0; i < _springs_elasticity_tensors[_qp].size(); ++i)
32  {
33  Real theta_i = computeTheta(_dt_old, _dashpot_viscosities[_qp][i]);
34  Real gamma = _dashpot_viscosities[_qp][i] / (_dt_old * theta_i);
35  _viscous_strains[_qp][i] =
36  _viscous_strains_old[_qp][i] *
37  ((_dashpot_viscosities[_qp][i] * gamma - _dt_old * (1. - theta_i) * gamma) /
38  (_dashpot_viscosities[_qp][i] * (1. + gamma)));
39  _viscous_strains[_qp][i] +=
40  effective_strain * ((_dashpot_viscosities[_qp][i] + _dt_old * (1. - theta_i) * gamma) /
41  (_dashpot_viscosities[_qp][i] * (1. + gamma)));
42  }
43
45  {
46  Real theta_i = computeTheta(_dt_old, _dashpot_viscosities[_qp].back());
47  _viscous_strains[_qp].back() = effective_strain / theta_i;
48  _viscous_strains[_qp].back() -= _viscous_strains_old[_qp].back() * ((1. - theta_i) / theta_i);
49  }
50 }
MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains
The internal strain variables required by the time-stepping procedure (generally, on a one-on-one bas...
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
MaterialProperty< std::vector< RankFourTensor > > & _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
previous value of the elastic strain for update purposes
MaterialProperty< std::vector< Real > > & _dashpot_viscosities
List of viscosities of each subsequent spring in the chain.
Real computeTheta(Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity.
const MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains_old
bool _has_driving_eigenstrain
Indicates if the model is only driven by the stress, or also by an additional eigenstrain.
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Previous value of the true creep strain for update purposes.

Member Data Documentation

 MaterialProperty& LinearViscoelasticityBase::_apparent_creep_strain
protectedinherited

The apparent creep strain resulting from the internal viscous strains.

Definition at line 223 of file LinearViscoelasticityBase.h.

 const MaterialProperty& LinearViscoelasticityBase::_apparent_creep_strain_old
protectedinherited

Definition at line 224 of file LinearViscoelasticityBase.h.

 MaterialProperty& LinearViscoelasticityBase::_apparent_elasticity_tensor
protectedinherited

Apparent elasticity tensor. This is NOT the elasticity tensor of the material.

Definition at line 187 of file LinearViscoelasticityBase.h.

 MaterialProperty& LinearViscoelasticityBase::_apparent_elasticity_tensor_inv
protectedinherited

Inverse of the apparent elasticity tensor.

Definition at line 189 of file LinearViscoelasticityBase.h.

 std::string ComputeElasticityTensorBase::_base_name
protectedinherited
 RankFourTensor GeneralizedMaxwellModel::_C0
protected

The elasticity tensor associated with the first spring.

This is !not! the true elasticity tensor of the material

Definition at line 37 of file GeneralizedMaxwellModel.h.

Referenced by computeQpViscoelasticProperties(), and GeneralizedMaxwellModel().

 std::vector GeneralizedMaxwellModel::_Ci
protected

The elasticity tensor of each subsequent spring.

Definition at line 39 of file GeneralizedMaxwellModel.h.

Referenced by computeQpViscoelasticProperties(), and GeneralizedMaxwellModel().

 unsigned int LinearViscoelasticityBase::_components
protectedinherited

This is the number of internal variables required by the model.

This must be set in the constructor of an inherited class. See GeneralizedKelvinVoigtModel for example.

Definition at line 204 of file LinearViscoelasticityBase.h.

 const MaterialProperty& LinearViscoelasticityBase::_creep_strain_old
protectedinherited

Previous value of the true creep strain for update purposes.

This is calculated by a ComputeLinearViscoelasticStress or a LinearViscoelasticStressUpdate material.

Definition at line 233 of file LinearViscoelasticityBase.h.

Referenced by GeneralizedMaxwellBase::updateQpViscousStrains().

 MaterialProperty >& LinearViscoelasticityBase::_dashpot_viscosities
protectedinherited
 const MaterialProperty* LinearViscoelasticityBase::_driving_eigenstrain
protectedinherited

Pointer to the value of the driving eigenstrain.

Definition at line 243 of file LinearViscoelasticityBase.h.

 std::string LinearViscoelasticityBase::_driving_eigenstrain_name
protectedinherited

Name of the eigenstrain that drives the additional creep strain.

Definition at line 241 of file LinearViscoelasticityBase.h.

 const MaterialProperty& LinearViscoelasticityBase::_elastic_strain_old
protectedinherited

previous value of the elastic strain for update purposes

Definition at line 227 of file LinearViscoelasticityBase.h.

Referenced by GeneralizedMaxwellBase::updateQpViscousStrains().

 MaterialProperty& ComputeElasticityTensorBase::_elasticity_tensor
protectedinherited
 std::string ComputeElasticityTensorBase::_elasticity_tensor_name
protectedinherited
 std::vector GeneralizedMaxwellModel::_eta_i
protected

The viscosity of each dashpot.

Definition at line 41 of file GeneralizedMaxwellModel.h.

Referenced by computeQpViscoelasticProperties(), and GeneralizedMaxwellModel().

 MaterialProperty& LinearViscoelasticityBase::_first_elasticity_tensor
protectedinherited

Elasticity tensor of a stand-alone elastic spring in the chain.

Definition at line 207 of file LinearViscoelasticityBase.h.

 MaterialProperty* LinearViscoelasticityBase::_first_elasticity_tensor_inv
protectedinherited

Definition at line 208 of file LinearViscoelasticityBase.h.

 bool LinearViscoelasticityBase::_force_recompute_properties
protectedinherited

If activated, the time-stepping scheme will be re-initialized at each step of the solver.

This may be required for models in which the mechanical properties vary following other variables. If the mechanical properties are constant through the time step, this can be set to false.

Definition at line 250 of file LinearViscoelasticityBase.h.

Referenced by LinearViscoelasticityBase::computeQpElasticityTensor().

 bool LinearViscoelasticityBase::_has_driving_eigenstrain
protectedinherited

Indicates if the model is only driven by the stress, or also by an additional eigenstrain.

Definition at line 239 of file LinearViscoelasticityBase.h.

 bool LinearViscoelasticityBase::_has_longterm_dashpot
protectedinherited

Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring.

Definition at line 199 of file LinearViscoelasticityBase.h.

 MaterialProperty& LinearViscoelasticityBase::_instantaneous_elasticity_tensor
protectedinherited

Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.

Definition at line 192 of file LinearViscoelasticityBase.h.

 MaterialProperty& LinearViscoelasticityBase::_instantaneous_elasticity_tensor_inv
protectedinherited

Inverse of the instaneous elasticity tensor.

Definition at line 194 of file LinearViscoelasticityBase.h.

 IntegrationRule LinearViscoelasticityBase::_integration_rule
protectedinherited

Determines how theta is computed.

Definition at line 182 of file LinearViscoelasticityBase.h.

Referenced by LinearViscoelasticityBase::computeTheta().

 bool LinearViscoelasticityBase::_need_viscoelastic_properties_inverse
protectedinherited

If active, indicates that we need to call computeQpViscoelasticPropertiesInv()

Definition at line 197 of file LinearViscoelasticityBase.h.

 Function* const ComputeElasticityTensorBase::_prefactor_function
protectedinherited

prefactor function to multiply the elasticity tensor with

Definition at line 34 of file ComputeElasticityTensorBase.h.

 RankFourTensor GeneralizedMaxwellModel::_S0
protected

The inverse of the elasticity tensor of the first spring.

Definition at line 44 of file GeneralizedMaxwellModel.h.

Referenced by computeQpViscoelasticPropertiesInv(), and GeneralizedMaxwellModel().

 std::vector GeneralizedMaxwellModel::_Si
protected

The inverse of each subsequent spring elasticity tensor.

Definition at line 46 of file GeneralizedMaxwellModel.h.

Referenced by computeQpViscoelasticPropertiesInv(), and GeneralizedMaxwellModel().

 MaterialProperty >& LinearViscoelasticityBase::_springs_elasticity_tensors
protectedinherited
 MaterialProperty >* LinearViscoelasticityBase::_springs_elasticity_tensors_inv
protectedinherited

Definition at line 211 of file LinearViscoelasticityBase.h.

 bool& LinearViscoelasticityBase::_step_zero
protectedinherited

Definition at line 252 of file LinearViscoelasticityBase.h.

 const MaterialProperty& LinearViscoelasticityBase::_stress_old
protectedinherited

previous value of the stress for update purposes

Definition at line 236 of file LinearViscoelasticityBase.h.

Referenced by GeneralizedKelvinVoigtBase::updateQpViscousStrains().

 Real LinearViscoelasticityBase::_theta
protectedinherited

User-defined value for theta.

Definition at line 184 of file LinearViscoelasticityBase.h.

 MaterialProperty >& LinearViscoelasticityBase::_viscous_strains
protectedinherited

The internal strain variables required by the time-stepping procedure (generally, on a one-on-one basis with the number of dashpot).

Definition at line 219 of file LinearViscoelasticityBase.h.

 const MaterialProperty >& LinearViscoelasticityBase::_viscous_strains_old
protectedinherited

Definition at line 220 of file LinearViscoelasticityBase.h.

The documentation for this class was generated from the following files: