www.mooseframework.org
Public Member Functions | Protected Attributes | List of all members
EshelbyTensor Class Reference

EshelbyTensor defines a strain increment and rotation increment, for finite strains. More...

#include <EshelbyTensor.h>

Inheritance diagram for EshelbyTensor:
[legend]

Public Member Functions

 EshelbyTensor (const InputParameters &parameters)
 
virtual void initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 

Protected Attributes

std::string _base_name
 
MaterialProperty< Real > & _sed
 
const MaterialProperty< Real > & _sed_old
 
MaterialProperty< RankTwoTensor > & _eshelby_tensor
 
const MaterialProperty< RankTwoTensor > & _stress
 
const MaterialProperty< RankTwoTensor > & _stress_old
 
const MaterialProperty< RankTwoTensor > * _strain_increment
 
const MaterialProperty< RankTwoTensor > * _mechanical_strain
 
std::vector< const VariableGradient * > _grad_disp
 
MaterialProperty< RealVectorValue > & _J_thermal_term_vec
 
const bool _has_temp
 
const VariableGradient & _grad_temp
 
const MaterialProperty< RankTwoTensor > * _total_deigenstrain_dT
 

Detailed Description

EshelbyTensor defines a strain increment and rotation increment, for finite strains.

Definition at line 18 of file EshelbyTensor.h.

Constructor & Destructor Documentation

EshelbyTensor::EshelbyTensor ( const InputParameters &  parameters)

Definition at line 29 of file EshelbyTensor.C.

30  : DerivativeMaterialInterface<Material>(parameters),
31  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
32  _sed(declareProperty<Real>(_base_name + "strain_energy_density")),
33  _sed_old(getMaterialPropertyOld<Real>(_base_name + "strain_energy_density")),
34  _eshelby_tensor(declareProperty<RankTwoTensor>(_base_name + "Eshelby_tensor")),
35  _stress(getMaterialProperty<RankTwoTensor>(_base_name + "stress")),
36  _stress_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "stress")),
37  _grad_disp(3),
38  _J_thermal_term_vec(declareProperty<RealVectorValue>("J_thermal_term_vec")),
39  _has_temp(isCoupled("temperature")),
40  _grad_temp(coupledGradient("temperature")),
41  _total_deigenstrain_dT(hasMaterialProperty<RankTwoTensor>("total_deigenstrain_dT")
42  ? &getMaterialProperty<RankTwoTensor>("total_deigenstrain_dT")
43  : nullptr)
44 {
45  unsigned int ndisp = coupledComponents("displacements");
46 
47  // Checking for consistency between mesh size and length of the provided displacements vector
48  if (ndisp != _mesh.dimension())
49  mooseError(
50  "The number of variables supplied in 'displacements' must match the mesh dimension.");
51 
52  // fetch coupled gradients
53  for (unsigned int i = 0; i < ndisp; ++i)
54  _grad_disp[i] = &coupledGradient("displacements", i);
55 
56  // set unused dimensions to zero
57  for (unsigned i = ndisp; i < 3; ++i)
58  _grad_disp[i] = &_grad_zero;
59 
61  mooseError("EshelbyTensor Error: To include thermal strain term in Fracture integral "
62  "calculation, must both couple temperature in DomainIntegral block and compute "
63  "total_deigenstrain_dT using ThermalFractureIntegral material model.");
64 
65  if (hasMaterialProperty<RankTwoTensor>(_base_name + "strain_increment"))
66  {
67  _strain_increment = &getMaterialProperty<RankTwoTensor>(_base_name + "strain_increment");
68  _mechanical_strain = nullptr;
69  }
70  else if (hasMaterialProperty<RankTwoTensor>(_base_name + "mechanical_strain"))
71  {
72  _mechanical_strain = &getMaterialProperty<RankTwoTensor>(_base_name + "mechanical_strain");
73  _strain_increment = nullptr;
74  }
75  else
76  mooseError("EshelbyTensor cannot find either mechanical_strain or strain_increment material "
77  "properties.");
78 }
const MaterialProperty< RankTwoTensor > * _total_deigenstrain_dT
Definition: EshelbyTensor.h:41
const MaterialProperty< Real > & _sed_old
Definition: EshelbyTensor.h:30
MaterialProperty< RealVectorValue > & _J_thermal_term_vec
Definition: EshelbyTensor.h:38
MaterialProperty< Real > & _sed
Definition: EshelbyTensor.h:29
std::vector< const VariableGradient * > _grad_disp
Definition: EshelbyTensor.h:36
const MaterialProperty< RankTwoTensor > * _mechanical_strain
Definition: EshelbyTensor.h:35
const VariableGradient & _grad_temp
Definition: EshelbyTensor.h:40
const MaterialProperty< RankTwoTensor > & _stress_old
Definition: EshelbyTensor.h:33
const MaterialProperty< RankTwoTensor > & _stress
Definition: EshelbyTensor.h:32
const bool _has_temp
Definition: EshelbyTensor.h:39
std::string _base_name
Definition: EshelbyTensor.h:27
const MaterialProperty< RankTwoTensor > * _strain_increment
Definition: EshelbyTensor.h:34
MaterialProperty< RankTwoTensor > & _eshelby_tensor
Definition: EshelbyTensor.h:31

Member Function Documentation

void EshelbyTensor::computeQpProperties ( )
overridevirtual

