LCOV - code coverage report
Current view: top level - src/kernels - ADKernelValue.C (source / functions) Hit Total Coverage
Test: idaholab/moose framework: 2bf808 Lines: 29 43 67.4 %
Date: 2025-07-17 01:28:37 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      100942 : ADKernelValueTempl<T>::validParams()
      21             : {
      22      100942 :   return ADKernelTempl<T>::validParams();
      23             : }
      24             : 
      25             : template <typename T>
      26         567 : ADKernelValueTempl<T>::ADKernelValueTempl(const InputParameters & parameters)
      27         567 :   : ADKernelTempl<T>(parameters)
      28             : {
      29         567 : }
      30             : 
      31             : template <typename T>
      32             : void
      33     1380908 : ADKernelValueTempl<T>::computeResidual()
      34             : {
      35     1380908 :   prepareVectorTag(_assembly, _var.number());
      36             : 
      37     1380908 :   precalculateResidual();
      38     1380908 :   const unsigned int n_test = _test.size();
      39             : 
      40     1380908 :   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     6821924 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      49             :     {
      50     5441016 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      51    28383080 :       for (_i = 0; _i < n_test; _i++) // target for auto vectorization
      52    22942064 :         _local_re(_i) += raw_value(value * _test[_i][_qp]);
      53             :     }
      54             : 
      55     1380908 :   accumulateTaggedLocalResidual();
      56             : 
      57     1380908 :   if (_has_save_in)
      58             :   {
      59           0 :     Threads::spin_mutex::scoped_lock lock(Threads::spin_mtx);
      60           0 :     for (unsigned int i = 0; i < _save_in.size(); i++)
      61           0 :       _save_in[i]->sys().solution().add_vector(_local_re, _save_in[i]->dofIndices());
      62           0 :   }
      63     1380908 : }
      64             : 
      65             : template <typename T>
      66             : void
      67      216105 : ADKernelValueTempl<T>::computeResidualsForJacobian()
      68             : {
      69      216105 :   if (_residuals.size() != _test.size())
      70         534 :     _residuals.resize(_test.size(), 0);
      71     1159573 :   for (auto & r : _residuals)
      72      943468 :     r = 0;
      73             : 
      74      216105 :   precalculateResidual();
      75             : 
      76      216105 :   if (_use_displaced_mesh)
      77           0 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      78             :     {
      79           0 :       const auto value = precomputeQpResidual() * _ad_JxW[_qp] * _ad_coord[_qp];
      80           0 :       for (_i = 0; _i < _test.size(); _i++)
      81           0 :         _residuals[_i] += value * _test[_i][_qp];
      82             :     }
      83             :   else
      84     1028885 :     for (_qp = 0; _qp < _qrule->n_points(); _qp++)
      85             :     {
      86      812780 :       const auto value = precomputeQpResidual() * _JxW[_qp] * _coord[_qp];
      87     4483372 :       for (_i = 0; _i < _test.size(); _i++)
      88     3670592 :         _residuals[_i] += value * _test[_i][_qp];
      89             :     }
      90      216105 : }
      91             : 
      92             : template <typename T>
      93             : ADReal
      94           0 : ADKernelValueTempl<T>::computeQpResidual()
      95             : {
      96           0 :   mooseError("Override precomputeQpResidual() in your ADKernelValueTempl derived class!");
      97             : }
      98             : 
      99             : template class ADKernelValueTempl<Real>;
     100             : template class ADKernelValueTempl<RealVectorValue>;

Generated by: LCOV version 1.14