www.mooseframework.org
StrainEnergyDensity.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 "StrainEnergyDensity.h"
11 #include "RankTwoTensor.h"
12 #include "MooseMesh.h"
13 
14 registerMooseObject("TensorMechanicsApp", StrainEnergyDensity);
15 
17 
18 InputParameters
20 {
21  InputParameters params = Material::validParams();
22  params.addClassDescription("Computes the strain energy density using a combination of the "
23  "elastic and inelastic components of the strain increment, which is a "
24  "valid assumption for monotonic behavior.");
25  params.addParam<std::string>("base_name",
26  "Optional parameter that allows the user to define "
27  "multiple mechanics material systems on the same "
28  "block, i.e. for multiple phases");
29  params.addRequiredParam<bool>(
30  "incremental", "Flag to indicate whether an incremental or total model is being used.");
31  return params;
32 }
33 
34 StrainEnergyDensity::StrainEnergyDensity(const InputParameters & parameters)
35  : DerivativeMaterialInterface<Material>(parameters),
36  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
37  _incremental(getParam<bool>("incremental")),
38  _strain_energy_density(declareProperty<Real>(_base_name + "strain_energy_density")),
39  _strain_energy_density_old(getMaterialPropertyOld<Real>(_base_name + "strain_energy_density")),
40  _stress(getMaterialProperty<RankTwoTensor>(_base_name + "stress")),
41  _stress_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "stress")),
42  _mechanical_strain(getMaterialProperty<RankTwoTensor>(_base_name + "mechanical_strain")),
43  _strain_increment(_incremental
44  ? &getMaterialProperty<RankTwoTensor>(_base_name + "strain_increment")
45  : nullptr)
46 {
47 }
48 
49 void
51 {
52  if (!_incremental && hasMaterialProperty<RankTwoTensor>(_base_name + "strain_increment"))
53  mooseError("StrainEnergyDensity: Specified incremental = false, but material model is "
54  "incremental.");
55 }
56 
57 void
59 {
60  _strain_energy_density[_qp] = 0.0;
61 }
62 
63 void
65 {
66 
67  if (_strain_increment != nullptr)
70  _stress[_qp].doubleContraction((*_strain_increment)[_qp]) / 2.0 +
71  _stress_old[_qp].doubleContraction((*_strain_increment)[_qp]) / 2.0;
72  else
73  _strain_energy_density[_qp] = _stress[_qp].doubleContraction((_mechanical_strain)[_qp]) / 2.0;
74 }
StrainEnergyDensity::_stress_old
const MaterialProperty< RankTwoTensor > & _stress_old
Definition: StrainEnergyDensity.h:50
StrainEnergyDensity::_stress
const MaterialProperty< RankTwoTensor > & _stress
Current and old values of stress.
Definition: StrainEnergyDensity.h:49
StrainEnergyDensity::_base_name
const std::string _base_name
Definition: StrainEnergyDensity.h:39
StrainEnergyDensity.h
registerMooseObject
registerMooseObject("TensorMechanicsApp", StrainEnergyDensity)
StrainEnergyDensity::_strain_energy_density_old
const MaterialProperty< Real > & _strain_energy_density_old
Definition: StrainEnergyDensity.h:46
StrainEnergyDensity
StrainEnergyDensity calculates the strain energy density.
Definition: StrainEnergyDensity.h:27
StrainEnergyDensity::_strain_increment
const MaterialProperty< RankTwoTensor > * _strain_increment
Current value of the strain increment for incremental models.
Definition: StrainEnergyDensity.h:57
StrainEnergyDensity::_incremental
bool _incremental
Whether the material model is a total or incremental model.
Definition: StrainEnergyDensity.h:42
StrainEnergyDensity::_mechanical_strain
const MaterialProperty< RankTwoTensor > & _mechanical_strain
Current value of mechanical strain which includes elastic and inelastic components of the strain.
Definition: StrainEnergyDensity.h:54
defineLegacyParams
defineLegacyParams(StrainEnergyDensity)
StrainEnergyDensity::StrainEnergyDensity
StrainEnergyDensity(const InputParameters &parameters)
Definition: StrainEnergyDensity.C:34
StrainEnergyDensity::validParams
static InputParameters validParams()
Definition: StrainEnergyDensity.C:19
StrainEnergyDensity::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: StrainEnergyDensity.C:58
validParams
InputParameters validParams()
StrainEnergyDensity::initialSetup
virtual void initialSetup() override
Definition: StrainEnergyDensity.C:50
StrainEnergyDensity::_strain_energy_density
MaterialProperty< Real > & _strain_energy_density
The strain energy density material property.
Definition: StrainEnergyDensity.h:45
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
StrainEnergyDensity::computeQpProperties
virtual void computeQpProperties() override
Definition: StrainEnergyDensity.C:64