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]]