LCOV - code coverage report
Current view: top level - src/kernels - ChangedVariableTimeDerivative.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #32971 (54bef8) with base c6cf66 Lines: 20 24 83.3 %
Date: 2026-05-29 20:38:39 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         255 : ChangedVariableTimeDerivative::validParams()
      16             : {
      17         255 :   InputParameters params = TimeDerivative::validParams();
      18         255 :   params.addClassDescription(
      19             :       "A modified time derivative Kernel that multiplies the time derivative by"
      20             :       "the derivative of the nonlinear preconditioning function");
      21         510 :   params.addRequiredParam<MaterialPropertyName>(
      22             :       "order_parameter",
      23             :       "Order parameter material defining the nonlinear preconditioning function");
      24         510 :   params.addCoupledVar("args", "Vector of additional arguments for order_parameter");
      25         255 :   return params;
      26           0 : }
      27             : 
      28         136 : ChangedVariableTimeDerivative::ChangedVariableTimeDerivative(const InputParameters & parameters)
      29             :   : DerivativeMaterialInterface<JvarMapKernelInterface<TimeDerivative>>(parameters),
      30         136 :     _dopdu(getMaterialPropertyDerivative<Real>("order_parameter", _var.name())),
      31         136 :     _d2opdu2(getMaterialPropertyDerivative<Real>("order_parameter", _var.name(), _var.name())),
      32         272 :     _d2opdudarg(_n_args)
      33             : {
      34             :   // fetch derivatives
      35         136 :   for (unsigned int i = 0; i < _n_args; ++i)
      36           0 :     _d2opdudarg[i] = &getMaterialPropertyDerivative<Real>("order_parameter", _var.name(), i);
      37         136 : }
      38             : 
      39             : void
      40         136 : ChangedVariableTimeDerivative::initialSetup()
      41             : {
      42         408 :   validateNonlinearCoupling<Real>("order_parameter");
      43         136 : }
      44             : 
      45             : Real
      46   105238400 : ChangedVariableTimeDerivative::computeQpResidual()
      47             : {
      48   105238400 :   return TimeDerivative::computeQpResidual() * _dopdu[_qp];
      49             : }
      50             : 
      51             : Real
      52    71616000 : ChangedVariableTimeDerivative::computeQpJacobian()
      53             : {
      54    71616000 :   return TimeDerivative::computeQpJacobian() * _dopdu[_qp] +
      55    71616000 :          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