爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4356|回复: 1

[求助] 【已解决】Fortran输出dat文件

[复制链接]

新浪微博达人勋

发表于 2018-5-5 12:57:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 BKLAU 于 2019-7-10 09:12 编辑

问题描述:用11、12文件运算之后输出13的dat文件和14的txt文件,Fortran运行过程没有报错,但是输出的dat文件数据用grads画出的图是一片空白(Constant field.  Value = 0),与此同时输出的txt文件却没有任何问题,求前辈们指教!

注:输出的num数组是计数每个格点每4个时间间隔符合条件的次数,所以只有一层

Fortran程序:
program num

parameter(nx=31,ny=11,nz=3,nt=2976)
real u(nt,nz,ny,nx),v(nt,nz,ny,nx)
integer num(4,ny,nx)

open(unit=11,file='F:\uv\udata.dat',form='binary',access='direct',recl=4*nx*ny)
irec=1
do it=1,nt
    do iz=1,nz
        read(11,rec=irec) ((u(it,iz,iy,ix),ix=1,nx),iy=1,ny)
        irec=irec+1
    enddo
enddo
close(11)

open(unit=12,file='F:\uv\vdata.dat',form='binary',access='direct',recl=4*nx*ny)
irec=1
do it=1,nt
    do iz=1,nz
        read(12,rec=irec) ((v(it,iz,iy,ix),ix=1,nx),iy=1,ny)
        irec=irec+1
    enddo
enddo
close(12)

do id=1,4
do iy=1,ny
    do ix=1,nx
        num(id,iy,ix)=0
    enddo
enddo
enddo

do id=1,4
do it=id,nt,4
    do iy=1,ny
        do ix=1,nx
            uv1=u(it,1,iy,ix)**2+v(it,1,iy,ix)**2
            uv2=u(it,2,iy,ix)**2+v(it,2,iy,ix)**2
            uv3=u(it,3,iy,ix)**2+v(it,3,iy,ix)**2
            if ( uv2 >= uv1 .and. uv2 >= uv3 .and. uv2 >= 12) then
                num(id,iy,ix)=num(id,iy,ix)+1
            endif
        enddo
    enddo
enddo
enddo

open(unit=13,file='F:\uv\num.dat',form='binary')
irec=1
do id=1,4
write(13) ((num(id,iy,ix),ix=1,nx),iy=1,ny)
irec=irec+1
enddo

close(13)

open(unit=14,file='F:\uv\num.txt',form='formatted')
do id=1,4
write(14,*) ((num(id,iy,ix),ix=1,nx),iy=1,ny)
enddo

close(14)

end


输出的txt结果(太长了截取开头的部分):
          55          49          54          73          28         157
         260         146          58          40          56         156
         205          81          34          63          87         123
         119          97         116         149          54          47
          90          90          95         124         102         104
          99          47          51          50          66          36
         166         229         162         136          62         156
         268         146          73          34          66          88
          99         105          62          76          95          77
          38          66          86          86         112         104
          90          88          54          41          80         175
         126          71         159         297         307         113
         333         158          76         150          90          61
          83          70          75          53          51          67


输出的dat对应的ctl
dset F:\uv\num.dat
undef 9.999E+20
title v
xdef 31 linear 90.000000 1.500000
ydef 11 linear 15.000000 1.5
tdef 4 linear 00Z01may2012 6hr
zdef 1 levels 850
vars 1
num 1 99 ** V-velocity m s**-1
ENDVARS

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

新浪微博达人勋

发表于 2018-12-1 21:13:52 | 显示全部楼层
我也遇到了一样的问题:
open(unit=13,file='F:\uv\num.dat',form='binary')
irec=1
do id=1,4
write(13) ((num(id,iy,ix),ix=1,nx),iy=1,ny)
irec=irec+1
enddo
我觉得你可以将write(13)改成write(13,rec=irec)试试看,但是这个不适用于我的情况;我自己是直接把irec的部分去掉了,后面就能运行出来了,我的数据是二维的
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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