主题:求助:lapack中 zheev 调用出错
调用lapack 中的zheev 这个函数时出现,出现run-time error M6201:Math -sqrt:DOMAIN error .求教各位高手,我是哪出了问题?下面是源程序
program main
implicit none
integer,parameter::k=36
double precision::H(k,k),v(k,k),work(2*k),w(k),rwork(3*k)
integer i,j,m,n,info
real t,u,tr
open(22,file='lanczosegvl.txt')
open(23,file='lanczosegvt.txt')
t=-1.0
u=6.0
do i=1,36
do j=1,36
H(i,j)=0
end do
end do
do i=1,36
m=(i-1)/6+1
n=i-6*(m-1)
if((m==2.or.m==5).and.(n==2.or.n==5)) then
H(n,i)=H(n,i)+t
H(n+12,i)=H(n+12,i)+t
H(n+18,i)=H(n+18,i)+t
H(n+30,i)=H(n+30,i)+t
H(6*m-5,i)=H(6*m-5,i)+t
H(6*m-3,i)=H(6*m-3,i)+t
H(6*m-2,i)=H(6*m-2,i)+t
H(6*m,i)=H(6*m,i)+t
else if((m==2.or.m==5).and.(.not.(n==2.or.n==5))) then
H(n,i)=H(n,i)+t
H(n+12,i)=H(n+12,i)+t
H(n+18,i)=H(n+18,i)+t
H(n+30,i)=H(n+30,i)+t
H(6*m-4,i)=H(6*m-4,i)+t
H(6*m-1,i)=H(6*m-1,i)+t
else if((.not.(m==2.or.m==5)).and.(n==2.or.n==5)) then
H(n+6,i)=H(n+6,i)+t
H(n+24,i)=H(n+24,i)+t
H(6*m-5,i)=H(6*m-5,i)+t
H(6*m-3,i)=H(6*m-3,i)+t
H(6*m-2,i)=H(6*m-2,i)+t
H(6*m,i)=H(6*m,i)+t
else if((.not.(m==2.or.m==5)).and.(.not.(n==2.or.n==5))) then
H(n+6,i)=H(n+6,i)+t
H(n+24,i)=H(n+24,i)+t
H(6*m-4,i)=H(6*m-4,i)+t
H(6*m-1,i)=H(6*m-1,i)+t
end if
if(m==n) then
H(i,i)=H(i,i)+2*u
else if((m+n)/=7) then
H(i,i)=H(i,i)+u
end if
end do
do j=1,36
do i=1,36
write(*,"(F4.0,$)") H(j,i)
end do
write(*,"()/")
end do
tr=0
do i=1,k
tr=tr+H(i,i)
end do
write(*,*)'TrH=',tr
call zheev('V','U',k,H,k,w,work,2*k,rwork,info)
write(*,*)'info=',info
write(22,10)(w(i),i=1,k)
do i=1,k
write(23,10)(H(j,i),j=1,k)
end do
10 format(1x,16f16.8)
close(22)
close(23)
end program
program main
implicit none
integer,parameter::k=36
double precision::H(k,k),v(k,k),work(2*k),w(k),rwork(3*k)
integer i,j,m,n,info
real t,u,tr
open(22,file='lanczosegvl.txt')
open(23,file='lanczosegvt.txt')
t=-1.0
u=6.0
do i=1,36
do j=1,36
H(i,j)=0
end do
end do
do i=1,36
m=(i-1)/6+1
n=i-6*(m-1)
if((m==2.or.m==5).and.(n==2.or.n==5)) then
H(n,i)=H(n,i)+t
H(n+12,i)=H(n+12,i)+t
H(n+18,i)=H(n+18,i)+t
H(n+30,i)=H(n+30,i)+t
H(6*m-5,i)=H(6*m-5,i)+t
H(6*m-3,i)=H(6*m-3,i)+t
H(6*m-2,i)=H(6*m-2,i)+t
H(6*m,i)=H(6*m,i)+t
else if((m==2.or.m==5).and.(.not.(n==2.or.n==5))) then
H(n,i)=H(n,i)+t
H(n+12,i)=H(n+12,i)+t
H(n+18,i)=H(n+18,i)+t
H(n+30,i)=H(n+30,i)+t
H(6*m-4,i)=H(6*m-4,i)+t
H(6*m-1,i)=H(6*m-1,i)+t
else if((.not.(m==2.or.m==5)).and.(n==2.or.n==5)) then
H(n+6,i)=H(n+6,i)+t
H(n+24,i)=H(n+24,i)+t
H(6*m-5,i)=H(6*m-5,i)+t
H(6*m-3,i)=H(6*m-3,i)+t
H(6*m-2,i)=H(6*m-2,i)+t
H(6*m,i)=H(6*m,i)+t
else if((.not.(m==2.or.m==5)).and.(.not.(n==2.or.n==5))) then
H(n+6,i)=H(n+6,i)+t
H(n+24,i)=H(n+24,i)+t
H(6*m-4,i)=H(6*m-4,i)+t
H(6*m-1,i)=H(6*m-1,i)+t
end if
if(m==n) then
H(i,i)=H(i,i)+2*u
else if((m+n)/=7) then
H(i,i)=H(i,i)+u
end if
end do
do j=1,36
do i=1,36
write(*,"(F4.0,$)") H(j,i)
end do
write(*,"()/")
end do
tr=0
do i=1,k
tr=tr+H(i,i)
end do
write(*,*)'TrH=',tr
call zheev('V','U',k,H,k,w,work,2*k,rwork,info)
write(*,*)'info=',info
write(22,10)(w(i),i=1,k)
do i=1,k
write(23,10)(H(j,i),j=1,k)
end do
10 format(1x,16f16.8)
close(22)
close(23)
end program