나는 그것을 잘 컴파일, 다른 코드를 테스트하려면이 프로그램을 작성하지만, 런타임에 나는 오류 이런 종류의가 나타납니다포트란 런타임 오류 : 인덱스 '645778864'상한 위의 배열 'tstar'의 차원 1의 24
Fortran runtime error: Index '645778864' of dimension 1 of array 'tstar' above upper bound of 24
을
내 코드는 데이터 파일 (하루 중 다른 시간대에 해당하는 6 개의 열과 24 개의 행)을 입력으로 받아이를 서브 루틴 "프로필"에서 사용하여 새로운 매개 변수 (u 및 tp)를 추출합니다. 필자는 입력으로 취한 6 개의 열에 해당하는 벡터의 요소 수 (24)를 호출했으며 이러한 오류가있는 이유를 이해하지 못합니다.
가read(60,*) ih,ustar,tk,(dt(i),i=1,2),Ho
코드는 :
program test
implicit none
character(len=12) filein,fileout
integer :: row,ih,i
real :: k = 0.4
real :: z0 = 0.0012
real, dimension(6) :: z=(/0.5,1.,2.,4.,8.,16./)
real, dimension(6) :: u
real, dimension(2) :: teta,tp
real, dimension(2) :: dt
real, dimension(24) :: L,tstar,Ho,ustar,tk
real :: g = 9.81
write(*,'(2x,''File di input .......''/)')
read(*,'(a12)') filein
write(*,'(2x,''File di output........''/)')
read(*,'(a12)') fileout
open(unit=60,File=filein)
open(unit=80,File=fileout)
write(80,*)
do row = 1,24
read(60,*) ih,ustar,tk,(dt(i),i=1,2),Ho
teta(1) = dt(1) + tk(row)
teta(2) = (dt(2)-dt(1)) + teta(1)
call profile(ustar,Ho,u,teta,tp)
write(80,*) u,tp
enddo
close(60)
close(80)
end program test
subroutine profile(ustar,Ho,u,teta,tp)
implicit none
integer :: i,j,row
integer :: N = 6
real, dimension(24), intent(in) :: ustar,Ho
real, dimension(24) :: tstar,L,tk
real, dimension(6),intent(out) :: u
real, dimension(6) :: z=(/0.5,1.,2.,4.,8.,16./)
real, dimension(2),intent(out) :: tp
real, dimension(2) :: teta
real :: k = 0.4
real :: z0 = 0.0012
real :: g = 9.81
tstar = 0.
L = 0.
tstar(row) = -(Ho(row)/(1200.*ustar(row)))
L(row) = (tk(row)*ustar(row))/(k*g*tstar(row))
! convective situation
do i=1,6
u(i) = (ustar(row)/k)*(alog(z(i)/z0) +1. - (1. - (16.*(z(i)/L(row))))**0.25)
if(i.le.2) then
tp(i) = teta(i) + (tstar(row)/k)*(alog(z(i+2)) - (2.*(alog(0.5 + (0.5*(sqrt(abs(1.-(16.*(z(i+2)/L(row)))))))))))
endif
enddo
end
입력 파일은 6 개 컬럼, 정수 (하루의 시간) 제, 다른 로우로부터 판독 된 실제 양에 대응 이루어져 Fortran90으로 작성되었으며 gfortran을 사용하여 컴파일합니다. 나는 Fortran 전문가가 아니므로 너무 구체적 인 용어를 사용하지 말 것을 요청합니다.
At line 29 of file test.f90 (unit = 60, file = 'inputver.dat')
Fortran runtime error: End of file
이 왜 나에게이 오류를 주는가 : 나는 서브 루틴의 인수로 "행"을 할당하지만 지금은 같이 나에게 오류를 제공
확인?
항상 태그 [tag : fortran]을 사용하고 질문이 구체적이라는 것을 구별하기 위해 필요한 경우에만 버전을 추가하십시오. 예를 들어, Fortran 2008은 사용할 수없고 Fortran 90 만 사용할 수 있습니다. –