Line data Source code
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 : 10 : #include "ADComputeStressBase.h" 11 : #include "RankTwoTensor.h" 12 : #include "SymmetricRankTwoTensor.h" 13 : 14 : template <typename R2> 15 : InputParameters 16 5424 : ADComputeStressBaseTempl<R2>::validParams() 17 : { 18 5424 : InputParameters params = Material::validParams(); 19 10848 : params.addParam<std::string>("base_name", 20 : "Optional parameter that allows the user to define " 21 : "multiple mechanics material systems on the same " 22 : "block, i.e. for multiple phases"); 23 5424 : params.suppressParameter<bool>("use_displaced_mesh"); 24 5424 : params.addParam<std::vector<MaterialPropertyName>>( 25 : "extra_stress_names", 26 5424 : std::vector<MaterialPropertyName>(), 27 : "Material property names of rank two tensors to be added to the stress."); 28 5424 : return params; 29 0 : } 30 : 31 : template <typename R2> 32 4058 : ADComputeStressBaseTempl<R2>::ADComputeStressBaseTempl(const InputParameters & parameters) 33 : : Material(parameters), 34 4202 : _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""), 35 8116 : _mechanical_strain(getADMaterialProperty<R2>(_base_name + "mechanical_strain")), 36 4058 : _stress(declareADProperty<R2>(_base_name + "stress")), 37 4058 : _elastic_strain(declareADProperty<R2>(_base_name + "elastic_strain")), 38 16232 : _extra_stresses(getParam<std::vector<MaterialPropertyName>>("extra_stress_names").size()) 39 : { 40 8116 : if (getParam<bool>("use_displaced_mesh")) 41 0 : mooseError("The stress calculator needs to run on the undisplaced mesh."); 42 : 43 8116 : const std::vector<MaterialPropertyName> extra_stress_names = 44 : getParam<std::vector<MaterialPropertyName>>("extra_stress_names"); 45 4262 : for (MooseIndex(_extra_stresses) i = 0; i < _extra_stresses.size(); ++i) 46 204 : _extra_stresses[i] = &getMaterialProperty<R2>(extra_stress_names[i]); 47 4058 : } 48 : 49 : template <typename R2> 50 : void 51 158912 : ADComputeStressBaseTempl<R2>::initQpStatefulProperties() 52 : { 53 158912 : _elastic_strain[_qp].zero(); 54 158912 : _stress[_qp].zero(); 55 158912 : } 56 : 57 : template <typename R2> 58 : void 59 26790852 : ADComputeStressBaseTempl<R2>::computeQpProperties() 60 : { 61 26790852 : computeQpStress(); 62 : 63 : // Add in extra stress 64 28561404 : for (MooseIndex(_extra_stresses) i = 0; i < _extra_stresses.size(); ++i) 65 1770624 : _stress[_qp] += (*_extra_stresses[i])[_qp]; 66 26790780 : } 67 : 68 : template class ADComputeStressBaseTempl<RankTwoTensor>; 69 : template class ADComputeStressBaseTempl<SymmetricRankTwoTensor>;