utils.f90 Source File


Source Code

submodule(specialmatrices_circulant) circulant_utilities
   implicit none(type, external)
contains
   module procedure dense_rdp
   integer(ilp) :: j, n
   n = A%n; allocate (B(n, n)); B = 0.0_dp
   do concurrent(j=1:n)
      B(:, j) = cshift(A%c, -j + 1)
   end do
   end procedure dense_rdp

   module procedure transpose_rdp
   real(dp), allocatable :: b_vec(:)
   integer(ilp) :: n
   n = A%n
   b_vec = A%c(n:1:-1); b_vec = cshift(b_vec, -1)
   B = Circulant(b_vec)
   end procedure transpose_rdp

   module procedure size_rdp
   arr_size = A%n
   end procedure size_rdp

   module procedure shape_rdp
   arr_shape = A%n
   end procedure shape_rdp

   module procedure scalar_multiplication_rdp
   B = Circulant(alpha*A%c)
   end procedure scalar_multiplication_rdp

   module procedure scalar_multiplication_bis_rdp
   B = Circulant(alpha*A%c)
   end procedure scalar_multiplication_bis_rdp

end submodule circulant_utilities