www.mooseframework.org
ComputeEigenstrainFromInitialStress.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 
11 #include "RankTwoTensor.h"
12 #include "Function.h"
13 #include "Conversion.h" // for stringify
14 
16 
18 
19 InputParameters
21 {
22  InputParameters params = ComputeEigenstrainBase::validParams();
23  params.addClassDescription("Computes an eigenstrain from an initial stress");
24  params.addRequiredParam<std::vector<FunctionName>>(
25  "initial_stress",
26  "A list of functions describing the initial stress. There must be 9 of these, corresponding "
27  "to the xx, yx, zx, xy, yy, zy, xz, yz, zz components respectively. To compute the "
28  "eigenstrain correctly, your elasticity tensor should not be time-varying in the first "
29  "timestep");
30  params.addCoupledVar("initial_stress_aux",
31  "A list of 9 AuxVariables describing the initial stress. If provided, each "
32  "of these is multiplied by its corresponding initial_stress function to "
33  "obtain the relevant component of initial stress.");
34  params.addParam<std::string>("base_name",
35  "The base_name for the elasticity tensor that will be "
36  "used to compute strain from stress. Do not provide "
37  "any base_name if your elasticity tensor does not use "
38  "one.");
39  return params;
40 }
41 
43  const InputParameters & parameters)
44  : ComputeEigenstrainBase(parameters),
45  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
46  _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_base_name + "elasticity_tensor")),
47  _eigenstrain_old(getMaterialPropertyOld<RankTwoTensor>(_eigenstrain_name)),
48  _ini_aux_provided(isParamValid("initial_stress_aux"))
49 {
50  const std::vector<FunctionName> & fcn_names(
51  getParam<std::vector<FunctionName>>("initial_stress"));
52  const std::size_t num = fcn_names.size();
53 
54  if (num != LIBMESH_DIM * LIBMESH_DIM)
55  paramError(
56  "initial_stress",
57  "ComputeEigenstrainFromInitialStress: " + Moose::stringify(LIBMESH_DIM * LIBMESH_DIM) +
58  " initial stress functions must be provided. You supplied " + Moose::stringify(num) +
59  "\n");
60 
61  _initial_stress_fcn.resize(num);
62  for (unsigned i = 0; i < num; ++i)
63  _initial_stress_fcn[i] = &getFunctionByName(fcn_names[i]);
64 
66  {
67  const std::size_t aux_size = coupledComponents("initial_stress_aux");
68  if (aux_size != LIBMESH_DIM * LIBMESH_DIM)
69  paramError("initial_stress_aux",
70  "ComputeEigenstrainFromInitialStress: If you supply initial_stress_aux, " +
71  Moose::stringify(LIBMESH_DIM * LIBMESH_DIM) +
72  " values must be given. You supplied " + Moose::stringify(aux_size) + "\n");
73  _ini_aux.resize(0);
74  for (unsigned i = 0; i < aux_size; ++i)
75  _ini_aux.push_back(&coupledValue("initial_stress_aux", i));
76  }
77 }
78 
79 void
81 {
82  if (_t_step == 1)
83  {
84  RankTwoTensor initial_stress;
85  for (unsigned i = 0; i < LIBMESH_DIM; ++i)
86  for (unsigned j = 0; j < LIBMESH_DIM; ++j)
87  {
88  initial_stress(i, j) = _initial_stress_fcn[i * LIBMESH_DIM + j]->value(_t, _q_point[_qp]);
90  initial_stress(i, j) *= (*_ini_aux[i * LIBMESH_DIM + j])[_qp];
91  }
92 
93  _eigenstrain[_qp] = -_elasticity_tensor[_qp].invSymm() * initial_stress;
94  }
95  else
96  _eigenstrain[_qp] = _eigenstrain_old[_qp];
97 }
ComputeEigenstrainFromInitialStress::_ini_aux_provided
const bool _ini_aux_provided
Whether the user has supplied AuxVariables representing the initial stress.
Definition: ComputeEigenstrainFromInitialStress.h:45
ComputeEigenstrainBase::validParams
static InputParameters validParams()
Definition: ComputeEigenstrainBase.C:17
ComputeEigenstrainFromInitialStress::computeQpEigenstrain
virtual void computeQpEigenstrain() override
Compute the eigenstrain and store in _eigenstrain.
Definition: ComputeEigenstrainFromInitialStress.C:80
ComputeEigenstrainFromInitialStress::_initial_stress_fcn
std::vector< const Function * > _initial_stress_fcn
initial stress components
Definition: ComputeEigenstrainFromInitialStress.h:48
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeEigenstrainFromInitialStress)
ComputeEigenstrainFromInitialStress::_ini_aux
std::vector< const VariableValue * > _ini_aux
AuxVariables defining the initial stress.
Definition: ComputeEigenstrainFromInitialStress.h:51
ComputeEigenstrainFromInitialStress::_eigenstrain_old
const MaterialProperty< RankTwoTensor > & _eigenstrain_old
Stores the total eigenstrain in the previous step.
Definition: ComputeEigenstrainFromInitialStress.h:42
ComputeEigenstrainFromInitialStress::ComputeEigenstrainFromInitialStress
ComputeEigenstrainFromInitialStress(const InputParameters &parameters)
Definition: ComputeEigenstrainFromInitialStress.C:42
ComputeEigenstrainFromInitialStress::validParams
static InputParameters validParams()
Definition: ComputeEigenstrainFromInitialStress.C:20
ComputeEigenstrainFromInitialStress
ComputeEigenstrain computes an Eigenstrain that results from an initial stress The initial stress is ...
Definition: ComputeEigenstrainFromInitialStress.h:25
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
ComputeEigenstrainFromInitialStress.h
ComputeEigenstrainBase
ComputeEigenstrainBase is the base class for eigenstrain tensors.
Definition: ComputeEigenstrainBase.h:26
RankTwoTensorTempl< Real >
ComputeEigenstrainBase::_eigenstrain
MaterialProperty< RankTwoTensor > & _eigenstrain
Stores the current total eigenstrain.
Definition: ComputeEigenstrainBase.h:47
ComputeEigenstrainFromInitialStress::_elasticity_tensor
const MaterialProperty< RankFourTensor > & _elasticity_tensor
elasticity tensor used to convert stress to strain
Definition: ComputeEigenstrainFromInitialStress.h:39
defineLegacyParams
defineLegacyParams(ComputeEigenstrainFromInitialStress)