寫入二進制文件(的GrADS)我運行一個模型,編寫模型輸出到一個二進制文件(的GrADS * GRA文件),這樣,例如:閱讀和FORTRAN
integer,parameter :: nvar =3 ,& !number of variables to be written to file
nx=10,ny=10,& !number of girdboxes in lat & long
nt = 5
integer :: it, & ! loop counter
irec ! Record number
real :: var1(nx,ny), var2(nx,ny),var3(nx,ny)
OPEN(30,file='Outfile.gra',action='write',form='unformatted',access='direct',&
recl=4*nVar*nx*ny,status='replace')
!loop over timesteps
it = 1, nt
irec = irec + 1
WRITE(1,rec=irec) Var1(:,:),Var2(:,:),Var3(:,:)
enddo
該文件可以在的GrADS讀取和* CTL文件看起來像這樣
dset /mypath/Outfile.gra
title MyTitle
options little_endian
xdef 10 linear 1 1
ydef 10 linear 1 1
zdef 1 linear 1.0 1.0
tdef 5 linear 00:00Z01jan2012 1hr
vars 3
var1
var2
var3
endvars
我想這樣做,從一個單獨的程序,是在1時步到一個文本文件中寫入所有的X & Y 1個變量。我嘗試了很多方法,但都沒有成功。我的最新嘗試是這個:
integer,parameter :: &
t = 3, & !Timestep I want to write to file
field = 2, & !Variable I want to write to file
nvar =3 , & !number of variables to be written to file
nx=10,ny=10, & !number of girdboxes in lat & long
nt = 5 !number of timesteps
inteǵer :: it,ix,iy,& ! loop counters
irec ! Record number
real :: val(nx,ny) ! Data to be written to file
open(1,file='NewFile.txt',status='replace')
open(2,file='Outfile.gra',action='read',form='unformatted',access='direct',&
recl=4*nVar*nx*ny,status='old')
irec = 0
do it = 1,nt
irec=irec + nvar*nx*ny
if(it == t) then
irec = irec + (field-1)*nx*ny
do ix = 1,nx
do iy = 1,ny
irec=irec+1
read(2,rec=irec) val(ix,iy)
enddo
enddo
write(1,*) val(:,:)
這個特殊的例子給了我下面的錯誤
Fortran runtime error: Non-existing record number
,但我想,沒有給我任何錯誤,其他的變化,但根本沒寫我是什麼試圖寫入文件。有人能告訴我我做錯了什麼,以及如何解決這個問題?謝謝。
你指定的記錄長度爲'4 * NVAR * NX * ny'在'OPEN'語句中,然後您將以'nvar * nx * ny'步長遞增記錄編號。你只需要用'1'步增加它。 – 2012-08-08 11:02:25