LCOV - code coverage report
Current view: top level - src/kernels - GrainRigidBodyMotionBase.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #32971 (54bef8) with base c6cf66 Lines: 50 51 98.0 %
Date: 2026-05-29 20:38:39 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         389 : GrainRigidBodyMotionBase::validParams()
      18             : {
      19         389 :   InputParameters params = NonlocalKernel::validParams();
      20         389 :   params.addClassDescription("Base class for adding rigid body motion to grains");
      21         778 :   params.addRequiredCoupledVar("c", "Concentration");
      22         778 :   params.addRequiredCoupledVarWithAutoBuild(
      23             :       "v", "var_name_base", "op_num", "Array of coupled variable names");
      24         778 :   params.addParam<std::string>("base_name",
      25             :                                "Optional parameter that allows the user to define "
      26             :                                "type of force density under consideration");
      27         778 :   params.addParam<Real>(
      28         778 :       "translation_constant", 500, "constant value characterizing grain translation");
      29         778 :   params.addParam<Real>("rotation_constant", 1.0, "constant value characterizing grain rotation");
      30         778 :   params.addRequiredParam<UserObjectName>(
      31             :       "grain_force", "UserObject for getting force and torque acting on grains");
      32         778 :   params.addRequiredParam<UserObjectName>("grain_tracker_object",
      33             :                                           "The FeatureFloodCount UserObject to get values from.");
      34         778 :   params.addRequiredParam<VectorPostprocessorName>("grain_volumes",
      35             :                                                    "The feature volume VectorPostprocessorValue.");
      36         389 :   return params;
      37           0 : }
      38             : 
      39         208 : GrainRigidBodyMotionBase::GrainRigidBodyMotionBase(const InputParameters & parameters)
      40             :   : NonlocalKernel(parameters),
      41         208 :     _var_dofs(_var.dofIndices()),
      42         208 :     _c_var(coupled("c")),
      43         208 :     _c(coupledValue("c")),
      44         208 :     _grad_c(coupledGradient("c")),
      45         208 :     _c_dofs(getVar("c", 0)->dofIndices()),
      46         208 :     _op_num(coupledComponents("v")),
      47         208 :     _vals(coupledValues("v")),
      48         208 :     _vals_var(coupledIndices("v")),
      49         208 :     _grad_vals(coupledGradients("v")),
      50         416 :     _base_name(isParamValid("base_name") ? getParam<std::string>("base_name") + "_" : ""),
      51         208 :     _grain_force_torque(getUserObject<GrainForceAndTorqueInterface>("grain_force")),
      52         208 :     _grain_forces(_grain_force_torque.getForceValues()),
      53         208 :     _grain_torques(_grain_force_torque.getTorqueValues()),
      54         208 :     _grain_force_c_jacobians(_grain_force_torque.getForceCJacobians()),
      55         208 :     _grain_force_eta_jacobians(_grain_force_torque.getForceEtaJacobians()),
      56         416 :     _mt(getParam<Real>("translation_constant")),
      57         416 :     _mr(getParam<Real>("rotation_constant")),
      58         208 :     _grain_tracker(getUserObject<GrainTrackerInterface>("grain_tracker_object")),
      59         416 :     _grain_volumes(getVectorPostprocessorValue("grain_volumes", "feature_volumes"))
      60             : {
      61         208 : }
      62             : 
      63             : void
      64         222 : GrainRigidBodyMotionBase::timestepSetup()
      65             : {
      66         222 :   _total_dofs = _subproblem.es().n_dofs();
      67         222 : }
      68             : 
      69             : bool
      70    43369200 : GrainRigidBodyMotionBase::globalDoFEnabled(MooseVariableFEBase & /*var*/, dof_id_type /*dof_index*/)
      71             : {
      72    43369200 :   if (_velocity_advection_jacobian(0) == 0 && _velocity_advection_jacobian(1) == 0 &&
      73    42452184 :       _velocity_advection_jacobian(2) == 0)
      74    42452184 :     return false;
      75             : 
      76             :   return true;
      77             : }
      78             : 
      79             : void
      80      318072 : GrainRigidBodyMotionBase::precalculateResidual()
      81             : {
      82      318072 :   calculateAdvectionVelocity();
      83      318072 : }
      84             : 
      85             : void
      86      285130 : GrainRigidBodyMotionBase::precalculateJacobian()
      87             : {
      88      285130 :   calculateAdvectionVelocity();
      89      285130 : }
      90             : 
      91             : void
      92      679160 : GrainRigidBodyMotionBase::precalculateOffDiagJacobian(unsigned int /* jvar */)
      93             : {
      94      679160 :   calculateAdvectionVelocity();
      95      679160 : }

Generated by: LCOV version 1.14