subroutine Ceigen(n,Uf,Ud,d)
implicit none
integer :: n,info,i,j,lwork=-1
complex(8) :: Ud(n,n),Uf(n,n),rwork(2*n),d(n)
complex(8),allocatable :: work(:)
complex(8),dimension(1,1) :: vr,vl
allocate(work(0:n-1))
Ud=Uf
call zgeev('N','N', n, Ud, n, d, vl, 1, vr, 1, work, lwork, rwork, info)
lwork=work(1)
deallocate(work)
allocate(work(n))
call zgeev('N','N', n, Ud, n, d, vl, 1, vr, 1, work, lwork, rwork, info)
end subroutine Ceigen
我正在使用这个子程序来获得一个非对称的大复数矩阵的特征值。
但是,每次我收到以下错误
**进入ZGEEV参数号12时有非法值注意:以下浮点异常表示: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
lwork
是第12个参数。但是,如果我不指定lwork =work(1)
,我将得到每个特征值为零。
有人可以帮忙吗?
答案 0 :(得分:0)
通过在声明期间为.env
分配值,您隐式赋予它lwork
属性:
save
这意味着,它将在函数调用之间保持其值。如果您再次拨打integer :: n,info,i,j,lwork=-1
,第一次通话时不会Ceigen
,但可能是非法值(-1
,请参阅source code)。
另一方面,如果您不更改lwork < 2*n
,它将保持lwork
,您将始终查询工作数组大小,从不进行任何计算。
作为补救措施,将声明与作业分开:
-1