- Code: Select all
`ifort -I $(MKLPATH) -o matrix_diag_01 matrix_diag_01.f90`

random.f90 $(MKLPATH)libmkl_lapack95.a -Wl,--start-group

$(MKLPATH)libmkl_intel_lp64.a $(MKLPATH)libmkl_lapack.a

$(MKLPATH)libmkl_intel_thread.a $(MKLPATH)libmkl_core.a

-Wl,--end-group -lguide -lpthread

The executable works nicely when smallish matrices are given. However, for matrices of size 3000x3000 it produces some strange behaviour. First it gives this error

- Code: Select all
`MKL ERROR : Parameter 8 was incorrect on entry to SSYEVD`

However, there are only 3 parameters in the call to SSYEVD. Second, it returns the eigenvectors but not the eigenvalues. I have checked by compiling in another machine with larger memory but the outcome was the same.

Can anyone please help?

Thanks!

- Code: Select all
`PROGRAM matrix_diag_01`

USE random

IMPLICIT NONE

INTERFACE

SUBROUTINE diag(mat,n)

INTEGER n

REAL,DIMENSION(n,n) :: mat

END SUBROUTINE

END INTERFACE

INTEGER n,i,j,iseed

REAL, DIMENSION(:), ALLOCATABLE :: w

REAL, DIMENSION(:,:), ALLOCATABLE :: mat

write (*,*) ' Please enter size of matrix'

read (*,*) n

write (*,*) ' Please type seed'

read (*,*) iseed

allocate (mat(n,n))

do i = 1,n

do j = 1,n

mat(i,j) = ran(iseed)

end do

end do

call diag(mat,n)

stop

END

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SUBROUTINE diag(mat,n)

USE mkl95_lapack

USE mkl95_precision

IMPLICIT NONE

CHARACTER(len=1) :: jobz = 'V'

INTEGER n,i

REAL,DIMENSION(n,n) :: mat

REAL,DIMENSION(:,:),ALLOCATABLE :: matt,a

REAL,DIMENSION(:),ALLOCATABLE :: w

allocate (matt(n,n),a(n,n),w(n))

matt = mat*transpose(mat)

a = sqrt(matt)

open (unit=7,file="matrix.dat",status="unknown")

do i = 1,n

write (7,100) a(i,:)

end do

close (unit=7)

call syevd(a,w,jobz)

open (unit=8,file="eig_val.dat",status="unknown")

do i = 1,n

write (8,100) w(i)

end do

close (unit=8)

open (unit=9,file="eig_vec.dat",status="unknown")

do i = 1,n

write (9,100) a(i,:)

end do

close (unit=9)

return

100 format(5000f16.5)

end