爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2712|回复: 8

[求助] 求解:程序出错

[复制链接]

新浪微博达人勋

发表于 2014-4-5 16:25:20 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 言深深 于 2014-4-5 17:42 编辑

我先把我的想法说下,txt文件里有一个时间序列的值,因为每年只有一个值,想把这个值铺满区域的每个格点中,得出一时间序列的区域文件,所以想把这个文件转成铺满整个区域格点的二进制文件,然后给其配ctl文件,然后用grads与其他资料作图。
用下面的Fortran程序把一txt文件转成我想要的二进制grd格式文件,但是给grd文件配上ctl后,在grads里输出只有第一年有数据,其余年份全是0,不知道为什么,求解!谢谢

program main
integer,parameter::nx=72, ny=36, na=40
real:: xinjifeng(na,ny,nx)
integer ::year
open(10,file='c:\grads19\data\xinjifeng.txt',form='formatted')
open(20,file='c:\grads19\data\xinjifeng.grd',form='unformatted',status='replace',access='direct',recl=72*36*4)
do i=1,na
read(10,*)year,xinjifeng(i,1,1)
do j=1,ny
   do k=1,nx
     xinjifeng(i,j,k)=xinjifeng(i,1,1)
   end do
  end do
print*,xinjifeng(i,1,1)
write(20,rec=i)((xinjifeng(i,j,k),k=1,nx),j=1,ny)
end do
1000 format('F')
end

txt文件是这样的

QQ截图20140405162258.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-5 16:38:53 | 显示全部楼层

回帖奖励 +5 金钱

”每年只有一个值,想把这个值铺满区域的每个格点中,得出一时间序列的区域文件“ 求解释
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-4-5 17:46:03 | 显示全部楼层
你的read语句,为何要设置三维数组,每个都read到xinjifeng(i,1,1)
并且在jk循环的时候,只赋值了一个值,这是何解?还有你配套的ctl文件在哪里?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-5 18:34:59 | 显示全部楼层
言深深 发表于 2014-4-5 17:46
你的read语句,为何要设置三维数组,每个都read到xinjifeng(i,1,1)
并且在jk循环的时候,只赋值了一个值 ...

他是想让空间里每一个点都是i,1,1的值,得到一个常值空间,我感觉这段程序没啥错。应该自己print一下每一步输出的东西,而且把ctl,gs什么都贴上来。
话说做的什么饭啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-4-5 20:34:44 | 显示全部楼层
lqouc 发表于 2014-4-5 18:34
他是想让空间里每一个点都是i,1,1的值,得到一个常值空间,我感觉这段程序没啥错。应该自己print一下每一 ...

逐步print出来也是一个不错的办法,不过整个程序看下来貌似问题不大···就不知道read的原文件已经描述的ctl文件有没有问题了···
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-5 21:50:33 | 显示全部楼层
言深深 发表于 2014-4-5 20:34
逐步print出来也是一个不错的办法,不过整个程序看下来貌似问题不大···就不知道read的原文件已经描述 ...

dset c:\GrADS19\data\xinjifeng.grd
undef  -99.99
title sample grid data
xdef 72 linear -177.5 5.0
ydef 36 linear -87.5 5.0
zdef 1 linear 500 1
tdef 40 linear jan1971 1yr
vars 1
a1 0 99 grid data
endvars
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-5 21:50:48 | 显示全部楼层
lqouc 发表于 2014-4-5 18:34
他是想让空间里每一个点都是i,1,1的值,得到一个常值空间,我感觉这段程序没啥错。应该自己print一下每一 ...

dset c:\GrADS19\data\xinjifeng.grd
undef  -99.99
title sample grid data
xdef 72 linear -177.5 5.0
ydef 36 linear -87.5 5.0
zdef 1 linear 500 1
tdef 40 linear jan1971 1yr
vars 1
a1 0 99 grid data
endvars
这是ctl文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-5 21:51:36 | 显示全部楼层
言深深 发表于 2014-4-5 17:46
你的read语句,为何要设置三维数组,每个都read到xinjifeng(i,1,1)
并且在jk循环的时候,只赋值了一个值 ...

dset c:\GrADS19\data\xinjifeng.grd
undef  -99.99
title sample grid data
xdef 72 linear -177.5 5.0
ydef 36 linear -87.5 5.0
zdef 1 linear 500 1
tdef 40 linear jan1971 1yr
vars 1
a1 0 99 grid data
endvars
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-4-6 09:37:49 | 显示全部楼层
开始起飞1 发表于 2014-4-5 21:50
dset c:\GrADS19\data\xinjifeng.grd
undef  -99.99
title sample grid data

用下面这个程序看看,给你改了一下···
program main
integer,parameter::nx=72, ny=36, na=40
real:: xinjifeng(na,ny,nx)
integer ::year
open(10,file='c:\grads19\data\xinjifeng.txt')
do i=1,na
read(10,*)year,xin
do j=1,ny
   do k=1,nx
     xinjifeng(i,j,k)=xin
   end do
  end do
enddo
close(10)
open(20,file='c:\grads19\data\xinjifeng.grd',form='binary')
write(20)(((xinjifeng(i,j,k),k=1,nx),j=1,ny),i=1,na)
close(20)
end

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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