LCOV - code coverage report
Current view: top level - src/kernels - ADKernelGrad.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 419b9d Lines: 42 46 91.3 %
Date: 2025-08-08 20:01:16 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       32749 : ADKernelGradTempl<T>::validParams()
      22             : {
      23       32749 :   return ADKernelTempl<T>::validParams();
      24             : }
      25             : 
      26             : template <typename T>
      27        2177 : ADKernelGradTempl<T>::ADKernelGradTempl(const InputParameters & parameters)
      28        2177 :   : ADKernelTempl<T>(parameters)
      29             : {
      30        2177 : }
      31             : 
      32             : template <typename T>
      33             : void
      34     5995883 : ADKernelGradTempl<T>::computeResidual()
      35             : {
      36     5995883 :   prepareVectorTag(_assembly, _var.number());
      37             : 
      38     5995883 :   precalculateResidual();
      39     5995883 :   const unsigned int n_test = _grad_test.size();
      40     5995883 :   std::vector<Real> residuals(n_test);
      41             : 
      42     5995883 :   if (_use_displaced_mesh)
      43     1659305 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      44             :     {
      45     1463826 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      46    10393959 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      47     8930133 :         residuals[_i] += raw_value(MathUtils::dotProduct(value, _grad_test[_i][_qp]));
      48             :     }
      49             :   else
      50    27572924 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      51             :     {
      52    21772520 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      53   131794988 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      54   110022468 :         residuals[_i] += raw_value(MathUtils::dotProduct(value, _regular_grad_test[_i][_qp]));
      55             :     }
      56             : 
      57     5995883 :   this->addResiduals(_assembly, residuals, _var.dofIndices(), _var.scalingFactor());
      58             : 
      59     5995883 :   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     5995883 : }
      63             : 
      64             : template <typename T>
      65             : void
      66      804797 : ADKernelGradTempl<T>::computeResidualsForJacobian()
      67             : {
      68      804797 :   if (_residuals.size() != _grad_test.size())
      69        1993 :     _residuals.resize(_grad_test.size(), 0);
      70     3584338 :   for (auto & r : _residuals)
      71     2779541 :     r = 0;
      72             : 
      73      804797 :   precalculateResidual();
      74      804797 :   if (_use_displaced_mesh)
      75       21711 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      76             :     {
      77       18155 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      78      109302 :       for (_i = 0; _i < _grad_test.size(); _i++)
      79       91147 :         _residuals[_i] += MathUtils::dotProduct(value, _grad_test[_i][_qp]);
      80             :     }
      81             :   else
      82     3636241 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      83             :     {
      84     2835000 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      85    14149992 :       for (_i = 0; _i < _grad_test.size(); _i++)
      86    11314992 :         _residuals[_i] += MathUtils::dotProduct(value, _regular_grad_test[_i][_qp]);
      87             :     }
      88      804797 : }
      89             : 
      90             : template <typename T>
      91             : void
      92       18599 : ADKernelGradTempl<T>::computeResidualAndJacobian()
      93             : {
      94       18599 :   computeResidualsForJacobian();
      95       18599 :   this->addResidualsAndJacobian(_assembly, _residuals, _var.dofIndices(), _var.scalingFactor());
      96       18599 : }
      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