submodule(specialmatrices_toeplitz) toeplitz_utilities implicit none(type, external) contains module procedure det_rdp end procedure module procedure trace_rdp tr = A%vc(1)*A%m end procedure module procedure dense_rdp integer(ilp) :: i, j, m, n real(dp), allocatable :: t(:) m = A%m ; n = A%n ; allocate(t(-(n-1):m-1)) ; allocate(B(m, n)) t(:-1) = A%vr(n:2:-1) t(0:) = A%vc do concurrent(i=1:m, j=1:n) B(i, j) = t(i-j) enddo end procedure module procedure transpose_rdp end procedure module procedure size_rdp if (present(dim)) then select case(dim) case (1) arr_size = A%m case (2) arr_size = A%n end select else arr_size = A%m * A%n endif end procedure module procedure shape_rdp arr_shape = [A%m, A%n] end procedure module procedure scalar_multiplication_rdp B = Toeplitz(alpha*A%vc, alpha*A%vr) end procedure module procedure scalar_multiplication_bis_rdp B = Toeplitz(alpha*A%vc, alpha*A%vr) end procedure module procedure Toeplitz2Circulant real(dp), allocatable :: c_vec(:) integer(ilp) :: m, n m = T%m ; n = T%n ; allocate(c_vec(m+n)) c_vec(:m) = T%vc ; c_vec(m+1:) = cshift(T%vr(n:1:-1), -1) C = Circulant(c_vec) end procedure end submodule