Definition at line 87 of file EshelbyTensor.C.

88 {
89  RankTwoTensor F((*_grad_disp[0])[_qp],
90  (*_grad_disp[1])[_qp],
91  (*_grad_disp[2])[_qp]); // Deformation gradient
92 
93  RankTwoTensor H(F);
94  F.addIa(1.0);
95  Real detF = F.det();
96  RankTwoTensor FinvT(F.inverse().transpose());
97 
98  if (_strain_increment != nullptr)
99  _sed[_qp] = _sed_old[_qp] + _stress[_qp].doubleContraction((*_strain_increment)[_qp]) / 2.0 +
100  _stress_old[_qp].doubleContraction((*_strain_increment)[_qp]) / 2.0;
101  else
102  _sed[_qp] = _stress[_qp].doubleContraction((*_mechanical_strain)[_qp]) / 2.0;
103 
104  // 1st Piola-Kirchoff Stress (P):
105  RankTwoTensor P = detF * _stress[_qp] * FinvT;
106 
107  // HTP = H^T * P = H^T * detF * sigma * FinvT;
108  RankTwoTensor HTP = H.transpose() * P;
109 
110  RankTwoTensor WI = RankTwoTensor(RankTwoTensor::initIdentity);
111  WI *= (_sed[_qp] * detF);
112 
113  _eshelby_tensor[_qp] = WI - HTP;
114 
115  if (_has_temp)
116  {
117  Real sigma_alpha = _stress[_qp].doubleContraction((*_total_deigenstrain_dT)[_qp]);
118  _J_thermal_term_vec[_qp] = sigma_alpha * _grad_temp[_qp];
119  }
120  else
121  _J_thermal_term_vec[_qp].zero();
122 }
const MaterialProperty< RankTwoTensor > * _total_deigenstrain_dT
Definition: EshelbyTensor.h:41
const MaterialProperty< Real > & _sed_old
Definition: EshelbyTensor.h:30
MaterialProperty< RealVectorValue > & _J_thermal_term_vec
Definition: EshelbyTensor.h:38
MaterialProperty< Real > & _sed
Definition: EshelbyTensor.h:29
std::vector< const VariableGradient * > _grad_disp
Definition: EshelbyTensor.h:36
const MaterialProperty< RankTwoTensor > * _mechanical_strain
Definition: EshelbyTensor.h:35
const VariableGradient & _grad_temp
Definition: EshelbyTensor.h:40
const MaterialProperty< RankTwoTensor > & _stress_old
Definition: EshelbyTensor.h:33
const MaterialProperty< RankTwoTensor > & _stress
Definition: EshelbyTensor.h:32
const bool _has_temp
Definition: EshelbyTensor.h:39
const MaterialProperty< RankTwoTensor > * _strain_increment
Definition: EshelbyTensor.h:34
MaterialProperty< RankTwoTensor > & _eshelby_tensor
Definition: EshelbyTensor.h:31
void EshelbyTensor::initQpStatefulProperties ( )
overridevirtual

Definition at line 81 of file EshelbyTensor.C.

82 {
83  _sed[_qp] = 0.0;
84 }
MaterialProperty< Real > & _sed
Definition: EshelbyTensor.h:29

Member Data Documentation

std::string EshelbyTensor::_base_name
protected

Definition at line 27 of file EshelbyTensor.h.

Referenced by EshelbyTensor().

MaterialProperty<RankTwoTensor>& EshelbyTensor::_eshelby_tensor
protected

Definition at line 31 of file EshelbyTensor.h.

Referenced by computeQpProperties().

std::vector<const VariableGradient *> EshelbyTensor::_grad_disp
protected

Definition at line 36 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and EshelbyTensor().

const VariableGradient& EshelbyTensor::_grad_temp
protected

Definition at line 40 of file EshelbyTensor.h.

Referenced by computeQpProperties().

const bool EshelbyTensor::_has_temp
protected

Definition at line 39 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and EshelbyTensor().

MaterialProperty<RealVectorValue>& EshelbyTensor::_J_thermal_term_vec
protected

Definition at line 38 of file EshelbyTensor.h.

Referenced by computeQpProperties().

const MaterialProperty<RankTwoTensor>* EshelbyTensor::_mechanical_strain
protected

Definition at line 35 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and EshelbyTensor().

MaterialProperty<Real>& EshelbyTensor::_sed
protected

Definition at line 29 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and initQpStatefulProperties().

const MaterialProperty<Real>& EshelbyTensor::_sed_old
protected

Definition at line 30 of file EshelbyTensor.h.

Referenced by computeQpProperties().

const MaterialProperty<RankTwoTensor>* EshelbyTensor::_strain_increment
protected

Definition at line 34 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and EshelbyTensor().

const MaterialProperty<RankTwoTensor>& EshelbyTensor::_stress
protected

Definition at line 32 of file EshelbyTensor.h.

Referenced by computeQpProperties().

const MaterialProperty<RankTwoTensor>& EshelbyTensor::_stress_old
protected

Definition at line 33 of file EshelbyTensor.h.

Referenced by computeQpProperties().

const MaterialProperty<RankTwoTensor>* EshelbyTensor::_total_deigenstrain_dT
protected

Definition at line 41 of file EshelbyTensor.h.

Referenced by computeQpProperties(), and EshelbyTensor().


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