LCOV - code coverage report
Current view: top level - src/kernels - ADKernelValue.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: #32971 (54bef8) with base c6cf66 Lines: 29 41 70.7 %
Date: 2026-05-29 20:35:17 Functions: 8 10 80.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 "ADKernelValue.h"
      11             : #include "Assembly.h"
      12             : #include "SystemBase.h"
      13             : #include "ADUtils.h"
      14             : 
      15             : // libmesh includes
      16             : #include "libmesh/threads.h"
      17             : 
      18             : template <typename T>
      19             : InputParameters
      20       26094 : ADKernelValueTempl<T>::validParams()
      21             : {
      22       26094 :   return ADKernelTempl<T>::validParams();
      23             : }
      24             : 
      25             : template <typename T>
      26         842 : ADKernelValueTempl<T>::ADKernelValueTempl(const InputParameters & parameters)
      27         842 :   : ADKernelTempl<T>(parameters)
      28             : {
      29         842 : }
      30             : 
      31             : template <typename T>
      32             : void
      33     1359539 : ADKernelValueTempl<T>::computeResidual()
      34             : {
      35     1359539 :   prepareVectorTag(_assembly, _var.number());
      36             : 
      37     1359539 :   precalculateResidual();
      38     1359539 :   const unsigned int n_test = _test.size();
      39             : 
      40     1359539 :   if (_use_displaced_mesh)
      41           0 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      42             :     {
      43           0 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      44           0 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      45           0 :         _local_re(_i) += raw_value(value * _test[_i][_qp]);
      46             :     }
      47             :   else
      48     6708059 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      49             :     {
      50     5348520 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      51    27829184 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      52    22480664 :         _local_re(_i) += raw_value(value * _test[_i][_qp]);
      53             :     }
      54             : 
      55     1359539 :   accumulateTaggedLocalResidual();
      56             : 
      57     1359539 :   if (_has_save_in)
      58           0 :     for (unsigned int i = 0; i < _save_in.size(); i++)
      59           0 :       _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
      60     1359539 : }
      61             : 
      62             : template <typename T>
      63             : void
      64      268009 : ADKernelValueTempl<T>::computeResidualsForJacobian()
      65             : {
      66      268009 :   if (_residuals.size() != _test.size())
      67         755 :     _residuals.resize(_test.size(), 0);
      68     1416227 :   for (auto & r : _residuals)
      69     1148218 :     r = 0;
      70             : 
      71      268009 :   precalculateResidual();
      72             : 
      73      268009 :   if (_use_displaced_mesh)
      74           0 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      75             :     {
      76           0 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      77           0 :       for (_i = 0; _i < _test.size(); _i++)
      78           0 :         _residuals[_i] += value * _test[_i][_qp];
      79             :     }
      80             :   else
      81     1285123 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      82             :     {
      83     1017114 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      84     5500142 :       for (_i = 0; _i < _test.size(); _i++)
      85     4483028 :         _residuals[_i] += value * _test[_i][_qp];
      86             :     }
      87      268009 : }
      88             : 
      89             : template <typename T>
      90             : ADReal
      91           0 : ADKernelValueTempl<T>::computeQpResidual()
      92             : {
      93           0 :   mooseError("Override precomputeQpResidual() in your ADKernelValueTempl derived class!");
      94             : }
      95             : 
      96             : template class ADKernelValueTempl<Real>;
      97             : template class ADKernelValueTempl<RealVectorValue>;

Generated by: LCOV version 1.14