utils.f90 Source File


Source Code

submodule(specialmatrices_bidiagonal) bidiagonal_utils
   implicit none(type, external)
contains
   module procedure dense_rdp
   integer(ilp) :: i, n
   n = A%n; allocate (B(n, n)); B = 0.0_dp
   select case (A%which)
   case ("L")
      B(1, 1) = A%dv(1)
      do concurrent(i=2:n)
         B(i, i) = A%dv(i)
         B(i, i - 1) = A%ev(i - 1)
      end do
   case ("U")
      do concurrent(i=1:n - 1)
         B(i, i) = A%dv(i)
         B(i, i + 1) = A%ev(i)
      end do
      B(n, n) = A%dv(n)
   end select
   end procedure

   module procedure transpose_rdp
   B = A
   if (A%which == "L") then
      B%which = "U"
   else
      B%which = "L"
   end if
   end procedure

   module procedure shape_rdp
   arr_shape = A%n
   end procedure

   module procedure size_rdp
   arr_size = A%n
   end procedure

   module procedure scalar_multiplication_rdp
   B = Bidiagonal(alpha*A%dv, alpha*A%ev, A%which)
   end procedure

   module procedure scalar_multiplication_bis_rdp
   B = Bidiagonal(alpha*A%dv, alpha*A%ev, A%which)
   end procedure

end submodule