Dear Madam or Mister,

My name is Manuel Montesino and I am a PhD student at the University of Copenhagen. I am not a programmer myself, but my thesis requires the combined use of R and a model. I would be very grateful if you help me with the following issue;

I am trying to combine a small piece of code written in Fortran 77 with R. The F77 code aims to select data from a library and write it into a new file (1) The F77 code has being compiled using gFortran and the statements declared at (2). Once everything is done, the dynamic library is loaded and run in R using the piece of code showed at (3).Then, a runtime error appears when R is asked to run the subroutine ("weathersel"), R closes down and the selected weather data file is created. Exploring the error a bit further shows that the loop stops at the line 1917. The subroutine works for lower number of lines and the subroutine works if only the last lines of the weather library are explored. This seems to me that there is a limit in the number of iterations that R can handle depending on the memory available at the computer. However, I am not sure. Why appears the runtime error? Is it true that there is a limitation in the loops that R can handle? Is it because a piece of F77 code?

Thank you very much in advance for your help and I hope to hear from you soon.

Best wishes,

Manuel.
________________________________

(1)    F77 code
subroutine weathersel(GRD,YR,SWJD,HRVJD)
C    ==========================================
C ----------------------------------------------------------
C ----------------------------------------------------------
C
      INTEGER :: GRID,YEAR,JDAY,A,B,C,D
      REAL :: LAT,LONG,MINT,MAXT,TEMP
      REAL :: PREC,WIND,RAD,RH,DELTA,ET
C-----------------------------------------------------------
C ** Identifying the variables
C
      A=GRD
      B=YR
      C=SWJD
      D=HRVJD
C
C-------------------------------------------------------------
C  ** Opening the files
C
      open(unit=16,file='Weather library\weather.dat',status='old')                             Open the file with the weather data.
      open(unit=18,file='weathersel.dat')                                                                                  Create a new file.
C
C-------------------------------------------------------------
C  ** Crating the library
C
        DO I=1,12922                                                                                                                             From the first to the last row in the weather data...
          READ(16,*)GRID,LAT,LONG,YEAR,JDAY,MINT,MAXT,                                            ...read the weather variables in the row...
     &             TEMP,PREC,WIND,RAD,RH,DELTA,ET
          IF(GRID.EQ.A)THEN                                                                                                              ...if the read location equals to the solicited location...
            IF(YEAR.EQ.B.AND.JDAY.GT.C.AND.JDAY.LT.D)THEN                                            (and other options)
             WRITE(18,*)JDAY,MAXT,MINT,TEMP,RH,PREC,WIND,RAD                               ...then write the data in the new file in that order...
           END IF
         END IF
        ENDDO
C
       END                                                                                                                                                ...end the program
________________________________

(2)    gFortran compilation:


gfortran -c -fdefault-real-8 -Wall weathrsel.for
gfortran -shared -o WEATHRSEL.DLL weathrsel.o
del *.o
pause

________________________________

(3)    R code calling the dynamic library


#Load the library
dyn.load("WEATHRSEL.DLL")

# Define the parameters
GRD<-23     # Grid
YR<-1992   # Year
SWJD<-210  # Showing julian day
HRVJD<-260 # Harvesting julian day

# Run the code
.Fortran('weathersel',GRD,YR,SWJD,HRVJD)

# Stop using the library
dyn.unload("WEATHRSEL.DLL")


	[[alternative HTML version deleted]]

