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 "GrainRigidBodyMotionBase.h" 11 : 12 : // MOOSE includes 13 : #include "GrainTrackerInterface.h" 14 : #include "MooseVariable.h" 15 : 16 : InputParameters 17 573 : GrainRigidBodyMotionBase::validParams() 18 : { 19 573 : InputParameters params = NonlocalKernel::validParams(); 20 573 : params.addClassDescription("Base class for adding rigid body motion to grains"); 21 1146 : params.addRequiredCoupledVar("c", "Concentration"); 22 1146 : params.addRequiredCoupledVarWithAutoBuild( 23 : "v", "var_name_base", "op_num", "Array of coupled variable names"); 24 1146 : params.addParam<std::string>("base_name", 25 : "Optional parameter that allows the user to define " 26 : "type of force density under consideration"); 27 1146 : params.addParam<Real>( 28 1146 : "translation_constant", 500, "constant value characterizing grain translation"); 29 1146 : params.addParam<Real>("rotation_constant", 1.0, "constant value characterizing grain rotation"); 30 1146 : params.addRequiredParam<UserObjectName>( 31 : "grain_force", "UserObject for getting force and torque acting on grains"); 32 1146 : params.addRequiredParam<UserObjectName>("grain_tracker_object", 33 : "The FeatureFloodCount UserObject to get values from."); 34 1146 : params.addRequiredParam<VectorPostprocessorName>("grain_volumes", 35 : "The feature volume VectorPostprocessorValue."); 36 573 : return params; 37 0 : } 38 : 39 300 : GrainRigidBodyMotionBase::GrainRigidBodyMotionBase(const InputParameters & parameters) 40 : : NonlocalKernel(parameters), 41 300 : _var_dofs(_var.dofIndices()), 42 300 : _c_var(coupled("c")), 43 300 : _c(coupledValue("c")), 44 300 : _grad_c(coupledGradient("c")), 45 300 : _c_dofs(getVar("c", 0)->dofIndices()), 46 300 : _op_num(coupledComponents("v")), 47 300 : _vals(coupledValues("v")), 48 300 : _vals_var(coupledIndices("v")), 49 300 : _grad_vals(coupledGradients("v")), 50 600 : _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""), 51 300 : _grain_force_torque(getUserObject<GrainForceAndTorqueInterface>("grain_force")), 52 300 : _grain_forces(_grain_force_torque.getForceValues()), 53 300 : _grain_torques(_grain_force_torque.getTorqueValues()), 54 300 : _grain_force_c_jacobians(_grain_force_torque.getForceCJacobians()), 55 300 : _grain_force_eta_jacobians(_grain_force_torque.getForceEtaJacobians()), 56 600 : _mt(getParam<Real>("translation_constant")), 57 600 : _mr(getParam<Real>("rotation_constant")), 58 300 : _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker_object")), 59 600 : _grain_volumes(getVectorPostprocessorValue("grain_volumes", "feature_volumes")) 60 : { 61 300 : } 62 : 63 : void 64 280 : GrainRigidBodyMotionBase::timestepSetup() 65 : { 66 280 : _total_dofs = _subproblem.es().n_dofs(); 67 280 : } 68 : 69 : bool 70 50597400 : GrainRigidBodyMotionBase::globalDoFEnabled(MooseVariableFEBase & /*var*/, dof_id_type /*dof_index*/) 71 : { 72 50597400 : if (_velocity_advection_jacobian(0) == 0 && _velocity_advection_jacobian(1) == 0 && 73 49527548 : _velocity_advection_jacobian(2) == 0) 74 49527548 : return false; 75 : 76 : return true; 77 : } 78 : 79 : void 80 377267 : GrainRigidBodyMotionBase::precalculateResidual() 81 : { 82 377267 : calculateAdvectionVelocity(); 83 377267 : } 84 : 85 : void 86 338106 : GrainRigidBodyMotionBase::precalculateJacobian() 87 : { 88 338106 : calculateAdvectionVelocity(); 89 338106 : } 90 : 91 : void 92 803262 : GrainRigidBodyMotionBase::precalculateOffDiagJacobian(unsigned int /* jvar */) 93 : { 94 803262 : calculateAdvectionVelocity(); 95 803262 : }