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 "GeneralizedPlaneStrainUserObjectNOSPD.h" 11 : #include "RankTwoTensor.h" 12 : #include "RankFourTensor.h" 13 : #include "Function.h" 14 : 15 : registerMooseObject("PeridynamicsApp", GeneralizedPlaneStrainUserObjectNOSPD); 16 : 17 : InputParameters 18 47 : GeneralizedPlaneStrainUserObjectNOSPD::validParams() 19 : { 20 47 : InputParameters params = GeneralizedPlaneStrainUserObjectBasePD::validParams(); 21 47 : params.addClassDescription("Class for calculating the scalar residual and diagonal Jacobian " 22 : "entry of generalized plane strain in the H1NOSPD formulation"); 23 : 24 47 : return params; 25 0 : } 26 : 27 26 : GeneralizedPlaneStrainUserObjectNOSPD::GeneralizedPlaneStrainUserObjectNOSPD( 28 26 : const InputParameters & parameters) 29 : : GeneralizedPlaneStrainUserObjectBasePD(parameters), 30 52 : _stress(getMaterialProperty<RankTwoTensor>("stress")) 31 : { 32 26 : } 33 : 34 : void 35 70462 : GeneralizedPlaneStrainUserObjectNOSPD::execute() 36 : { 37 : // dof_id_type for node i and j 38 70462 : dof_id_type node_i = _current_elem->node_id(0); 39 : dof_id_type node_j = _current_elem->node_id(1); 40 : 41 : // coordinates for node i and j 42 70462 : Point coord_i = _pdmesh.getNodeCoord(node_i); 43 70462 : Point coord_j = _pdmesh.getNodeCoord(node_j); 44 : 45 : // nodal area for node i and j 46 70462 : Real nv_i = _pdmesh.getNodeVolume(node_i); 47 70462 : Real nv_j = _pdmesh.getNodeVolume(node_j); 48 : 49 : // sum of volumes of material points used in bond-associated deformation gradient calculation 50 70462 : dof_id_type id_j_in_i = _pdmesh.getNeighborIndex(node_i, node_j); 51 70462 : dof_id_type id_i_in_j = _pdmesh.getNeighborIndex(node_j, node_i); 52 : 53 70462 : Real dg_vol_frac_i = _pdmesh.getHorizonSubsetVolumeFraction(node_i, id_j_in_i); 54 70462 : Real dg_vol_frac_j = _pdmesh.getHorizonSubsetVolumeFraction(node_j, id_i_in_j); 55 : 56 70462 : Real bond_status = _bond_status_var->getElementalValue(_current_elem); 57 : 58 : // residual 59 70462 : _residual += (_stress[0](2, 2) - _pressure.value(_t, coord_i) * _factor) * nv_i * dg_vol_frac_i * 60 : bond_status; 61 70462 : _residual += (_stress[1](2, 2) - _pressure.value(_t, coord_j) * _factor) * nv_j * dg_vol_frac_j * 62 : bond_status; 63 : 64 : // diagonal jacobian 65 70462 : _jacobian += (_Cijkl[0](2, 2, 2, 2) * nv_i * dg_vol_frac_i + 66 70462 : _Cijkl[1](2, 2, 2, 2) * nv_j * dg_vol_frac_j) * 67 : bond_status; 68 70462 : }