www.mooseframework.org
ComputeSmallStrain.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 
10 #include "ComputeSmallStrain.h"
11 #include "Assembly.h"
12 #include "libmesh/quadrature.h"
13 
14 registerMooseObject("TensorMechanicsApp", ComputeSmallStrain);
15 
17 
18 InputParameters
20 {
21  InputParameters params = ComputeStrainBase::validParams();
22  params.addClassDescription("Compute a small strain.");
23  return params;
24 }
25 
26 ComputeSmallStrain::ComputeSmallStrain(const InputParameters & parameters)
27  : ComputeStrainBase(parameters)
28 {
29 }
30 
31 void
33 {
34  Real volumetric_strain = 0.0;
35  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
36  {
37  // strain = (grad_disp + grad_disp^T)/2
38  RankTwoTensor grad_tensor((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
39 
40  _total_strain[_qp] = (grad_tensor + grad_tensor.transpose()) / 2.0;
41 
43  volumetric_strain += _total_strain[_qp].trace() * _JxW[_qp] * _coord[_qp];
44  }
45 
47  volumetric_strain /= _current_elem_volume;
48 
49  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
50  {
52  {
53  Real trace = _total_strain[_qp].trace();
54  _total_strain[_qp](0, 0) += (volumetric_strain - trace) / 3.0;
55  _total_strain[_qp](1, 1) += (volumetric_strain - trace) / 3.0;
56  _total_strain[_qp](2, 2) += (volumetric_strain - trace) / 3.0;
57  }
58 
59  if (_global_strain)
60  _total_strain[_qp] += (*_global_strain)[_qp];
61 
63 
64  // Remove the Eigen strain
65  for (auto es : _eigenstrains)
66  _mechanical_strain[_qp] -= (*es)[_qp];
67  }
68 }
ComputeSmallStrain::computeProperties
virtual void computeProperties() override
Definition: ComputeSmallStrain.C:32
ComputeStrainBase::_current_elem_volume
const Real & _current_elem_volume
Definition: ComputeStrainBase.h:56
ComputeSmallStrain.h
ComputeStrainBase
ComputeStrainBase is the base class for strain tensors.
Definition: ComputeStrainBase.h:26
ComputeSmallStrain::ComputeSmallStrain
ComputeSmallStrain(const InputParameters &parameters)
Definition: ComputeSmallStrain.C:26
ComputeSmallStrain
ComputeSmallStrain defines a strain tensor, assuming small strains.
Definition: ComputeSmallStrain.h:22
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
ComputeStrainBase::_global_strain
const MaterialProperty< RankTwoTensor > * _global_strain
Definition: ComputeStrainBase.h:53
ComputeStrainBase::validParams
static InputParameters validParams()
Definition: ComputeStrainBase.C:17
defineLegacyParams
defineLegacyParams(ComputeSmallStrain)
ComputeStrainBase::_eigenstrains
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
Definition: ComputeStrainBase.h:51
RankTwoTensorTempl< Real >
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeSmallStrain)
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
ComputeStrainBase::_volumetric_locking_correction
const bool _volumetric_locking_correction
Definition: ComputeStrainBase.h:55
ComputeSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeSmallStrain.C:19
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42