LCOV - code coverage report
Current view: top level - src/kernels - ADKernelGrad.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 42 46 91.3 %
Date: 2025-07-17 01:28:37 Functions: 5 12 41.7 %
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 "ADKernelGrad.h"
      11             : #include "MathUtils.h"
      12             : #include "Assembly.h"
      13             : #include "SystemBase.h"
      14             : #include "ADUtils.h"
      15             : 
      16             : // libmesh includes
      17             : #include "libmesh/threads.h"
      18             : 
      19             : template <typename T>
      20             : InputParameters
      21       32535 : ADKernelGradTempl<T>::validParams()
      22             : {
      23       32535 :   return ADKernelTempl<T>::validParams();
      24             : }
      25             : 
      26             : template <typename T>
      27        2070 : ADKernelGradTempl<T>::ADKernelGradTempl(const InputParameters & parameters)
      28        2070 :   : ADKernelTempl<T>(parameters)
      29             : {
      30        2070 : }
      31             : 
      32             : template <typename T>
      33             : void
      34     5689836 : ADKernelGradTempl<T>::computeResidual()
      35             : {
      36     5689836 :   prepareVectorTag(_assembly, _var.number());
      37             : 
      38     5689836 :   precalculateResidual();
      39     5689836 :   const unsigned int n_test = _grad_test.size();
      40     5689836 :   std::vector<Real> residuals(n_test);
      41             : 
      42     5689836 :   if (_use_displaced_mesh)
      43     1652931 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      44             :     {
      45     1458746 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      46    10368751 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      47     8910005 :         residuals[_i] += raw_value(MathUtils::dotProduct(value, _grad_test[_i][_qp]));
      48             :     }
      49             :   else
      50    26130571 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      51             :     {
      52    20634920 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      53   125845684 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      54   105210764 :         residuals[_i] += raw_value(MathUtils::dotProduct(value, _regular_grad_test[_i][_qp]));
      55             :     }
      56             : 
      57     5689836 :   this->addResiduals(_assembly, residuals, _var.dofIndices(), _var.scalingFactor());
      58             : 
      59     5689836 :   if (_has_save_in)
      60           0 :     for (unsigned int i = 0; i < _save_in.size(); i++)
      61           0 :       _save_in[i]->sys().solution().add_vector(residuals.data(), _save_in[i]->dofIndices());
      62     5689836 : }
      63             : 
      64             : template <typename T>
      65             : void
      66      717840 : ADKernelGradTempl<T>::computeResidualsForJacobian()
      67             : {
      68      717840 :   if (_residuals.size() != _grad_test.size())
      69        1881 :     _residuals.resize(_grad_test.size(), 0);
      70     3193653 :   for (auto & r : _residuals)
      71     2475813 :     r = 0;
      72             : 
      73      717840 :   precalculateResidual();
      74      717840 :   if (_use_displaced_mesh)
      75       20779 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      76             :     {
      77       17415 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      78      105658 :       for (_i = 0; _i < _grad_test.size(); _i++)
      79       88243 :         _residuals[_i] += MathUtils::dotProduct(value, _grad_test[_i][_qp]);
      80             :     }
      81             :   else
      82     3237704 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      83             :     {
      84     2523228 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      85    12598764 :       for (_i = 0; _i < _grad_test.size(); _i++)
      86    10075536 :         _residuals[_i] += MathUtils::dotProduct(value, _regular_grad_test[_i][_qp]);
      87             :     }
      88      717840 : }
      89             : 
      90             : template <typename T>
      91             : void
      92       17131 : ADKernelGradTempl<T>::computeResidualAndJacobian()
      93             : {
      94       17131 :   computeResidualsForJacobian();
      95       17131 :   this->addResidualsAndJacobian(_assembly, _residuals, _var.dofIndices(), _var.scalingFactor());
      96       17131 : }
      97             : 
      98             : template <typename T>
      99             : ADReal
     100           0 : ADKernelGradTempl<T>::computeQpResidual()
     101             : {
     102           0 :   mooseError("Override precomputeQpResidual() in your ADKernelGrad derived class!");
     103             : }
     104             : 
     105             : template class ADKernelGradTempl<Real>;
     106             : template class ADKernelGradTempl<RealVectorValue>;

Generated by: LCOV version 1.14