LCOV - code coverage report
Current view: top level - src/kernels - GrainRigidBodyMotionBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 50 51 98.0 %
Date: 2025-09-04 07:55:36 Functions: 7 7 100.0 %
Legend: Lines: hit not hit

          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 : }

Generated by: LCOV version 1.14