www.mooseframework.org
LinearViscoelasticityBase.h
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 #ifndef LINEARVISCOELASTICITYBASE_H
8 #define LINEARVISCOELASTICITYBASE_H
9 
11 #include "RankFourTensor.h"
12 #include "RankTwoTensor.h"
13 
15 
16 template <>
18 
80 {
81 public:
85  enum class IntegrationRule
86  {
90  MidPoint,
92  Newmark,
95  };
96 
97  LinearViscoelasticityBase(const InputParameters & parameters);
98 
106  void recomputeQpApparentProperties(unsigned int qp);
107 
108 protected:
109  virtual void initQpStatefulProperties() override;
111  virtual void computeQpElasticityTensor() final;
112 
122  virtual void computeQpViscoelasticProperties() = 0;
123 
135  virtual void computeQpViscoelasticPropertiesInv();
136 
151  virtual void computeQpApparentElasticityTensors() = 0;
152 
163  virtual void computeQpApparentCreepStrain() = 0;
164 
176  virtual void updateQpViscousStrains() = 0;
177 
179  Real computeTheta(Real dt, Real viscosity) const;
180 
184  Real _theta;
185 
187  MaterialProperty<RankFourTensor> & _apparent_elasticity_tensor;
189  MaterialProperty<RankFourTensor> & _apparent_elasticity_tensor_inv;
190 
192  MaterialProperty<RankFourTensor> & _instantaneous_elasticity_tensor;
194  MaterialProperty<RankFourTensor> & _instantaneous_elasticity_tensor_inv;
195 
204  unsigned int _components;
205 
207  MaterialProperty<RankFourTensor> & _first_elasticity_tensor;
208  MaterialProperty<RankFourTensor> * _first_elasticity_tensor_inv;
210  MaterialProperty<std::vector<RankFourTensor>> & _springs_elasticity_tensors;
211  MaterialProperty<std::vector<RankFourTensor>> * _springs_elasticity_tensors_inv;
213  MaterialProperty<std::vector<Real>> & _dashpot_viscosities;
214 
219  MaterialProperty<std::vector<RankTwoTensor>> & _viscous_strains;
220  const MaterialProperty<std::vector<RankTwoTensor>> & _viscous_strains_old;
221 
223  MaterialProperty<RankTwoTensor> & _apparent_creep_strain;
224  const MaterialProperty<RankTwoTensor> & _apparent_creep_strain_old;
225 
227  const MaterialProperty<RankTwoTensor> & _elastic_strain_old;
233  const MaterialProperty<RankTwoTensor> & _creep_strain_old;
234 
236  const MaterialProperty<RankTwoTensor> & _stress_old;
237 
243  const MaterialProperty<RankTwoTensor> * _driving_eigenstrain;
244 
251 
252  bool & _step_zero;
253 };
254 
255 #endif // LINEARVISCOELASTICITYBASE_H
ComputeElasticityTensorBase the base class for computing elasticity tensors.
LinearViscoelasticityBase(const InputParameters &parameters)
void recomputeQpApparentProperties(unsigned int qp)
Compute the apparent properties at a quadrature point.
MaterialProperty< std::vector< RankTwoTensor > > & _viscous_strains
The internal strain variables required by the time-stepping procedure (generally, on a one-on-one bas...
const MaterialProperty< RankTwoTensor > & _apparent_creep_strain_old
InputParameters validParams< LinearViscoelasticityBase >()
virtual void initQpStatefulProperties() override
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...
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.
theta automatically adjusted as a function of the time step and the viscosity
double FORTRAN_CALL() viscosity(double &rho, double &T)
MaterialProperty< std::vector< RankFourTensor > > * _springs_elasticity_tensors_inv
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
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
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< RankTwoTensor > & _stress_old
previous value of the stress for update purposes
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< std::vector< RankTwoTensor > > & _viscous_strains_old
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...
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 > & _instantaneous_elasticity_tensor_inv
Inverse of the instaneous elasticity tensor.
IntegrationRule _integration_rule
Determines how theta is computed.
const MaterialProperty< RankTwoTensor > & _creep_strain_old
Previous value of the true creep strain for update purposes.
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.
MaterialProperty< RankFourTensor > & _apparent_elasticity_tensor_inv
Inverse of the apparent elasticity tensor.