爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3446|回复: 7

[源代码] 24个时次站点平均的fortran程序,又哪里出问题了,还请大家指点

[复制链接]

新浪微博达人勋

发表于 2015-12-11 17:43:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 311wen 于 2015-12-12 02:08 编辑

数据是 117个站点

站点  经度  纬度 高度  时间1的K指数 时间2的K指数  时次3的K指数。。。。。。时间24的k指数
现已成功的读入。

现想算平均K指数
站点  经度  纬度   高度   平均K

....前面省略
ksum=0.0
num=0                            !用来放缺省值的个数
do i=1,117
    do j=1,24
      if(ABS(k(i,j)-9999).LT.1D-2) then                 !是否是缺省值,缺省就将个数存入num,继续累加后面时次
      num(i)=num(i)+1
   continue
   else
      ksum(i)=ksum(i)+k(i,j)
   endif
   !print *,ksum(i);pause               
从我运行到第10行,也就是第一个缺省值9999的时候,就处错误了,显示0.000000E+00
enddo
   kave(i)=ksum(i)/(24-num(i))
   
  tim=0.0;nlev=1;nflag=1
  write(2) sta(i),lat(i),lon(i),tim,nlev,nflag,kave(i)           !后面就是把算出的平均值写成站点文件了

enddo
    nlev=0
    write(2) sta(118),lat(118),lon(118),tim,nlev,nflag
        !一个时次的k场输入完毕
    close(3)

close(2)
end
===========================================

每行都pause了一下
发现是当遇到第一个缺省值为9999的站点时,这个站点不幸全都缺测。算了它的sum程序显示0 000000e+02程序就跳出来了。至今还不知道为什么不继续算了也许是算平均就不支持了??

后头就把改为,只算有数据的平均,并读取。就好了
但为什么会跳出来,还请大神指导一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-11 18:43:58 | 显示全部楼层
本帖最后由 四叶草 于 2015-12-11 18:45 编辑

建议楼主还是把代码全部贴出来!另外,请教下楼主ABS(k(i,j)-9999).LT.1D-2判断条件怎么理解?本人都是第一次见,谢谢。还有,write(2) sta(118),lat(118),lon(118),tim,nlev,nflag,楼主这个语句有问题,会提示数组溢出。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-12-11 19:39:12 | 显示全部楼层
四叶草 发表于 2015-12-11 18:43
建议楼主还是把代码全部贴出来!另外,请教下楼主ABS(k(i,j)-9999).LT.1D-2判断条件怎么理解?本人都是第一 ...

parameter(nt=24)
integer::nlev,nflag      !!nt为24个时次,全国117个固定测站
real::lon(117),lat(117),k(117,24),var(117)
character*8 sta(117)   
character*14 filename(nt)
real ksum(117),kave(117)         
integer num(117)
     
open(1,file='filename.txt')
do i=1,nt
   read(1,*) filename(i)
   !print*,'Filename:',filename(i);pause
enddo
close(1)               

open(2,file='k2010.grd',form='binary')
do j=1,nt
     open(3,file=filename(j))
     do i=1,3
     read(3,*)
     end do  
     do i=1,117
        read(3,*) sta(i),lon(i),lat(i),var(i),k(i,j)
       ! print *,k(i,j);pause
     enddo
enddo
ksum=0.0
num=0

do i=1,117
   do j=1,24
      if (ABS(k(i,j)-9999).LT.1D-2) then
      num(i)=num(i)+1
      continue
      else
      ksum(i)=ksum(i)+k(i,j)
      endif
   enddo
   kave(i)=ksum(i)/real(24-num(i))

    tim=0.0;nlev=1;nflag=1
    write(2) sta(i),lat(i),lon(i),tim,nlev,nflag,kave(i)
enddo
    nlev=0
    write(2) sta(118),lat(118),lon(118),tim,nlev,nflag
        !一个时次的k场输入完毕
    close(3)

close(2)
end


好的,不过贴太长怕没人看啊。
if (ABS(k(i,j)-9999).LT.1D-2) then 这个本来写的
if(k(i,j)==9999.)又怕浮点类型不能这样比值,就改成绝对值<1e-2了
那个write(2) sta(118),lat(118),lon(118),tim,nlev,nflag,想表示读取站点文件结束。还没试到那里,后面调试再继续改




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

新浪微博达人勋

发表于 2015-12-11 20:26:18 | 显示全部楼层
311wen 发表于 2015-12-11 19:39
parameter(nt=24)
integer::nlev,nflag      !!nt为24个时次,全国117个固定测站
real::lon(117),lat( ...

根据你的贴子信息,你的数据排列是std lon  lat  height  var1 var2......var24,所以,建议这样读取数据:
do i=1,117
read(3,*)sta(i),lon(i),lat(i),var(i),(k(i,j),j=1,24)
enddo
另外,你判断是否缺测的条件是不是写错哟?if (ABS(k(i,j)-9999).LT.1D-2) then 还是if (ABS(k(i,j)-9999).LT.1e-2) then
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-12-11 22:22:10 | 显示全部楼层
四叶草 发表于 2015-12-11 20:26
根据你的贴子信息,你的数据排列是std lon  lat  height  var1 var2......var24,所以,建议这样读取数据 ...

哦,我可能没说清楚哈,我是读成这种形式,不是源数据是这样
就是不知道从有缺测值开始就错误所以,怀疑是缺测那读的有问题

关于后面那个试了E也是一样不行
还是谢谢啦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-12-12 01:37:33 | 显示全部楼层
每行都pause了一下
发现是当遇到第一个缺省值为9999的站点时,这个站点不幸全都缺测。算了它的sum程序显示0 000000e+02程序就跳出来了。至今还不知道为什么不继续算了也许是算平均就不支持了??

后头就把改为,只算有数据的平均,并读取。就好了
但为什么会跳出来,还请大神指导一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-12 09:15:09 | 显示全部楼层
311wen 发表于 2015-12-12 01:37
每行都pause了一下
发现是当遇到第一个缺省值为9999的站点时,这个站点不幸全都缺测。算了它的sum程序显示 ...

问题会不会就出在全部缺测的站点?全部缺测,ksum=0.0是对的,但后面的kave=ksum/real((24-num))表达式就不对了。至于为何不继续计算?本人是没遇到过。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-12-12 20:04:50 来自手机 | 显示全部楼层
嗯,我也这么觉得但还不是不太知所以然
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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