- 积分
- 622
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-11-12
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
|
|