[R] reading fortran binary file

simon chou sentientc at gmail.com
Sat Apr 23 22:04:15 CEST 2005


Hi r-help,
I have some troubles reading fortran binary file(from mm5) in R. Here
is what I have done.
1. Use a fortran subroutine to read this file in R. The subroutine is
as the following.
      subroutine freadmm5(filenamet,out2d)
      integer iflag,var1,miy,mjx,mkz,mt,z,t
      character*4 crdt,corder
      character*24 chrdate
      character*9 cname,var
      character*25 cunit,uunit,vunit,wunit
      character*80 filename
      real out2d(157,109),out3d(157,109,24)
      OPEN (11,FILE=filename,FORM='UNFORMATTED')
10    READ(11) IFLAG
      IF ( IFLAG .EQ. 0 ) THEN
          READ(11)
      goto 10
      elseif (iflag.eq.1) then
          read(11)
     &      IDIM           ! dimension of the field
     &     ,IB,JB,KB,LB    ! starting indices
     &     ,IE,JE,KE,LE    ! ending indices
     &     ,XTIME          ! the ingegration or forcast time
     &     ,CRDT,CORDER,CHRDATE
     &     ,CNAME,CUNIT    ! field name and unit description
           if(cname.eq.'LATITCRS ')then
            read(11)out2d
           else
           read(11)
           endif
      goto 10
      elseif(iflag.eq.2)then
      goto 20
      endif
20    close(11)
      end
2.compile the subroutine as share object file with -byteswapio optin
3."dyn.load" the subroutine in R
4.call the subroutine.
.Fortran("freadmm5", filename = as.character("mmout"), 
array(as.single(0), c(157,109))
This gives a array which is nearly half empty when the subroutine can
read the full array. I though it is because of R use double precision
to read single precision data at first. When I passed "as.single" to
it, it still came out the same result.
Also, I do not understand what is "DUP" in ".Fortran" function for and
how it works. Can "DUP" solve my problem?
Thanks in Advance,
simon




More information about the R-help mailing list