writing fortran equivalent binary file using python

Sudheer Joseph sjo.india at gmail.com
Wed Nov 13 19:53:42 EST 2013


Hi,
         I need to write a binary file exactly as written by fortran code below to be read by another code which is part of a model which is not advisable to edit.I would like to use python for this purpose as python has mode flexibility and easy coding methods.
  
  character(40) :: TITLE="122322242"
  integer :: IWI,JWI
  real :: XFIN,YFIN,DXIN=0.5,DYIN=0.5,WDAY(6000)
  XFIN=0.0,YFIN=-90.0,NREC=1461,DXIN=0.5;DYIN=0.5;IWI=720;JWI=361 
  real,allocatable,dimension(:,:,:) :: VAR1_VAL
  real,allocatable,dimension(:,:,:) :: VAR2_VAL

  open(11,file=outf,form='UNFORMATTED')
  WRITE(11) TITLE
  WRITE(11) NX,NY,XFIN,YFIN,DXIN,DYIN,NREC,WDAY
  write(*,'(A10,2f10.3)') "START=",VAR1_VAL(1,1,1),VAR2_VAL(1,1,1)
  write(*,'(A10,2f10.3)') "END=",VAR1_VAL(nx,ny,nrec),VAR2_VAL(nx,ny,nrec)
  do i=1,NREC
  WRITE(11) VAR1_VAL(:,:,i),VAR2_VAL(:,:,i)
  WRITE(*,'(2I10,f10.3)') NX,NY,WDAY(i)
  enddo

My trial code with Python (data is read from file here)

from netCDF4 import Dataset as nc
import numpy as np
XFIN=0.0,YFIN=-90.0,NREC=1461,DXIN=0.5;DYIN=0.5
TITLE="NCMRWF 6HOURLY FORCING MKS"
nf=nc('ncmrwf_uv.nc')
ncv=nf.variables.keys()
IWI=len(nf.variables[ncv[0]])
JWI=len(nf.variables[ncv[1]])
WDAY=nf.varlables[ncv[2]][0:NREC]
U=nf.variables[ncv[3]][0:NREC,:,:]
V=nf.variables[ncv[4]][0:NREC,:,:]
bf=open('ncmrwf_uv.bin',"wb")
f.write(TITLE)
f.write(IWI,JWI,XFIN,YFIN,DXIN,DYIN,NREC,WDAY)
for i in np.arange(0,NREC):
    f.write(U[i,:,:],V[i,:,:])
f.close()

But the issue is that f.write do not allow multiple values( it allows one by one so throws an error with above code ) on same write statement like in the fortran code. experts may please advice if there a solution for this?

with best regards,
Sudheer



More information about the Python-list mailing list