LCOV - code coverage report
Current view: top level - src/utils - FFTData.C (source / functions) Hit Total Coverage
Test: idaholab/magpie: 5710af Lines: 40 66 60.6 %
Date: 2025-07-21 23:34:39 Functions: 20 101 19.8 %
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 "FFTData.h"
      10             : 
      11             : template <typename T>
      12             : FFTData<T> &
      13           0 : FFTData<T>::operator+=(FFTData<T> const & rhs)
      14             : {
      15           0 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      16           0 :     _buffer[i] += rhs[i];
      17           0 :   return *this;
      18             : }
      19             : 
      20             : template <typename T>
      21             : FFTData<T> &
      22           0 : FFTData<T>::operator-=(FFTData<T> const & rhs)
      23             : {
      24           0 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      25           0 :     _buffer[i] -= rhs[i];
      26           0 :   return *this;
      27             : }
      28             : 
      29             : template <typename T>
      30             : FFTData<T> &
      31          60 : FFTData<T>::operator*=(FFTData<typename FFTScalarType<T>::type> const & rhs)
      32             : {
      33       13260 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      34           0 :     _buffer[i] *= rhs[i];
      35          60 :   return *this;
      36             : }
      37             : 
      38             : template <typename T>
      39             : FFTData<T> &
      40           0 : FFTData<T>::operator/=(FFTData<typename FFTScalarType<T>::type> const & rhs)
      41             : {
      42           0 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      43           0 :     _buffer[i] /= rhs[i];
      44           0 :   return *this;
      45             : }
      46             : 
      47             : template <typename T>
      48             : FFTData<T> &
      49          93 : FFTData<T>::operator*=(Real rhs)
      50             : {
      51      375213 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      52      330120 :     _buffer[i] *= rhs;
      53          93 :   return *this;
      54             : }
      55             : 
      56             : template <typename T>
      57             : FFTData<T> &
      58           0 : FFTData<T>::operator/=(Real rhs)
      59             : {
      60           0 :   const Real reciprocal = 1 / rhs;
      61           0 :   for (std::size_t i = 0; i < _buffer.size(); ++i)
      62           0 :     _buffer[i] *= reciprocal;
      63           0 :   return *this;
      64             : }
      65             : 
      66             : template <typename T>
      67             : FFTData<T> &
      68          60 : FFTData<T>::operator=(FFTData<T> const & rhs)
      69             : {
      70             :   mooseAssert(size() == rhs.size(), "Buffers need to have identical size!");
      71          60 :   _buffer = rhs._buffer;
      72          60 :   return *this;
      73             : }
      74             : 
      75             : template <typename T>
      76             : FFTData<T> &
      77           3 : FFTData<T>::operator=(const T & rhs)
      78             : {
      79             :   std::fill(_buffer.begin(), _buffer.end(), rhs);
      80           3 :   return *this;
      81             : }
      82             : 
      83             : template <typename T>
      84             : template <typename T1, typename T2>
      85             : void
      86          18 : FFTData<T>::setToProductRealSpace(const FFTData<T1> & m1, const FFTData<T2> & m2)
      87             : {
      88             :   mooseAssert(size() == m1.size(), "Buffer size mismatch");
      89             :   mooseAssert(size() == m2.size(), "Buffer size mismatch");
      90             : 
      91      589842 :   for (unsigned int index = 0; index < _buffer.size(); index++)
      92      589824 :     (*this)[index] = m1[index] * m2[index];
      93          18 : }
      94             : 
      95             : template <>
      96             : void *
      97          42 : FFTData<Real>::start(std::size_t i)
      98             : {
      99          42 :   return reinterpret_cast<void *>(&_buffer[i]);
     100             : }
     101             : template <>
     102             : void *
     103          42 : FFTData<Complex>::start(std::size_t i)
     104             : {
     105          42 :   return reinterpret_cast<void *>(&_buffer[i]);
     106             : }
     107             : 
     108             : template <>
     109             : void *
     110          18 : FFTData<RealVectorValue>::start(std::size_t i)
     111             : {
     112          18 :   return reinterpret_cast<void *>(&_buffer[i](0));
     113             : }
     114             : template <>
     115             : void *
     116          18 : FFTData<ComplexVectorValue>::start(std::size_t i)
     117             : {
     118          18 :   return reinterpret_cast<void *>(&_buffer[i](0));
     119             : }
     120             : 
     121             : template <>
     122             : void *
     123          12 : FFTData<RankTwoTensor>::start(std::size_t i)
     124             : {
     125          12 :   return reinterpret_cast<void *>(&_buffer[i](0, 0));
     126             : }
     127             : template <>
     128             : void *
     129          12 : FFTData<ComplexRankTwoTensor>::start(std::size_t i)
     130             : {
     131          12 :   return reinterpret_cast<void *>(&_buffer[i](0, 0));
     132             : }
     133             : 
     134             : template <>
     135             : void *
     136           0 : FFTData<RankThreeTensor>::start(std::size_t i)
     137             : {
     138           0 :   return reinterpret_cast<void *>(&_buffer[i](0, 0, 0));
     139             : }
     140             : template <>
     141             : void *
     142           0 : FFTData<ComplexRankThreeTensor>::start(std::size_t i)
     143             : {
     144           0 :   return reinterpret_cast<void *>(&_buffer[i](0, 0, 0));
     145             : }
     146             : 
     147             : template <>
     148             : void *
     149          12 : FFTData<RankFourTensor>::start(std::size_t i)
     150             : {
     151          12 :   return reinterpret_cast<void *>(&_buffer[i](0, 0, 0, 0));
     152             : }
     153             : template <>
     154             : void *
     155          12 : FFTData<ComplexRankFourTensor>::start(std::size_t i)
     156             : {
     157          12 :   return reinterpret_cast<void *>(&_buffer[i](0, 0, 0, 0));
     158             : }
     159             : 
     160             : template <typename T>
     161             : std::size_t
     162           0 : FFTData<T>::howMany() const
     163             : {
     164           0 :   mooseError("Only call howMany() on the real space buffer!");
     165             : }
     166             : 
     167             : template <>
     168             : std::size_t
     169          21 : FFTData<Real>::howMany() const
     170             : {
     171          21 :   return 1;
     172             : }
     173             : 
     174             : template <>
     175             : std::size_t
     176           9 : FFTData<RealVectorValue>::howMany() const
     177             : {
     178           9 :   return LIBMESH_DIM;
     179             : }
     180             : 
     181             : template <>
     182             : std::size_t
     183           6 : FFTData<RankTwoTensor>::howMany() const
     184             : {
     185           6 :   return LIBMESH_DIM * LIBMESH_DIM;
     186             : }
     187             : 
     188             : template <>
     189             : std::size_t
     190           0 : FFTData<RankThreeTensor>::howMany() const
     191             : {
     192           0 :   return LIBMESH_DIM * LIBMESH_DIM * LIBMESH_DIM;
     193             : }
     194             : 
     195             : template <>
     196             : std::size_t
     197           6 : FFTData<RankFourTensor>::howMany() const
     198             : {
     199           6 :   return LIBMESH_DIM * LIBMESH_DIM * LIBMESH_DIM * LIBMESH_DIM;
     200             : }
     201             : 
     202             : // explicit instantiations
     203             : template class FFTData<Real>;
     204             : template class FFTData<RealVectorValue>;
     205             : template class FFTData<RankTwoTensor>;
     206             : template class FFTData<RankThreeTensor>;
     207             : template class FFTData<RankFourTensor>;
     208             : 
     209             : template class FFTData<Complex>;
     210             : template class FFTData<ComplexVectorValue>;
     211             : template class FFTData<ComplexRankTwoTensor>;
     212             : template class FFTData<ComplexRankThreeTensor>;
     213             : template class FFTData<ComplexRankFourTensor>;
     214             : 
     215             : template void FFTData<RankTwoTensor>::setToProductRealSpace(const FFTData<RankFourTensor> & m1,
     216             :                                                             const FFTData<RankTwoTensor> & m2);

Generated by: LCOV version 1.14