www.mooseframework.org
GeneralizedKelvinVoigtBase.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 
13 
14 InputParameters
16 {
17  InputParameters params = LinearViscoelasticityBase::validParams();
18  params.set<bool>("need_viscoelastic_properties_inverse") = true;
19  params.suppressParameter<bool>("need_viscoelastic_properties_inverse");
20  return params;
21 }
22 
23 GeneralizedKelvinVoigtBase::GeneralizedKelvinVoigtBase(const InputParameters & parameters)
24  : LinearViscoelasticityBase(parameters),
25  _first_elasticity_tensor_old(
26  getMaterialPropertyOld<RankFourTensor>(_base_name + "spring_elasticity_tensor_0")),
27  _first_elasticity_tensor_inv_old(
28  getMaterialPropertyOld<RankFourTensor>(_base_name + "spring_elasticity_tensor_0_inv"))
29 {
30 }
31 
32 void
34 {
35  if (_t_step <= 1)
36  return;
37 
38  RankTwoTensor effective_stress = _first_elasticity_tensor_old[_qp] * _elastic_strain_old[_qp];
39 
41  effective_stress += _first_elasticity_tensor_old[_qp] * (*_driving_eigenstrain_old)[_qp];
42 
43  for (unsigned int i = 0; i < _springs_elasticity_tensors.size(); ++i)
44  {
45  Real theta_i = computeTheta(_dt_old, (*_dashpot_viscosities_old[i])[_qp]);
46  Real gamma = (*_dashpot_viscosities_old[i])[_qp] / (_dt_old * theta_i);
47  (*_viscous_strains[i])[_qp] =
48  ((*_springs_elasticity_tensors_inv_old[i])[_qp] * effective_stress) /
49  (theta_i * (1. + gamma));
50  (*_viscous_strains[i])[_qp] += (*_viscous_strains_old[i])[_qp] *
51  (gamma / (theta_i * (1. + gamma)) - (1. - theta_i) / theta_i);
52  }
53 
55  {
56  (*_viscous_strains.back())[_qp] = (_first_elasticity_tensor_inv_old[_qp] * effective_stress) *
57  (_dt_old / (*_dashpot_viscosities_old.back())[_qp]);
58  (*_viscous_strains.back())[_qp] += (*_viscous_strains_old.back())[_qp];
59  }
60 }
61 
62 void
64 {
66  _elasticity_tensor_inv[_qp] = (*_first_elasticity_tensor_inv)[_qp];
67  _apparent_elasticity_tensor_inv[_qp] = (*_first_elasticity_tensor_inv)[_qp];
68 
69  for (unsigned int i = 0; i < _springs_elasticity_tensors.size(); ++i)
70  {
71  Real theta_i = computeTheta(_dt, (*_dashpot_viscosities[i])[_qp]);
72  Real gamma = (*_dashpot_viscosities[i])[_qp] / (_dt * theta_i);
74  (*_springs_elasticity_tensors_inv[i])[_qp] / (1. + gamma);
75  }
76 
78  {
79  Real theta_i = computeTheta(_dt, (*_dashpot_viscosities.back())[_qp]);
80  Real gamma = (*_dashpot_viscosities.back())[_qp] / (_dt * theta_i);
81  _apparent_elasticity_tensor_inv[_qp] += (*_first_elasticity_tensor_inv)[_qp] / gamma;
82  }
83 
85 }
86 
87 void
89 {
90  _apparent_creep_strain[_qp].zero();
91 
92  for (unsigned int i = 0; i < _springs_elasticity_tensors.size(); ++i)
93  {
94  Real theta_i = computeTheta(_dt, (*_dashpot_viscosities[i])[_qp]);
95  Real gamma = (*_dashpot_viscosities[i])[_qp] / (_dt * theta_i);
96  _apparent_creep_strain[_qp] += (*_viscous_strains[i])[_qp] * (gamma / (1. + gamma));
97  }
98 
100  _apparent_creep_strain[_qp] += (*_viscous_strains.back())[_qp];
101 
103  {
104  RankFourTensor cumulated_driving_tensor;
105  cumulated_driving_tensor.zero();
106  for (unsigned int i = 0; i < _springs_elasticity_tensors.size(); ++i)
107  {
108  double theta_i = computeTheta(_dt, (*_dashpot_viscosities[i])[_qp]);
109  double gamma = (*_dashpot_viscosities[i])[_qp] / (_dt * theta_i);
110  cumulated_driving_tensor += (*_springs_elasticity_tensors_inv[i])[_qp] / (1. + gamma);
111  }
112 
113  _apparent_creep_strain[_qp] +=
114  (_elasticity_tensor[_qp] * cumulated_driving_tensor) * (*_driving_eigenstrain)[_qp];
115 
117  {
118  double theta_i = computeTheta(_dt, (*_dashpot_viscosities.back())[_qp]);
119  double gamma = (*_dashpot_viscosities.back())[_qp] / (_dt * theta_i);
120  _apparent_creep_strain[_qp] += (*_driving_eigenstrain)[_qp] / gamma;
121  }
122  }
123 }
LinearViscoelasticityBase::_first_elasticity_tensor
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
Definition: LinearViscoelasticityBase.h:217
LinearViscoelasticityBase::_apparent_creep_strain
MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains.
Definition: LinearViscoelasticityBase.h:241
GeneralizedKelvinVoigtBase::_first_elasticity_tensor_inv_old
const MaterialProperty< RankFourTensor > & _first_elasticity_tensor_inv_old
Definition: GeneralizedKelvinVoigtBase.h:49
LinearViscoelasticityBase::_apparent_elasticity_tensor
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor
Apparent elasticity tensor. This is NOT the elasticity tensor of the material.
Definition: LinearViscoelasticityBase.h:197
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
GeneralizedKelvinVoigtBase::_first_elasticity_tensor_old
const MaterialProperty< RankFourTensor > & _first_elasticity_tensor_old
old material properties required for the update of the viscoelastic strain
Definition: GeneralizedKelvinVoigtBase.h:48
GeneralizedKelvinVoigtBase
This class represents an assembly of springs and dashpots following a generalized Kelvin-Voigt model ...
Definition: GeneralizedKelvinVoigtBase.h:35
LinearViscoelasticityBase::_driving_eigenstrain
const MaterialProperty< RankTwoTensor > * _driving_eigenstrain
Pointer to the value of the driving eigenstrain.
Definition: LinearViscoelasticityBase.h:259
LinearViscoelasticityBase::_dashpot_viscosities_old
std::vector< const MaterialProperty< Real > * > _dashpot_viscosities_old
Definition: LinearViscoelasticityBase.h:229
LinearViscoelasticityBase::_has_driving_eigenstrain
bool _has_driving_eigenstrain
Indicates if the model is only driven by the stress, or also by an additional eigenstrain.
Definition: LinearViscoelasticityBase.h:255
LinearViscoelasticityBase::computeTheta
Real computeTheta(Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity.
Definition: LinearViscoelasticityBase.C:216
LinearViscoelasticityBase::validParams
static InputParameters validParams()
Definition: LinearViscoelasticityBase.C:16
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
LinearViscoelasticityBase::_viscous_strains
std::vector< MaterialProperty< RankTwoTensor > * > _viscous_strains
Definition: LinearViscoelasticityBase.h:236
GeneralizedKelvinVoigtBase::GeneralizedKelvinVoigtBase
GeneralizedKelvinVoigtBase(const InputParameters &parameters)
Definition: GeneralizedKelvinVoigtBase.C:23
GeneralizedKelvinVoigtBase::computeQpApparentElasticityTensors
virtual void computeQpApparentElasticityTensors() final
This method computes the apparent elasticity tensor used in the internal time-stepping scheme.
Definition: GeneralizedKelvinVoigtBase.C:63
LinearViscoelasticityBase::_apparent_elasticity_tensor_inv
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.
Definition: LinearViscoelasticityBase.h:199
LinearViscoelasticityBase::_springs_elasticity_tensors_inv_old
std::vector< const MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors_inv_old
Definition: LinearViscoelasticityBase.h:224
ComputeElasticityTensorBase::_elasticity_tensor
MaterialProperty< RankFourTensor > & _elasticity_tensor
Definition: ComputeElasticityTensorBase.h:40
GeneralizedKelvinVoigtBase::updateQpViscousStrains
virtual void updateQpViscousStrains() final
Update the internal viscous strains at a quadrature point.
Definition: GeneralizedKelvinVoigtBase.C:33
defineLegacyParams
defineLegacyParams(GeneralizedKelvinVoigtBase)
LinearViscoelasticityBase::_viscous_strains_old
std::vector< const MaterialProperty< RankTwoTensor > * > _viscous_strains_old
Definition: LinearViscoelasticityBase.h:237
RankFourTensorTempl< Real >
LinearViscoelasticityBase::_elastic_strain_old
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
previous value of the elastic strain for update purposes
Definition: LinearViscoelasticityBase.h:246
GeneralizedKelvinVoigtBase::computeQpApparentCreepStrain
virtual void computeQpApparentCreepStrain() final
This method computes the apparent creep strain corresponding to the current viscous_strain of each da...
Definition: GeneralizedKelvinVoigtBase.C:88
RankTwoTensorTempl< Real >
LinearViscoelasticityBase::_elasticity_tensor_inv
MaterialProperty< RankFourTensor > & _elasticity_tensor_inv
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
Definition: LinearViscoelasticityBase.h:204
GeneralizedKelvinVoigtBase::validParams
static InputParameters validParams()
Definition: GeneralizedKelvinVoigtBase.C:15
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
GeneralizedKelvinVoigtBase.h
LinearViscoelasticityBase
This class is a base class for materials consisting of an assembly of linear springs and dashpots.
Definition: LinearViscoelasticityBase.h:81