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 
77 {
78 public:
82  enum class IntegrationRule
83  {
87  MidPoint,
89  Newmark,
92  };
93 
95 
97 
104  void recomputeQpApparentProperties(unsigned int qp);
105 
106 protected:
107  virtual void initQpStatefulProperties() override;
109  virtual void computeQpElasticityTensor() final;
110 
120  virtual void computeQpViscoelasticProperties() = 0;
121 
133  virtual void computeQpViscoelasticPropertiesInv();
134 
149  virtual void computeQpApparentElasticityTensors() = 0;
150 
161  virtual void computeQpApparentCreepStrain() = 0;
162 
174  virtual void updateQpViscousStrains() = 0;
175 
182 
184  Real computeTheta(Real dt, Real viscosity) const;
185 
189  Real _theta;
190 
195 
197  // MaterialProperty<RankFourTensor> & _instantaneous_elasticity_tensor;
200 
209  unsigned int _components;
210 
215 
221 
226 
234 
239 
248 
257 
264 
266  bool & _step_zero;
267 };
bool & _step_zero
checks whether we are at the first time step
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors_inv
LinearViscoelasticityBase(const InputParameters &parameters)
ComputeElasticityTensorBase the base class for computing elasticity tensors.
void recomputeQpApparentProperties(unsigned int qp)
Compute the apparent properties at a quadrature point.
const MaterialProperty< RankTwoTensor > & _apparent_creep_strain_old
std::vector< MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors
List of elasticity tensor of each subsequent spring in the chain.
std::vector< const MaterialProperty< RankTwoTensor > * > _viscous_strains_old
virtual void initQpStatefulProperties() override
void declareViscoelasticProperties()
Declare all necessary MaterialProperties for the model.
static InputParameters validParams()
std::vector< const MaterialProperty< Real > * > _dashpot_viscosities_old
bool _has_longterm_dashpot
Indicates if the spring-dashpot assembly has a single dashpot not associated with a spring...
bool _force_recompute_properties
If activated, the time-stepping scheme will be re-initialized at each step of the solver...
bool _need_viscoelastic_properties_inverse
If active, indicates that we need to call computeQpViscoelasticPropertiesInv()
theta automatically adjusted as a function of the time step and the viscosity
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor
Apparent elasticity tensor. This is NOT the elasticity tensor of the material.
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
previous value of the elastic strain for update purposes
std::vector< MaterialProperty< Real > * > _dashpot_viscosities
List of viscosities of each subsequent dashpot in the chain.
IntegrationRule
Determines how theta is calculated for the time-integration system.
MaterialProperty< RankFourTensor > & _first_elasticity_tensor
Elasticity tensor of a stand-alone elastic spring in the chain.
MaterialProperty< RankFourTensor > * _first_elasticity_tensor_inv
std::vector< const MaterialProperty< RankFourTensor > * > _springs_elasticity_tensors_inv_old
Real _theta
User-defined value for theta.
virtual void computeQpApparentElasticityTensors()=0
This method computes the apparent elasticity tensor used in the internal time-stepping scheme...
std::string _driving_eigenstrain_name
Name of the eigenstrain that drives the additional creep strain.
virtual void computeQpViscoelasticProperties()=0
This method assigns the mechanical properties of each spring and dashpot in the system.
const MaterialProperty< RankTwoTensor > *const _driving_eigenstrain
Pointer to the value of the driving eigenstrain.
unsigned int _components
This is the number of internal variables required by the model.
virtual void computeQpElasticityTensor() final
Inherited from ComputeElasticityTensorBase.
MaterialProperty< RankTwoTensor > & _apparent_creep_strain
The apparent creep strain resulting from the internal viscous strains.
This class is a base class for materials consisting of an assembly of linear springs and dashpots...
virtual void computeQpApparentCreepStrain()=0
This method computes the apparent creep strain corresponding to the current viscous_strain of each da...
bool _has_driving_eigenstrain
Indicates if the model is only driven by the stress, or also by an additional eigenstrain.
MaterialProperty< RankFourTensor > & _elasticity_tensor_inv
Instantaneous elasticity tensor. This IS the real elasticity tensor of the material.
const InputParameters & parameters() const
IntegrationRule _integration_rule
Determines how theta is computed.
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Previous value of the true creep strain for update purposes.
std::vector< MaterialProperty< RankTwoTensor > * > _viscous_strains
const MaterialProperty< RankTwoTensor > *const _driving_eigenstrain_old
virtual void computeQpViscoelasticPropertiesInv()
This method computes the inverse elasticity tensor of each spring in the system (if required)...
Real computeTheta(Real dt, Real viscosity) const
Provides theta as a function of the time step and a viscosity.
virtual void updateQpViscousStrains()=0
Update the internal viscous strains at a quadrature point.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.