fortranについての質問です。
fortranについての質問です。
このFortranは、頭にそれぞれ14161~14163とつく33個のファイル(1/1~12/31,欠損地あり1年分)を読んでいき、例えば1/1、1/2…と365日分の33年の平均値を導くはずなのですが、下のようなエラーがでます。おそらく、14161が2008までないからではないかと思うのですが、現在勉強中なので、なにかアドバイス、おかしいところ修正できるところがありましたらお願いします。
program sapporo_kikouchi
INTEGER :: sum, no, point
INTEGER :: year, mon, day, data
INTEGER :: doy
REAL,dimension(365) :: temp, ndata
REAL :: lon, lat
CHARACTER*4 yyyy
CHARACTER*5 sssss
ndata(:)=0.0
temp(:)=0.0
do ispot=14161,14163
write(sssss,"(i5)") ispot
do iwork=1976, 2008
write(yyyy,"(i4.4)") iwork
open(50, file=''//sssss//'_temp'//yyyy//'.csv', status='old')
! write(6,*) ispot iwork
do i = 1,366
read(50,*,iostat=io) id,year,mon,day,lon,lat,data
if(io < 0) exit
if(mon==2 .AND. day==29) then
cycle
endif
call date2doy(year,mon,day,doy)
temp(doy) = temp(doy) + data/10.0
ndata(doy) = ndata(doy) + 1
end do
close(50)
enddo !!! end of year loop
enddo
do i=1,365
if( ndata(i) == 0 ) then
temp(i) = -99999.9
else
temp(i)=temp(i)/ndata(i)
endif
write(6,*) i, temp(i), ndata(i)
enddo
stop
end program
subroutine date2doy(iy,im,id,idoy)
INTEGER,dimension(12) :: nday
INTEGER :: uruu !!uruu=1: うるう年、uruu=0: 通常の年
uruu=0
DATA nday /31,28,31,30,31,30,31,31,30,31,30,31/
if(mod(iy,4)==0 .AND. mod(iy,100)/=0) then
uruu=1
endif
if(mod(iy,1000)==0) then
uruu=1
endif
!! うるう年も無視する
itotal = 0
if( im /= 1 )then
do m=1, im-1
itotal = itotal + nday(m)
enddo
endif
idoy = id + itotal
! write(6,*) iy,im,id, idoy
return
end
------------------------------------------------------------------------------
At line 18 of file kikouchi.f90 file: "14161_temp1993.csv"
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: 指定されたファイルが見つかりません。
-------------------------------------------------------------------------------
お礼
なるほど。ありがとうございました。