爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4371|回复: 6

[求助] fnl资料提取,fortran读写资料错误

[复制链接]

新浪微博达人勋

发表于 2013-5-30 19:25:31 | 显示全部楼层 |阅读模式

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

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

x
我从fnl中提取u,v风的数据,计算散度,涡度:提取u场的gs

'reinit'
'open d:\zssdata\1100.ctl'
'open d:\zssdata\1106.ctl'
'open d:\zssdata\1112.ctl'
'open d:\zssdata\1118.ctl'
'open d:\zssdata\1200.ctl'
'open d:\zssdata\1206.ctl'
'open d:\zssdata\1212.ctl'
'open d:\zssdata\1218.ctl'
'open d:\zssdata\1300.ctl'
'open d:\zssdata\1306.ctl'
'open d:\zssdata\1312.ctl'
'open d:\zssdata\1318.ctl'
'open d:\zssdata\1400.ctl'
'set fwrite d:\u.grd'
'set gxout fwrite'
i=1
while(i<=13)
'set dfile 'i''
z1=1
  while(z1<=26)
'set z 'z1''
'set lon 110 130'
'set lat 40 50'
'd UGRDprs'
z1=z1+1
endwhile
i=i+1
endwhile
'disable fwrite'

fortran
program main
parameter(nx=21,ny=11,nz=26,nt=13,delta_lamda=3.14/180,delta_phi=3.14/180)
real u(nx,ny,nz,nt),v(nx,ny,nz,nt),vor2(nx,ny,nz,nt),div(nx,ny,nz,nt)
real f(ny)        
a=6371000.0       !radiu of earth  
open(21,file='d:\zssdata\u.dat',form='binary')  
do k=1,nt
do s=1,nz   
do j=1,ny
read(21,rec=21)(u(i,j,s,k),i=1,nx)   
enddo
end do
end do
close(21)
open(22,file='d:\zssdata\v.dat',form='binary')  
do k=1,nt
do s=1,nz   
do j=1,ny
read(22,rec=22)(v(i,j,s,k),i=1,nx)   
enddo
end do
end do
close(22)
write(*,*) 'ok input'

do k=1,nt
do s=1,nz
  do j=2,ny-1
    do i=2,nx-1     
    vor2(i,j,s,k)=(((v(i+1,j,s,k)-v(i-1,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,j+1,s,k)-u(i,j-1,s,k)))/(delta_phi)+(2*u(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
    div(i,j,s,k)=(((u(i+1,j,s,k)-u(i-1,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,j+1,s,k)-v(i,j-1,s,k)))/(delta_phi)-(2*v(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
    enddo
   enddo
enddo
!边界
do s=1,nz
do j=2,ny-1
    i=1
    vor2(i,j,s,k)=(((v(i+1,j,s,k)-v(i,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,j+1,s,k)-u(i,j-1,s,k))/2)/(delta_phi)+(u(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    div(i,j,s,k)=(((u(i+1,j,s,k)-u(i,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,j+1,s,k)-v(i,j-1,s,k))/2)/(delta_phi)-(v(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    i=nx
    vor2(i,j,s,k)=(((v(i,j,s,k)-v(i-1,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,j+1,s,k)-u(i,j-1,s,k))/2)/(delta_phi)+(u(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    div(i,j,s,k)=(((u(i,j,s,k)-u(i-1,j,s,k))/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,j+1,s,k)-v(i,j-1,s,k))/2)/(delta_phi)-(v(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
  enddo
  enddo
do s=1,nz
do i=2,nx-1
    j=1
    vor2(i,j,s,k)=(((v(i+1,j,s,k)-v(i-1,j,s,k))/2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,j+1,s,k)-u(i,j,s,k)))/(delta_phi)+(u(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    div(i,j,s,k)=(((u(i+1,j,s,k)-u(i-1,j,s,k))/2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,j+1,s,k)-v(i,j,s,k)))/(delta_phi)-(v(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    j=ny
    vor2(i,j,s,k)=(((v(i+1,j,s,k)-v(i-1,j,s,k))/2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,j,s,k)-u(i,j-1,s,k)))/(delta_phi)+(u(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
    div(i,j,s,k)=(((u(i+1,j,s,k)-u(i-1,j,s,k))/2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,j,s,k)-v(i,j-1,s,k)))/(delta_phi)-(v(i,j,s,k)*tan((j+14)*3.14/180)))/(a)
enddo
enddo
! 边界四点
i=1
j=1
do s=1,nz
vor2(1,1,s,k)=(((v(2,j,s,k)-v(1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,2,s,k)-u(i,1,s,k))*2)/(delta_phi)+(2*u(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
div(1,1,s,k)=(((u(2,j,s,k)-u(1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,2,s,k)-v(i,1,s,k))*2)/(delta_phi)-(2*v(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
enddo
i=1
j=ny
do s=1,nz
vor2(1,ny,s,k)=(((v(2,j,s,k)-v(1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,ny,s,k)-u(i,ny-1,s,k))*2)/(delta_phi)+(2*u(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
div(1,ny,s,k)=(((u(2,j,s,k)-u(1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,ny,s,k)-v(i,ny-1,s,k))*2)/(delta_phi)-(2*v(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
enddo
i=nx
j=1
do s=1,nz
vor2(nx,1,s,k)=(((v(nx,j,s,k)-v(nx-1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,2,s,k)-u(i,1,s,k))*2)/(delta_phi)+(2*u(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
div(nx,1,s,k)=(((u(nx,j,s,k)-u(nx-1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,2,s,k)-v(i,1,s,k))*2)/(delta_phi)-(2*v(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
enddo
i=nx
j=ny
do s=1,nz
vor2(nx,ny,s,k)=(((v(nx,j,s,k)-v(nx-1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))-((u(i,ny,s,k)-u(i,ny-1,s,k))*2)/(delta_phi)+(2*u(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
div(nx,ny,s,k)=(((u(nx,j,s,k)-u(nx-1,j,s,k))*2/(delta_lamda)/(cos((j+14)*3.14/180)))+((v(i,ny,s,k)-v(i,ny-1,s,k))*2)/(delta_phi)-(2*v(i,j,s,k)*tan((j+14)*3.14/180)))/(2*a)
enddo
enddo

open(6,file='d:\zssdata\vor.grd',form='binary')
do k=1,nt  
do s=1,nz
write(6,rec=6)((vor2(i,j,s,k),i=1,nx),j=1,ny)
enddo
enddo
close(6)
end

u,v风数据为300多k,但得出的vor.grd只有6kb,并且出图不显示图像。
这会是什么原因?


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

新浪微博达人勋

发表于 2013-5-30 20:28:22 | 显示全部楼层
不能光只看文件大小,要一步一步的查错误,首先检查fwrite写出的数据对不对,然后读你写出的数据,写成txt看数据大小对不对,然后再检查程序的是否有误,你这样一连串的,感觉像个黑匣子,不知道哪里出问题了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-30 22:32:45 | 显示全部楼层
open 这么多ctl ,也有问题吧~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-5-30 22:46:00 | 显示全部楼层
先看看你提取出来的资料是不是对的吧,看看出的图对的上不?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-11 19:37:28 | 显示全部楼层
顶一个哈哦
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-1-21 15:05:15 | 显示全部楼层
楼主这程序读取二进制文件应该有问题吧?你的程序没有报错吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2023-3-20 13:20:25 | 显示全部楼层
nunu18 发表于 2016-1-21 15:05
楼主这程序读取二进制文件应该有问题吧?你的程序没有报错吗?

我也遇到类似问题了,为什么会出现读取二进制文件有问题的情况呢,请教老师,该怎样解决啊,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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