eig.f90 Source File


Source Code

submodule(specialmatrices_circulant) circulant_eigenvalue_decomposition
   use stdlib_linalg, only: stdlib_eig => eig, stdlib_eigvals => eigvals, eye
   implicit none(type, external)
contains
   module procedure eigvals_rdp
   lambda = A%c_hat
   end procedure

   module procedure eig_rdp
   real(dp), allocatable :: Amat(:, :)
   integer(ilp) :: i, n
   n = A%n
   lambda = A%c_hat
   if (present(right)) then
      right = eye(n, mold=1.0_dp)
      do concurrent(i=1:n)
         right(:, i) = ifft(right(:, i), n) / sqrt(1.0_dp*n)
      enddo
   endif

   if (present(left)) then
      left = eye(n, mold=1.0_dp)
      do concurrent(i=1:n)
         left(:, i) = ifft(left(:, i), n) / sqrt(1.0_dp*n)
      enddo
   endif
   end procedure
end submodule