www.mooseframework.org
LinearViscoelasticityBase.h
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 
10 #pragma once
11 
13 #include "RankFourTensor.h"
14 #include "RankTwoTensor.h"
15 
17 
18 template <>
20 
82 {
83 public:
87  enum class IntegrationRule
88  {
92  MidPoint,
94  Newmark,
97  };
98 
99  static InputParameters validParams();
100 
101  LinearViscoelasticityBase(const InputParameters & parameters);
102 
109  void recomputeQpApparentProperties(unsigned int qp);
110 
111 protected:
112  virtual void initQpStatefulProperties() override;
114  virtual void computeQpElasticityTensor() final;
115 
125  virtual void computeQpViscoelasticProperties() = 0;
126 
138  virtual void computeQpViscoelasticPropertiesInv();
139 
154  virtual void computeQpApparentElasticityTensors() = 0;
155 
166  virtual void computeQpApparentCreepStrain() = 0;
167 
179  virtual void updateQpViscousStrains() = 0;
180 
187 
189  Real computeTheta(Real dt, Real viscosity) const;
190 
194  Real _theta;
195 
200 
202  // MaterialProperty<RankFourTensor> & _instantaneous_elasticity_tensor;
205 
214  unsigned int _components;
215 
220 
222  std::vector<MaterialProperty<RankFourTensor> *> _springs_elasticity_tensors;
223  std::vector<MaterialProperty<RankFourTensor> *> _springs_elasticity_tensors_inv;
224  std::vector<const MaterialProperty<RankFourTensor> *> _springs_elasticity_tensors_inv_old;
226 
228  std::vector<MaterialProperty<Real> *> _dashpot_viscosities;
229  std::vector<const MaterialProperty<Real> *> _dashpot_viscosities_old;
231 
236  std::vector<MaterialProperty<RankTwoTensor> *> _viscous_strains;
237  std::vector<const MaterialProperty<RankTwoTensor> *> _viscous_strains_old;
239 
242  const MaterialProperty<RankTwoTensor> & _apparent_creep_strain_old;
244 
246  const MaterialProperty<RankTwoTensor> & _elastic_strain_old;
252  const MaterialProperty<RankTwoTensor> & _creep_strain_old;
253 
259  const MaterialProperty<RankTwoTensor> * _driving_eigenstrain;
260  const MaterialProperty<RankTwoTensor> * _driving_eigenstrain_old;
262 
269 
271  bool & _step_zero;
272 };
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::_first_elasticity_tensor_inv
MaterialProperty< RankFourTensor > * _first_elasticity_tensor_inv
Definition: LinearViscoelasticityBase.h:218
LinearViscoelasticityBase::computeQpElasticityTensor
virtual void computeQpElasticityTensor() final
Inherited from ComputeElasticityTensorBase.
Definition: LinearViscoelasticityBase.C:192
LinearViscoelasticityBase::_apparent_creep_strain
MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains.
Definition: LinearViscoelasticityBase.h:241
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::IntegrationRule::BackwardEuler
theta = 1
LinearViscoelasticityBase::_integration_rule
IntegrationRule _integration_rule
Determines how theta is computed.
Definition: LinearViscoelasticityBase.h:192
LinearViscoelasticityBase::_driving_eigenstrain_name
std::string _driving_eigenstrain_name
Name of the eigenstrain that drives the additional creep strain.
Definition: LinearViscoelasticityBase.h:257
LinearViscoelasticityBase::_apparent_creep_strain_old
const MaterialProperty< RankTwoTensor > & _apparent_creep_strain_old
Definition: LinearViscoelasticityBase.h:242
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
LinearViscoelasticityBase::declareViscoelasticProperties
void declareViscoelasticProperties()
Declare all necessary MaterialProperties for the model.
Definition: LinearViscoelasticityBase.C:102
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::computeQpViscoelasticPropertiesInv
virtual void computeQpViscoelasticPropertiesInv()
This method computes the inverse elasticity tensor of each spring in the system (if required).
Definition: LinearViscoelasticityBase.C:199
LinearViscoelasticityBase::updateQpViscousStrains
virtual void updateQpViscousStrains()=0
Update the internal viscous strains at a quadrature point.
LinearViscoelasticityBase::computeQpApparentCreepStrain
virtual void computeQpApparentCreepStrain()=0
This method computes the apparent creep strain corresponding to the current viscous_strain of each da...
LinearViscoelasticityBase::recomputeQpApparentProperties
void recomputeQpApparentProperties(unsigned int qp)
Compute the apparent properties at a quadrature point.
Definition: LinearViscoelasticityBase.C:165
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::_creep_strain_old
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Previous value of the true creep strain for update purposes.
Definition: LinearViscoelasticityBase.h:252
validParams< LinearViscoelasticityBase >
InputParameters validParams< LinearViscoelasticityBase >()
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
ComputeElasticityTensorBase
ComputeElasticityTensorBase the base class for computing elasticity tensors.
Definition: ComputeElasticityTensorBase.h:25
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::_driving_eigenstrain_old
const MaterialProperty< RankTwoTensor > * _driving_eigenstrain_old
Definition: LinearViscoelasticityBase.h:260
LinearViscoelasticityBase::_theta
Real _theta
User-defined value for theta.
Definition: LinearViscoelasticityBase.h:194
LinearViscoelasticityBase::_viscous_strains
std::vector< MaterialProperty< RankTwoTensor > * > _viscous_strains
Definition: LinearViscoelasticityBase.h:236
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
LinearViscoelasticityBase::_need_viscoelastic_properties_inverse
bool _need_viscoelastic_properties_inverse
If active, indicates that we need to call computeQpViscoelasticPropertiesInv()
Definition: LinearViscoelasticityBase.h:207
LinearViscoelasticityBase::computeQpApparentElasticityTensors
virtual void computeQpApparentElasticityTensors()=0
This method computes the apparent elasticity tensor used in the internal time-stepping scheme.
LinearViscoelasticityBase::IntegrationRule::MidPoint
theta = 0.5
LinearViscoelasticityBase::computeQpViscoelasticProperties
virtual void computeQpViscoelasticProperties()=0
This method assigns the mechanical properties of each spring and dashpot in the system.
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
LinearViscoelasticityBase::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: LinearViscoelasticityBase.C:135
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
LinearViscoelasticityBase::IntegrationRule::Newmark
theta defined by the user
LinearViscoelasticityBase::_force_recompute_properties
bool _force_recompute_properties
If activated, the time-stepping scheme will be re-initialized at each step of the solver.
Definition: LinearViscoelasticityBase.h:268
LinearViscoelasticityBase::LinearViscoelasticityBase
LinearViscoelasticityBase(const InputParameters &parameters)
Definition: LinearViscoelasticityBase.C:50
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
LinearViscoelasticityBase::_step_zero
bool & _step_zero
checks whether we are at the first time step
Definition: LinearViscoelasticityBase.h:271
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
LinearViscoelasticityBase::IntegrationRule::Zienkiewicz
theta automatically adjusted as a function of the time step and the viscosity
ComputeElasticityTensorBase.h
LinearViscoelasticityBase::IntegrationRule
IntegrationRule
Determines how theta is calculated for the time-integration system.
Definition: LinearViscoelasticityBase.h:87
LinearViscoelasticityBase::_components
unsigned int _components
This is the number of internal variables required by the model.
Definition: LinearViscoelasticityBase.h:214
LinearViscoelasticityBase
This class is a base class for materials consisting of an assembly of linear springs and dashpots.
Definition: LinearViscoelasticityBase.h:81