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 "MechanicsBaseNOSPD.h" 11 : 12 : InputParameters 13 542 : MechanicsBaseNOSPD::validParams() 14 : { 15 542 : InputParameters params = MechanicsBasePD::validParams(); 16 542 : params.addClassDescription("Base class for kernels of the stabilized non-ordinary " 17 : "state-based peridynamic correspondence models"); 18 : 19 1084 : params.addParam<std::vector<MaterialPropertyName>>( 20 : "eigenstrain_names", 21 : {}, 22 : "List of eigenstrains to be coupled in non-ordinary state-based mechanics kernels"); 23 : 24 542 : return params; 25 0 : } 26 : 27 388 : MechanicsBaseNOSPD::MechanicsBaseNOSPD(const InputParameters & parameters) 28 : : MechanicsBasePD(parameters), 29 388 : _multi(getMaterialProperty<Real>("multi")), 30 776 : _stress(getMaterialProperty<RankTwoTensor>("stress")), 31 776 : _shape2(getMaterialProperty<RankTwoTensor>("rank_two_shape_tensor")), 32 776 : _dgrad(getMaterialProperty<RankTwoTensor>("deformation_gradient")), 33 776 : _ddgraddu(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_du")), 34 776 : _ddgraddv(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_dv")), 35 776 : _ddgraddw(getMaterialProperty<RankTwoTensor>("ddeformation_gradient_dw")), 36 776 : _Jacobian_mult(getMaterialProperty<RankFourTensor>("Jacobian_mult")), 37 776 : _eigenstrain_names(getParam<std::vector<MaterialPropertyName>>("eigenstrain_names")), 38 776 : _deigenstrain_dT(_eigenstrain_names.size()) 39 : { 40 388 : if (_temp_coupled) 41 244 : for (unsigned int i = 0; i < _deigenstrain_dT.size(); ++i) 42 122 : _deigenstrain_dT[i] = 43 244 : &getMaterialPropertyDerivative<RankTwoTensor>(_eigenstrain_names[i], _temp_var->name()); 44 388 : } 45 : 46 : RankTwoTensor 47 1615136 : MechanicsBaseNOSPD::computeDSDU(unsigned int component, unsigned int nd) 48 : { 49 : // compute the derivative of stress w.r.t the solution components for small strain 50 1615136 : RankTwoTensor dSdU; 51 1615136 : if (component == 0) 52 1394024 : dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddu[nd].transpose() + _ddgraddu[nd]); 53 918124 : else if (component == 1) 54 1418504 : dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddv[nd].transpose() + _ddgraddv[nd]); 55 208872 : else if (component == 2) 56 417744 : dSdU = _Jacobian_mult[nd] * 0.5 * (_ddgraddw[nd].transpose() + _ddgraddw[nd]); 57 : 58 1615136 : return dSdU; 59 : }