LCOV - code coverage report
Current view: top level - src/kernels - ChangedVariableTimeDerivative.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 20 24 83.3 %
Date: 2025-09-04 07:55:36 Functions: 5 6 83.3 %
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 "ChangedVariableTimeDerivative.h"
      11             : 
      12             : registerMooseObject("PhaseFieldApp", ChangedVariableTimeDerivative);
      13             : 
      14             : InputParameters
      15         391 : ChangedVariableTimeDerivative::validParams()
      16             : {
      17         391 :   InputParameters params = TimeDerivative::validParams();
      18         391 :   params.addClassDescription(
      19             :       "A modified time derivative Kernel that multiplies the time derivative by"
      20             :       "the derivative of the nonlinear preconditioning function");
      21         782 :   params.addRequiredParam<MaterialPropertyName>(
      22             :       "order_parameter",
      23             :       "Order parameter material defining the nonlinear preconditioning function");
      24         782 :   params.addCoupledVar("args", "Vector of additional arguments for order_parameter");
      25         391 :   return params;
      26           0 : }
      27             : 
      28         204 : ChangedVariableTimeDerivative::ChangedVariableTimeDerivative(const InputParameters & parameters)
      29             :   : DerivativeMaterialInterface<JvarMapKernelInterface<TimeDerivative>>(parameters),
      30         204 :     _dopdu(getMaterialPropertyDerivative<Real>("order_parameter", _var.name())),
      31         204 :     _d2opdu2(getMaterialPropertyDerivative<Real>("order_parameter", _var.name(), _var.name())),
      32         408 :     _d2opdudarg(_n_args)
      33             : {
      34             :   // fetch derivatives
      35         204 :   for (unsigned int i = 0; i < _n_args; ++i)
      36           0 :     _d2opdudarg[i] = &getMaterialPropertyDerivative<Real>("order_parameter", _var.name(), i);
      37         204 : }
      38             : 
      39             : void
      40         204 : ChangedVariableTimeDerivative::initialSetup()
      41             : {
      42         612 :   validateNonlinearCoupling<Real>("order_parameter");
      43         204 : }
      44             : 
      45             : Real
      46   125702400 : ChangedVariableTimeDerivative::computeQpResidual()
      47             : {
      48   125702400 :   return TimeDerivative::computeQpResidual() * _dopdu[_qp];
      49             : }
      50             : 
      51             : Real
      52    85414400 : ChangedVariableTimeDerivative::computeQpJacobian()
      53             : {
      54    85414400 :   return TimeDerivative::computeQpJacobian() * _dopdu[_qp] +
      55    85414400 :          TimeDerivative::computeQpResidual() * _d2opdu2[_qp] * _phi[_j][_qp];
      56             : }
      57             : 
      58             : Real
      59           0 : ChangedVariableTimeDerivative::computeQpOffDiagJacobian(unsigned int jvar)
      60             : {
      61             :   // get the coupled variable jvar is referring to
      62             :   const unsigned int cvar = mapJvarToCvar(jvar);
      63             : 
      64           0 :   return TimeDerivative::computeQpResidual() * (*_d2opdudarg[cvar])[_qp] * _phi[_j][_qp];
      65             : }

Generated by: LCOV version 1.14