Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #59416

Re: writing fortran equivalent binary file using python

From David Froger <david.froger@inria.fr>
References <ac6f6659-0053-482c-b587-454066a4a515@googlegroups.com>
Subject Re: writing fortran equivalent binary file using python
Date 2013-11-14 07:57 +0100
Newsgroups comp.lang.python
Message-ID <mailman.2585.1384415276.18130.python-list@python.org> (permalink)

Show all headers | View raw


Hi Sudheer,

Fortan binary format is not portable, and it's hard to work with it
with different langages, compilers, architectures...

In you're Python code, you also use NetCDF, which solve all these problems.

I would suggest to use only NetCDF files in both Python and Fortran code. (So
never use the buildit open and write of Python and Fortran, but always the
NetCDF library).

Hope it helps,
David

Quoting Sudheer Joseph (2013-11-14 01:53:42)
> 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
> -- 
> https://mail.python.org/mailman/listinfo/python-list

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

writing fortran equivalent binary file using python Sudheer Joseph <sjo.india@gmail.com> - 2013-11-13 16:53 -0800
  Re: writing fortran equivalent binary file using python David Froger <david.froger@inria.fr> - 2013-11-14 07:57 +0100
  Re: writing fortran equivalent binary file using python Oscar Benjamin <oscar.j.benjamin@gmail.com> - 2013-11-14 14:18 +0000
  Re: writing fortran equivalent binary file using python Sudheer Joseph <sjo.india@gmail.com> - 2013-11-14 20:05 +0530
  Re: writing fortran equivalent binary file using python Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2013-11-14 15:46 +0100

csiph-web