- 积分
- 7647
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-10-29
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
想问一下知道的人,我在用李老师的EOF程序做SST时,发现程序到了JACOBI那进入死循环了 ,底下是部分程序。我发现我的l=0,这导致程序一直回到60那重复。因为对JACOBI的数学表达不是很了解。想知道这个l具体是什么?还有怎么解决这种问题呢?subroutine jacobi(m,a,s,d,eps) implicit none
integer*4 :: m
real*4 :: a(m,m),s(m,m),d(m),eps
integer*4 :: i,j,i1,l,iq,iq1,ip
real*4 :: g,s1,s2,s3,v1,v2,v3,u,st,ct
s=0.0
do i=1,m
s(i,i)=1.0
enddo
g=0.
do i=2,m
i1=i-1
do j=1,i1
g=g+2.0*a(i,j)*a(i,j)
enddo
enddo
s1=sqrt(g)
s2=eps/float(m)*s1
s3=s1
l=0
50 s3=s3/float(m)
60 do iq=2,m
iq1=iq-1
do ip=1,iq1
if(abs(a(ip,iq)).lt.s3) exit
l=1
v1=a(ip,ip)
v2=a(ip,iq)
v3=a(iq,iq)
u=0.5*(v1-v3)
if(u.eq.0.0) g=1.
if(abs(u).ge.1e-10) g=-sign(1.,u)*v2/sqrt(v2*v2+u*u)
st=g/sqrt(2.*(1.+sqrt(1.-g*g)))
ct=sqrt(1.-st*st)
do i=1,m
g=a(i,ip)*ct-a(i,iq)*st
a(i,iq)=a(i,ip)*st+a(i,iq)*ct
a(i,ip)=g
g=s(i,ip)*ct-s(i,iq)*st
s(i,iq)=s(i,ip)*st+s(i,iq)*ct
s(i,ip)=g
enddo
do i=1,m
a(ip,i)=a(i,ip)
a(iq,i)=a(i,iq)
enddo
g=2.*v2*st*ct
a(ip,ip)=v1*ct*ct+v3*st*st-g
a(iq,iq)=v1*st*st+v3*ct*ct+g
a(ip,iq)=(v1-v3)*st*ct+v2*(ct*ct-st*st)
a(iq,ip)=a(ip,iq)
enddo
enddo
write(*,*)l
stop
if((l-1)==0)then
l=0
go to 60
else
go to 150
endif
150
|
|