저는 최근에 기존의 포트란 프로그램을 작업하고 동시에 언어를 선택하기 시작했습니다.OPEN 문에 포트란 서브 루틴이 끊어졌습니다.
subroutine timing(yyyy, mm, dd, var, ntime, time_blocks,
* time_day)
use myglobals
! ---------------------------------------------------------------------
! Common Variables
! ---------------------------------------------------------------------
integer yyyy, ! year
* mm, ! month
* dd, ! day
* ntime ! nr of blocks for which time was measured
real time_blocks(ntime),
* time_day
character*4 var
! ---------------------------------------------------------------------
! Internal Variables
! ---------------------------------------------------------------------
integer ios
integer out_unit=52
open(unit=out_unit, file=diroutput(1:69)//'timing',
* err=450, iostat=ios)
450 print*, "iostat= ", iostat
print*, "open"
write(out_unit, format_str) yyyy, mm, dd, var, time_blocks,
* time_day
return
end
이 서브 루틴의 목적은 그것이 정의 된 형식 (내 예에 포함되지 않은 형식 정의) 다음 파일에 프로그램의 다른 부분에서 얻는 입력을 작성하는 것입니다 : 나는 다음과 같은 서브 루틴을 썼다. 이 서브 루틴의 첫 x 째 호출시 파일을 작성한 다음 추가 정보를 추가 할 때마다 호출 할 때마다 파일을 액세스해야합니다. diroutput
은 myglobals
에 정의 된 문자열입니다.
내 문제는 프로그램이 OPEN
문에서 멈추는 것처럼 보입니다. 즉, 프로세스를 죽일 때까지 아무 일도 일어나지 않습니다. print*,
문을 사용하여 코드를 실행하여 오류를 찾은 다음 오류가 OPEN
문에 있어야한다는 것을 알았습니다. 프로그램이 전혀 아무것도하지 않는 이상한 것처럼 보이며 심지어 오류 레이블로 건너 뛰지도 않습니다.
Fortran을 처음 접했을 때 나는 뭔가 빠져 있었기 때문에 좀 더 경험이 많은 사람이 빨리 살펴 보았을 것입니다. diroutput
에 올바른 경로가 포함되어 있다고 확신합니다.
저는 Linux (CentOS 5.5)를 사용 중이며 Intel Fortran Compiler 11.1로 프로그램을 컴파일했습니다.
'diroutput'은 정확하게 69 문자를 가지고 있다는 것을 알고 계십니까? 아마도'trim (diroutput)'을 사용하십시오. FORTRAN 77 대신 Fortran 95/2003을 배우는 것이 좋습니다. 특히, High Performance Mark에서 언급했듯이 무료 소스 형식이 더 쉽습니다. http://en.wikipedia.org/wiki/Fortran_95_language_features –
을 참조하십시오. iostat가 아닌 ios를 사용해야합니다. myglobals에 format_str이 있습니까? err = 450은 오류에 관계없이 해당 행에 도달하기 때문에 실제로 아무 것도 수행하지 않습니다. 이것의 Nono는 그것이 걸리게 할 것입니다. – agentp
@ M.S.B. 팁을 주셔서 감사합니다. 지금부터는 Fortran의 최신 버전을 사용할 것입니다. 'diroutput'에는 내 경로와 몇 가지 추가 문자가 포함되어 있으므로 경로를 찾는 유일한 방법이었습니다. 그것은 나에게 올바른 경로를 제공합니다. 내 다른 실수를 발견해 주셔서 감사합니다. 'format_str'은 실제로이 서브 루틴에서 정의되었습니다. 예제를 단순화하고 그 라인에서 변경하는 것을 잊었습니다. –