www.mooseframework.org
MultiPhaseStressMaterial.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 "RankFourTensor.h"
13 
14 registerMooseObject("TensorMechanicsApp", MultiPhaseStressMaterial);
15 
17 
18 InputParameters
20 {
21  InputParameters params = Material::validParams();
22  params.addClassDescription("Compute a global stress form multiple phase stresses");
23  params.addParam<std::vector<MaterialPropertyName>>(
24  "h", "Switching Function Materials that provide h(eta_i)");
25  params.addRequiredParam<std::vector<std::string>>("phase_base",
26  "Base names for the Phase strains");
27  params.addParam<std::string>("base_name", "Base name for the computed global stress (optional)");
28  return params;
29 }
30 
31 MultiPhaseStressMaterial::MultiPhaseStressMaterial(const InputParameters & parameters)
32  : Material(parameters),
33  _h_list(getParam<std::vector<MaterialPropertyName>>("h")),
34  _n_phase(_h_list.size()),
35  _h_eta(_n_phase),
36  _phase_base(getParam<std::vector<std::string>>("phase_base")),
37  _phase_stress(_n_phase),
38  _dphase_stress_dstrain(_n_phase),
39  _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
40  _stress(declareProperty<RankTwoTensor>(_base_name + "stress")),
41  _dstress_dstrain(declareProperty<RankFourTensor>(_base_name + "Jacobian_mult"))
42 {
43  // verify parameter length
44  if (_n_phase != _phase_base.size())
45  mooseError(
46  "h and phase_base input vectors need to have the same length in MultiPhaseStressMaterial ",
47  name());
48 
49  for (unsigned int i = 0; i < _n_phase; ++i)
50  {
51  _h_eta[i] = &getMaterialProperty<Real>(_h_list[i]);
52  _phase_stress[i] = &getMaterialProperty<RankTwoTensor>(_phase_base[i] + "_stress");
54  &getMaterialProperty<RankFourTensor>(_phase_base[i] + "_Jacobian_mult");
55  }
56 }
57 
58 void
60 {
61  _stress[_qp].zero();
62  _dstress_dstrain[_qp].zero();
63 
64  for (unsigned int i = 0; i < _n_phase; ++i)
65  {
66  _stress[_qp] += (*_h_eta[i])[_qp] * (*_phase_stress[i])[_qp];
67  _dstress_dstrain[_qp] += (*_h_eta[i])[_qp] * (*_dphase_stress_dstrain[i])[_qp];
68  }
69 }
defineLegacyParams
defineLegacyParams(MultiPhaseStressMaterial)
MultiPhaseStressMaterial
Construct a global strain from the phase strains in a manner that is consistent with the construction...
Definition: MultiPhaseStressMaterial.h:30
MultiPhaseStressMaterial::_h_eta
std::vector< const MaterialProperty< Real > * > _h_eta
switching functions
Definition: MultiPhaseStressMaterial.h:47
MultiPhaseStressMaterial::_dstress_dstrain
MaterialProperty< RankFourTensor > & _dstress_dstrain
Definition: MultiPhaseStressMaterial.h:57
registerMooseObject
registerMooseObject("TensorMechanicsApp", MultiPhaseStressMaterial)
MultiPhaseStressMaterial::validParams
static InputParameters validParams()
Definition: MultiPhaseStressMaterial.C:19
MultiPhaseStressMaterial::_dphase_stress_dstrain
std::vector< const MaterialProperty< RankFourTensor > * > _dphase_stress_dstrain
Definition: MultiPhaseStressMaterial.h:52
MultiPhaseStressMaterial::_phase_base
std::vector< std::string > _phase_base
Definition: MultiPhaseStressMaterial.h:50
validParams
InputParameters validParams()
MultiPhaseStressMaterial::computeQpProperties
virtual void computeQpProperties()
Definition: MultiPhaseStressMaterial.C:59
name
const std::string name
Definition: Setup.h:21
MultiPhaseStressMaterial::_n_phase
unsigned int _n_phase
number of phases handled by this material
Definition: MultiPhaseStressMaterial.h:44
RankFourTensorTempl
Definition: ACGrGrElasticDrivingForce.h:20
MultiPhaseStressMaterial::MultiPhaseStressMaterial
MultiPhaseStressMaterial(const InputParameters &parameters)
Definition: MultiPhaseStressMaterial.C:31
MultiPhaseStressMaterial.h
RankTwoTensorTempl< Real >
MultiPhaseStressMaterial::_h_list
std::vector< MaterialPropertyName > _h_list
switching function name list
Definition: MultiPhaseStressMaterial.h:41
MultiPhaseStressMaterial::_phase_stress
std::vector< const MaterialProperty< RankTwoTensor > * > _phase_stress
Definition: MultiPhaseStressMaterial.h:51
MultiPhaseStressMaterial::_stress
MaterialProperty< RankTwoTensor > & _stress
Definition: MultiPhaseStressMaterial.h:56