LCOV - code coverage report
Current view: top level - src/auxkernels - FFTBufferAux.C (source / functions) Hit Total Coverage
Test: idaholab/magpie: 5710af Lines: 36 47 76.6 %
Date: 2025-07-21 23:34:39 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /**********************************************************************/
       2             : /*                     DO NOT MODIFY THIS HEADER                      */
       3             : /* MAGPIE - Mesoscale Atomistic Glue Program for Integrated Execution */
       4             : /*                                                                    */
       5             : /*            Copyright 2017 Battelle Energy Alliance, LLC            */
       6             : /*                        ALL RIGHTS RESERVED                         */
       7             : /**********************************************************************/
       8             : 
       9             : #include "FFTBufferAux.h"
      10             : #include "FFTBufferBase.h"
      11             : 
      12             : registerMooseObject("MagpieApp", FFTBufferAux);
      13             : 
      14             : InputParameters
      15          96 : FFTBufferAux::validParams()
      16             : {
      17          96 :   InputParameters params = AuxKernel::validParams();
      18          96 :   params.addClassDescription("Fetch values from an FFT buffer.");
      19         192 :   params.addRequiredParam<UserObjectName>("fft_buffer", "Real valued FFT buffer object");
      20         192 :   params.addParam<std::vector<unsigned int>>(
      21          96 :       "component", std::vector<unsigned int>(), "Component to access for higher order types");
      22          96 :   return params;
      23           0 : }
      24             : 
      25          48 : FFTBufferAux::FFTBufferAux(const InputParameters & parameters)
      26             :   : AuxKernel(parameters),
      27          48 :     _buffer(getUserObject<UserObject>("fft_buffer")),
      28         144 :     _component(getParam<std::vector<unsigned int>>("component"))
      29             : {
      30             :   // cast into all possible buffer options
      31          48 :   _real_buffer = dynamic_cast<const FFTBufferBase<Real> *>(&_buffer);
      32          48 :   _realvectorvalue_buffer = dynamic_cast<const FFTBufferBase<RealVectorValue> *>(&_buffer);
      33          48 :   _ranktwotensor_buffer = dynamic_cast<const FFTBufferBase<RankTwoTensor> *>(&_buffer);
      34          48 :   _rankthreetensor_buffer = dynamic_cast<const FFTBufferBase<RankThreeTensor> *>(&_buffer);
      35          48 :   _rankfourtensor_buffer = dynamic_cast<const FFTBufferBase<RankFourTensor> *>(&_buffer);
      36             : 
      37             :   // one of those should not result in a nullptr
      38          48 :   if (_real_buffer)
      39             :   {
      40          21 :     if (_component.size() != 0)
      41           0 :       paramError("component", "Do not specify a comonent for Real type FFT buffers.");
      42             :   }
      43          27 :   else if (_realvectorvalue_buffer)
      44             :   {
      45          18 :     if (_component.size() != 1)
      46           0 :       paramError("component",
      47             :                  "Specify one index value to access a RealVectorValue type FFT buffer component.");
      48             :   }
      49           9 :   else if (_ranktwotensor_buffer)
      50             :   {
      51           6 :     if (_component.size() != 2)
      52           0 :       paramError("component",
      53             :                  "Specify two index values to access a RankTwoTensor type FFT buffer component.");
      54             :   }
      55           3 :   else if (_rankthreetensor_buffer)
      56             :   {
      57           0 :     if (_component.size() != 3)
      58           0 :       paramError(
      59             :           "component",
      60             :           "Specify three index values to access a RankThreeTensor type FFT buffer component.");
      61             :   }
      62           3 :   else if (_rankfourtensor_buffer)
      63             :   {
      64           3 :     if (_component.size() != 4)
      65           0 :       paramError("component",
      66             :                  "Specify four index values to access a RankFourTensor type FFT buffer component.");
      67             :   }
      68             :   else
      69           0 :     paramError("fft_buffer", "Unsupported buffer type");
      70          48 : }
      71             : 
      72             : Real
      73     3267120 : FFTBufferAux::computeValue()
      74             : {
      75     3267120 :   if (_real_buffer)
      76     1317648 :     return (*_real_buffer)(_current_elem->vertex_average());
      77     1949472 :   if (_realvectorvalue_buffer)
      78      180000 :     return (*_realvectorvalue_buffer)(_current_elem->vertex_average())(_component[0]);
      79     1769472 :   if (_ranktwotensor_buffer)
      80     1179648 :     return (*_ranktwotensor_buffer)(_current_elem->vertex_average())(_component[0], _component[1]);
      81      589824 :   if (_rankthreetensor_buffer)
      82           0 :     return (*_rankthreetensor_buffer)(
      83           0 :         _current_elem->vertex_average())(_component[0], _component[1], _component[2]);
      84      589824 :   if (_rankfourtensor_buffer)
      85      589824 :     return (*_rankfourtensor_buffer)(_current_elem->vertex_average())(_component[0],
      86             :                                                                       _component[1],
      87             :                                                                       _component[2],
      88      589824 :                                                                       _component[3]);
      89             :   else
      90           0 :     paramError("fft_buffer", "Unsupported buffer type");
      91             : }

Generated by: LCOV version 1.14