whuwuteng的个人博客分享 http://blog.sciencenet.cn/u/whuwuteng

博文

6SV1.1编译成功的过程

已有 9006 次阅读 2012-8-13 20:15 |系统分类:科研笔记| 6S大气校正

当在windows下面,用VS2010+Intel(R) Visual Fortran Compiler XE 12.0.5.221,编译6S的FORTRAN代码时,会发现在http://6s.ltdri.org/index.html下载的原始的6SV1.1版本的代码是有问题的。错误1:
错误1:
在AKTOOL.f中用到
call dakg(uu, aa, n)
但是在subroutine中uu aa 长度是48,在AKTOOL中确实20,所以会出现错误,不过Release会编译过去,Debug会失败。
错误2:
在DISCOM.f中
60行
      do 50 l=1,20
        wl=wldis(l)
        if ((wlsup.lt.wldis(1)).and.(l.le.2)) goto 30
        if (wlinf.gt.wldis(20).and.(l.ge.19)) goto 30
c会内存出错
c        if ((l.lt.20).and.(wldis(l).lt.wlinf).and.
c     a     (wldis(l+1).lt.wlinf)) goto 50
c        if ((l.gt.1).and.(wldis(l).gt.wlsup).and.
c     a      (wldis(l-1).gt.wlsup)) goto 50
        if ((l.lt.20).and.(wldis(l).lt.wlinf)) then
            if (wldis(l+1).lt.wlinf) goto 50
        endif
        if ((l.gt.1).and.(wldis(l).gt.wlsup))  then
            if (wldis(l-1).gt.wlsup) goto 50
        endif
内存会越界,下面是自改办法。
错误3:
在ISO.f中,用到了
      call aero_prof(ta,piz,tr,hr,ntp,xmus,
     s   h,ch,ydel,xdel,altc)
不过xmus是未定义,所以有点不理解作者的意思了。过根据上下文,知道xmus=rm(0),rm在ISO.f中是有定义的。
之后,输入Manual中的example,则输入跟原始一样的结果。

另外,要是碰到栈溢出的情况,修改project->linker->system->stack Reserve size为比较大的数(99999999),之后就不会出现栈溢出了。原因应该是,调用的嵌套太多了,而且参数是很大的。

可能还有其他的错误的地方,希望指正。

他们从1997年发布到2006年的代码,好像还没改正,Manual中也有一些地方是和程序也有出入的地方。让我这个水手体会到了一个道理:其实很难把一个东西做的完美,只要尽自己最大的努力,把东西做好就行了。


https://wap.sciencenet.cn/blog-568124-601867.html


下一篇:ERDAS 2010奇怪问题之一
收藏 IP: 202.114.121.*| 热度|

3 朱琳 admirer shihanyu

该博文允许注册用户评论 请点击登录 评论 (5 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-21 23:04

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部