- 积分
- 406
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-7-5
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
请教,我用mofangbao写的diamond4tograds程序后,出现如下错误,请帮忙分析一下,非常感谢:
错误如图
[img]file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/281484391/QQ/WinTemp/RichOle/1L~BBI95S340@[K$MNT3NK6.jpg[/img] ,感觉转2进制数据成功了,但是无法用grads打开,总是提示Ydef出错。我将我的转换的文件以附件给出。源程序如下:
!===========
program main
real head(19) !用于存储自描述内容
real,allocatable::gdata(:,:) !存储数据,由头文件中的格点数决定长度
integer x,y,i,j !x,y方向的格点数
character filepath*100,desc(3)*50 !文件路径和文件第一行内容,desc主要在生成ctl时使用
!****输出提示内容,读入文件路径******
print*,"1、请输入文件路径,若为当前路径可直接输入文件名,路径中请不要出现空格"
print*,"2、如果输入的是文件名而非路径,请在运行结束后自行修改生成的CTL文件的路径"
print*,"3、没有对生成的CTL文件的时间进行处理,需要的请自行修改"
print*,""
print*,"输入文件名或路径:"
read(*,'(a)')filepath
!*********打开文件循环读取********
open(1,file=''//trim(filepath)//'',status='old',err=101)
read(1,*)desc
read(1,*)head
x=int(head(13)+0.0001)
y=int(head(14)+0.0001)
allocate(gdata(y,x)) !申请内存
read(1,*)((gdata(j,i),i=1,x),j=1,y)
close(1)
!************根据数据存放格式选择生成的数据存放顺序************
open(1,file=''//trim(filepath)//'.grd',status='replace',form='binary',err=102)
!*********************************************
! head(7)<0 经度(沿x)自东向西;
! head(8)<0 纬度沿y自北向南,反之亦然
!*********************************************
if(head(7)<0)then
if(head(8)<0)then
do j=y,1,-1
do i=x,1,-1
write(1)gdata(j,i)
enddo
enddo
else
do j=1,y
do i=x,1,-1
write(1)gdata(j,i)
enddo
enddo
endif
else
if(head(8)<0)then !比较常用的一种情况(如欧洲500hpa预报)
do j=y,1,-1
do i=1,x
write(1)gdata(j,i)
enddo
enddo
else
do j=1,y
do i=1,x
write(1)gdata(j,i)
enddo
enddo
endif
endif
close(1)
!************生成CTL,时间固定了,需要的自己改******************
open(1,file=''//trim(filepath)//'.ctl',status='replace',err=103)
write(1,*)"dset "//trim(filepath)//".grd"
write(1,*)"undef 9999"
write(1,*)"title "//trim(desc(3))
write(1,'(1x,a,i5,a,f10.4,1x,f8.4)')"xdef ",x," linear ",head(9),head(7)
write(1,'(1x,a,i5,a,f10.4,1x,f8.4)')"ydef ",y," linear ",head(12),head(8)*(-1)
write(1,'(1x,a,i5)')"zdef 1 levels ",int(head(6)+0.0001)
write(1,*)"tdef 1 linear 16jan2013 1dy"
write(1,*)"vars 1"
write(1,*)"m2g 1 99 diamond4tograds"
write(1,*)"endvars"
close(1)
goto 100
!*****************出错处理***********************************
101 print*,"读取源数据文件:",trim(filepath),"出错!"
goto 104
102 print*,"新建GrADS文件:",trim(filepath)//".grd","出错!"
goto 104
103 print*,"新建CTL文件:",trim(filepath)//".ctl","出错!"
104 close(1)
stop
!******************转换完成,给出提示************************
100 continue
print*,"转换完成,生成的新文件为:"
print*,trim(filepath)//".grd"
print*,trim(filepath)//".ctl"
print*,"如果您输入的是纯文件名,请您补全ctl中的dset路径"
pause "按任意键退出" !此处可以改为继续循环,进行批处理,但是上面也要做适当修改
deallocate(gdata)
end
!===================代码结束================
|
|