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 "GeneralizedPlaneStrain.h" 11 : 12 : // MOOSE includes 13 : #include "Assembly.h" 14 : #include "GeneralizedPlaneStrainUOInterface.h" 15 : #include "MooseVariableScalar.h" 16 : #include "SystemBase.h" 17 : #include "ReferenceResidualProblem.h" 18 : #include "InputParameters.h" 19 : 20 : #include <algorithm> 21 : 22 : registerMooseObject("SolidMechanicsApp", GeneralizedPlaneStrain); 23 : 24 : InputParameters 25 388 : GeneralizedPlaneStrain::validParams() 26 : { 27 388 : InputParameters params = ScalarKernel::validParams(); 28 388 : params.addClassDescription("Generalized Plane Strain Scalar Kernel"); 29 776 : params.addRequiredParam<UserObjectName>("generalized_plane_strain", 30 : "The name of the GeneralizedPlaneStrainUserObject"); 31 776 : params.addParam<unsigned int>( 32 : "scalar_out_of_plane_strain_index", 33 : "The index number of scalar_out_of_plane_strain this kernel acts on"); 34 : 35 388 : return params; 36 0 : } 37 : 38 194 : GeneralizedPlaneStrain::GeneralizedPlaneStrain(const InputParameters & parameters) 39 : : ScalarKernel(parameters), 40 194 : _gps(getUserObject<GeneralizedPlaneStrainUOInterface>("generalized_plane_strain")), 41 194 : _scalar_var_id(isParamValid("scalar_out_of_plane_strain_index") 42 194 : ? getParam<unsigned int>("scalar_out_of_plane_strain_index") 43 194 : : 0) 44 : { 45 194 : } 46 : 47 : void 48 10144 : GeneralizedPlaneStrain::computeResidual() 49 : { 50 10144 : prepareVectorTag(_assembly, _var.number(), TaggingInterface::ResidualTagType::NonReference); 51 20288 : for (_i = 0; _i < _local_re.size(); ++_i) 52 10144 : _local_re(_i) += _gps.returnResidual(_scalar_var_id); 53 10144 : accumulateTaggedLocalResidual(); 54 : 55 10144 : prepareVectorTag(_assembly, _var.number(), TaggingInterface::ResidualTagType::Reference); 56 10224 : for (_i = 0; _i < _local_re.size(); ++_i) 57 80 : _local_re(_i) += _gps.returnReferenceResidual(_scalar_var_id); 58 10144 : accumulateTaggedLocalResidual(); 59 10144 : } 60 : 61 : /** 62 : * method to provide the diagonal jacobian term for scalar variable using value 63 : * returned from Postprocessor, off diagonal terms are computed by computeOffDiagJacobianScalar 64 : * in the kernel of nonlinear variables which needs to couple with the scalar variable 65 : */ 66 : void 67 1372 : GeneralizedPlaneStrain::computeJacobian() 68 : { 69 1372 : prepareMatrixTag(_assembly, _var.number(), _var.number()); 70 2744 : for (_i = 0; _i < _local_ke.m(); ++_i) 71 1372 : _local_ke(_i, _i) += _gps.returnJacobian(_scalar_var_id); 72 : 73 1372 : accumulateTaggedLocalMatrix(); 74 1372 : }