ОШИБКА: параметр 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

0 ответов

Другие вопросы по тегам