29 integer nev,iter(*),n,i,j,k,l,m,iii,ksmall,nincrement,
33 real*8 cc(nev,*),d(*),size
35 complex*16 a(nev,*),b(nev,*),x(nev,*),eiga(*),eigb(*),eigcorio(*),
36 & temp(nev,*),deig,eig,eignew
48 if(d(i).lt.0.d0) cycle
53 loop1:
do m=1,nincrement
58 eig=dsqrt(d(i))*(1.d0,0.d0)*m/nincrement
61 & (dsqrt(d(i))-dsqrt(d(i-1)))*m/nincrement)*(1.d0,0.d0)
68 a(k,l)=eig*cc(k,l)*(0.d0,1.d0)
69 b(k,l)=-cc(k,l)*(0.d0,1.d0)
71 a(k,k)=a(k,k)-eig*eig+d(k)
72 b(k,k)=b(k,k)+2.d0*eig
77 call dlzhes(n,a,n,b,n,temp,n,wantx)
78 call dlzit(n,a,n,b,n,temp,n,wantx,iter,eiga,eigb)
80 if(iter(1).eq.-1)
then 81 write(*,*)
'*ERROR in coriolissolve: fatal error' 82 write(*,*)
' in dlzit' 84 elseif(cdabs(eigb(1)).lt.1.d-10)
then 85 write(*,*)
'*ERROR in coriolissolve: eigenvalue' 86 write(*,*)
' out of bounds' 92 if(cdabs(deig).lt.size)
then 97 deig=eiga(ksmall)/eigb(ksmall)
102 if((cdabs(deig).lt.1.d-3*cdabs(eig)).or.
103 & (cdabs(deig).lt.1.d-3).or.(iii.eq.100))
then 109 if((i.ne.1).or.(m.ne.1))
then 110 call ident2(eigcorio,eignew,nevcomplex,ninc,id)
112 if((cdabs(eignew-eigcorio(id)).lt.
113 & 2.d-3*cdabs(eignew)).or.
114 & (cdabs(eignew).lt.1.d-3)) cycle loop1
116 if(id.ne.nevcomplex)
then 117 if((cdabs(eignew-eigcorio(id+1)).lt.
118 & 2.d-3*cdabs(eignew)).or.
119 & (cdabs(eignew).lt.1.d-3)) cycle loop1
127 a(k,l)=eig*cc(k,l)*(0.d0,1.d0)
128 b(k,l)=-cc(k,l)*(0.d0,1.d0)
130 a(k,k)=a(k,k)-eig*eig+d(k)
131 b(k,k)=b(k,k)+2.d0*eig
134 call dlzhes(n,a,n,b,n,temp,n,wantx)
135 call dlzit(n,a,n,b,n,temp,n,wantx,iter,eiga,eigb)
139 nevcomplex=nevcomplex+1
141 do k=nevcomplex,id+2,-1
142 eigcorio(k)=eigcorio(k-1)
149 x(j,id+1)=temp(j,ksmall)
151 eigcorio(id+1)=eignew
153 if(nevcomplex.eq.nev)
exit loop2
subroutine dlzhes(N, A, NA, B, NB, X, NX, WANTX)
Definition: dlz.f:7
subroutine ident2(x, px, n, ninc, id)
Definition: ident2.f:27
subroutine dlzit(N, A, NA, B, NB, X, NX, WANTX, ITER, EIGA, EIGB)
Definition: dlz.f:161