시뮬레이션을 수행하는 포트란 코드가 있습니다. 경과 시간은 et
에 저장되고 시간 단계는 dt
에 저장됩니다. 둘 다 실제 유형으로 정의됩니다. 시뮬레이션을 실행해야하는 최대 시간을 보유하는 다른 실제 변수 tot
이 있습니다. i
은 정수 유형의 계수 변수입니다. 내 첫 번째 시도는 다음과 같이이었다 : 나는이 시도 할 때 총 시간이 클 때 그것이 단지 한 곳에서 사용 된 이후 i
제거하고 싶어Fortran으로 루프 내부에서 계산하기
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
integer :: i
et = 0.0
i = 0
do
i = i+1
et = real(i)*dt
if (et > tot) exit
! main code here
end do
그러나, 프로그램은 중단 :
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
et = 0.0
do
et = et + dt
if (et > tot) exit
! main code here
end do
두 가지 코드 샘플의 차이점은 프로그램이 너무 다르게 반응하게합니까? 제 컴파일러는 g77입니다.
편집 : 위의 코드 샘플에 선언 및 초기화를 추가했습니다.
편집 2 : 서브 루틴에 전달 된 초기 값은 dt = 1e-6
및
어떻게 프로그램이 멈 춥니 까? 오류? 무한 루프 (예 : 'et'가 'tot'에 도달하지 않음)? –
@ 앤더스 : 프로그램이 멈추지 않고 10 분 이상 실행되기 때문에 무한 루프를 가정합니다 (코드의 첫 번째 버전을 사용하면 약 1.5 분 후에 중단됩니다). – astay13
'et'는 메인 코드의 어딘가에서 다시 정의 된 것 같습니다. 값을 인쇄하여 예상대로 작동하는지 확인 했습니까? –