爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12561|回复: 11

[分享资料] 求助关于FORTRAN生成的二进制文件显示报错,Contouring: nan to nan interval inf

[复制链接]

新浪微博达人勋

发表于 2012-4-25 11:49:07 | 显示全部楼层 |阅读模式

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

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

x
利用FRTRAN编程,读取二进制文件中每日00时刻温度数据,再进行日平均运算,运算结果保存为二进制文件。程序运行正常,读取的日数据也没为题,日平均运算后生成的二进制文件在grads中能打开,但无法显示,出现 Contouring: nan to nan interval inf

不知道出了什么问题,是ctl文件缺省值设置问题吗?缺省值现在是 undef 1.e30

求助各位高手,急!!谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-4-25 11:54:37 | 显示全部楼层
只有说仔细检查了,ctl的缺省值需要和你运算完之后的缺省值一致,既然你描述的过程认为都是正确的,那看不出来有什么问题,把你认为正确的再仔细检查
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-4-25 12:04:57 | 显示全部楼层

谢谢清风。程序只是对二进制数据中每天00时刻的温度进行了日平均计算,将计算结果保存为一个新的二进制文件。Contouring: nan to nan interval inf 网上搜了一下说可能是缺省值有问题。结果的ctl文件是将日平均运算处理前的dat文件的ctl改成的,没改缺省值啊~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2012-4-25 12:15:42 | 显示全部楼层
检查一下你的二进制文件是否输出的是实型数据
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-25 13:26:16 | 显示全部楼层
你的计算代码中,是不是有变量或数组没有赋初值,(如果没有,fortran默认赋值为0),于是被当做分母,就会出现nan。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-25 13:26:22 | 显示全部楼层
你的计算代码中,是不是有变量或数组没有赋初值,(如果没有,fortran默认赋值为0),于是被当做分母,就会出现nan。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-25 14:50:32 | 显示全部楼层
错误应该是楼上所讲,完全同意
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-4-25 17:35:44 | 显示全部楼层
godenflame135 发表于 2012-4-25 13:26
你的计算代码中,是不是有变量或数组没有赋初值,(如果没有,fortran默认赋值为0),于是被当做分母,就会 ...

谢谢斑竹。。。代码中的确定义了个浮点型数组real,allocatable:: T2_ave(:,:)用来存放平均值计算结果,没赋初值。allocate(T2_ave(93,84))。
代码中涉及结果文件值计算的只有下面几行。计算时没涉及数组元素做分母的情况呀。
open(200,file="E:\WRF_study\data_test\T2_beijing_d03_2010-10-01-05_ave00.dat",status='REPLACE',form='unformatted',access='direct',recl=93*84)
do j=1,84
    do i=1,93
     T2_ave(i,j)=(T2temp1(i,j)+T2temp2(i,j)+T2temp3(i,j)+T2temp4(i,j)+T2temp5(i,j))/5.0
   end do
  end do
write(200,rec=1) T2_ave(:,:)
close(200)

而且我将T2temp1(i,j)、T2temp2(i,j)、T2temp3(i,j)、T2temp4(i,j)、T2temp5(i,j)这几个从原始文件中读取的数组分别写成二进制文件,用grads画图都没问题,就只有计算结果T2_ave(i,j)写成的二进制出现了以上问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-26 08:24:04 | 显示全部楼层
你算平均的时候应该考虑缺测点的情况吧,不然T2_ave(i,j)=(T2temp1(i,j)+T2temp2(i,j)+T2temp3(i,j)+T2temp4(i,j)+T2temp5(i,j))/5.0
若有个点为缺测的,你算出来的值就不对了呀!即不是缺测也不是正确的值。个人觉得这段应该加if语句,考虑某点缺测时的情况
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-26 19:07:01 | 显示全部楼层
冰枫 发表于 2012-4-26 08:24
你算平均的时候应该考虑缺测点的情况吧,不然T2_ave(i,j)=(T2temp1(i,j)+T2temp2(i,j)+T2temp3(i,j)+T2temp ...

确实应该考虑,一般缺测值会是个很大的值,5个缺测值除以5.0,还是很大的。你的那5个T*temp的缺测值从二进制文件中读取出来的缺测值是多大啊?编译时要不要考虑高低字节互换问题?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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