https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ComputeEigenstrainFromInitialStress.C
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
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
19{
21 params.addClassDescription("Computes an eigenstrain from an initial stress");
22 params.addRequiredParam<std::vector<FunctionName>>(
23 "initial_stress",
24 "A list of functions describing the initial stress. There must be 9 of these, corresponding "
25 "to the xx, yx, zx, xy, yy, zy, xz, yz, zz components respectively. To compute the "
26 "eigenstrain correctly, your elasticity tensor should not be time-varying in the first "
27 "timestep");
28 params.addCoupledVar("initial_stress_aux",
29 "A list of 9 AuxVariables describing the initial stress. If provided, each "
30 "of these is multiplied by its corresponding initial_stress function to "
31 "obtain the relevant component of initial stress.");
32 params.addParam<std::string>("base_name",
33 "The base_name for the elasticity tensor that will be "
34 "used to compute strain from stress. Do not provide "
35 "any base_name if your elasticity tensor does not use "
36 "one.");
37 return params;
38}
39
41 const InputParameters & parameters)
42 : ComputeEigenstrainBase(parameters),
43 _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
44 _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_base_name + "elasticity_tensor")),
45 _eigenstrain_old(getMaterialPropertyOld<RankTwoTensor>(_eigenstrain_name)),
46 _ini_aux_provided(isParamValid("initial_stress_aux")),
47 _ini_aux(_ini_aux_provided ? coupledValues("initial_stress_aux")
48 : std::vector<const VariableValue *>())
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)
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 }
74}
75
76void
78{
79 if (_t_step == 1)
80 {
81 RankTwoTensor initial_stress;
82 for (unsigned i = 0; i < LIBMESH_DIM; ++i)
83 for (unsigned j = 0; j < LIBMESH_DIM; ++j)
84 {
85 initial_stress(i, j) = _initial_stress_fcn[i * LIBMESH_DIM + j]->value(_t, _q_point[_qp]);
87 initial_stress(i, j) *= (*_ini_aux[i * LIBMESH_DIM + j])[_qp];
88 }
89
90 _eigenstrain[_qp] = -_elasticity_tensor[_qp].invSymm() * initial_stress;
91 }
92 else
94}
registerMooseObject("SolidMechanicsApp", ComputeEigenstrainFromInitialStress)
ComputeEigenstrainBase is the base class for eigenstrain tensors.
GenericMaterialProperty< RankTwoTensor, is_ad > & _eigenstrain
Stores the current total eigenstrain.
static InputParameters validParams()
ComputeEigenstrain computes an Eigenstrain that results from an initial stress The initial stress is ...
const std::vector< const VariableValue * > _ini_aux
AuxVariables defining the initial stress.
ComputeEigenstrainFromInitialStress(const InputParameters &parameters)
const bool _ini_aux_provided
Whether the user has supplied AuxVariables representing the initial stress.
virtual void computeQpEigenstrain() override
Compute the eigenstrain and store in _eigenstrain.
const MaterialProperty< RankTwoTensor > & _eigenstrain_old
Stores the total eigenstrain in the previous step.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
elasticity tensor used to convert stress to strain
std::vector< const Function * > _initial_stress_fcn
initial stress components
unsigned int coupledComponents(const std::string &var_name) const
const Function & getFunctionByName(const FunctionName &name) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)
unsigned int _qp
const MooseArray< Point > & _q_point
void paramError(const std::string &param, Args... args) const
const T & getParam(const std::string &name) const
Real & _t
int & _t_step
VariableValueTempl< false > VariableValue
std::string stringify(const T &t)