matvecs.f90 Source File


Source Code

submodule(specialmatrices_circulant) circulant_matvecs
   implicit none(type, external)
contains
   module procedure spmv
   integer(ilp) :: i
   y = x
   y = real(ifft(fft(cmplx(y, kind=dp), A%n)*A%c_hat, A%n))/A%n
   end procedure spmv

   module procedure spmvs
   integer(ilp) :: i
   y = x
   do concurrent(i=1:size(x, 2))
      y(:, i) = matmul(A, x(:, i))
   end do
   end procedure spmvs
end submodule circulant_matvecs