ОШИБКА: параметр 8 был неверным при входе в ZHEEV
module RandMat
implicit none
double complex, dimension(:,:), allocatable :: A, L, U
integer :: n
contains
function Diag() result(Eigenvalues)
implicit none
double complex, dimension(n) :: Eigenvalues
double complex, dimension(2*n-1) :: work
double precision, dimension(n,n) :: eigenmatrix
integer :: Lwork
integer :: info, ii
double precision :: rwork(3*n-2)
double complex :: check(n,n), alpha, beta
check=A
info=0
lwork =2*n-1
!call routine to diagonalize A
call zheev('V','U',n, check, n, Eigenvalues, work, lwork, rwork, info )
end function
end module
Эта функция объявлена внутри модуля. A
это n x n
Эрмитова матрица, которую я определил в модуле, поэтому я могу использовать ее здесь. n
определяется в модуле, а также является размером A
,
Проблема в том, что я всегда получаю ошибку во время выполнения:
Intel MKL ERROR: Parameter 8 was incorrect on entry to ZHEEV
при звонке zheev
,
РЕДАКТИРОВАТЬ: я добавил объявление переменных в модуле. Матрица A выделяется и инициализируется следующей процедурой:
subroutine Initialize
implicit none
integer, dimension(2) :: clock
integer , dimension(:), allocatable :: seed
integer :: ii,jj
double precision :: c,d
!create random complex matrix of dimension nxn
!-----------------------------------------------------------------------
!allocate A
if (.not.allocated(A)) then
allocate(A(N,N))
else if (size(A,1).neqv.N) then
allocate(A(N,N))
end if
!get execution time--> will be used as seed
call System_clock(count=clock(1))
call random_seed(put=clock)
!initialize matrix with random values
do ii=1,n
!since we are only interested in hermitian matrices is it enough to only !initialize the upper diagonal matrix
do jj=ii,n
call random_number(c)
Call random_number(d)
A(ii,jj)=cmplx(c, d)
end do
end do
!make matrix hermitian
!---------------------------------------------------------------------------
do ii=2, n
do jj=1, ii-1
A(ii,jj)=conjg(A(jj,ii))
end do
end do
end subroutine