爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5512|回复: 11

[求助] 对于李建平老师的EOF中JACOBI子程序的疑问

[复制链接]

新浪微博达人勋

发表于 2014-3-28 14:40:34 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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               



密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-28 14:41:38 | 显示全部楼层
错了,我写错了,是l=1,然后IF语句那l-1=0,就回头重复去了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-28 14:48:47 | 显示全部楼层
。。。二爷碉堡了!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-28 14:53:27 | 显示全部楼层
棋子灯花 发表于 2014-3-28 14:48
。。。二爷碉堡了!!

艰难。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-3-28 20:50:33 | 显示全部楼层
JCB是求解行列式的···
fortran是不会死循环的;
l=0,你看看是不是哪里没有执行···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-3 13:53:46 | 显示全部楼层
是吗?不会吧
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-29 21:22:56 | 显示全部楼层
jab是行列式,计算距阵的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-29 21:45:11 | 显示全部楼层
做EOF是不是很难啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-13 11:02:12 | 显示全部楼层
我也出现了同样的问题,请问您的最后怎么解决了?非常感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-9-13 16:07:59 | 显示全部楼层
mmwj1990 发表于 2014-9-13 11:02
我也出现了同样的问题,请问您的最后怎么解决了?非常感谢!

不好意思,过去了将近半年也给忘了。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表