본문 바로가기

과학 연구용 도구/Fortran

[F95]고급 프로그래밍으로 가기 위해 필수적인 외부파일 제어



외부 파일 불러오기 read

앞 서 잘 짜여진 프로그램은 더 이상 내부 프로그램을 손보지 않아야한다고 했다. 굳이 조절하고 싶은 옵션 또는 파라미터는 외부파일 형식으로 입력하면 되겠다. 외부 파일의 옵션으로도 충분히 안의 여러 값들은 물론 IF구문으로 짜여진 함수들의 선택도 가능하다.


간단히 다음과 같은 외부파일을 생각해 보자. 이 파일은 작업 폴더 아래에 있는 INPUT 폴더 안에 있다.


 <file1.dat >


(왼쪽 행의 회색 번호는 편집기의 줄번호이며 검은 글씨가 파일 내용이다.)

1번과 7번은 주석에 해당한다. 문자형식으로 읽어 올 수도 있겠으나 본문에서는 읽어오지 않았다. 포트란 본문에서와 달리 주석표시가 없는데 어떻게 이 주석을 피해가며 필요한 값만 불러 올 수 있는지도 보이겠다.


main

주 프로그램은 다음과 같다.


8번 줄에서는 앞에서 보인 file1.dat를 채널 9를 통해 연결시킨다. 

아래는 read(9,*)를 통해 file1.dat의 내용을 읽어오고 있다. 한 번의 read문이 한 줄을 읽어들인다. file1.dat의 첫줄과 일곱째줄의 주석은 받아 들이는 변수 없이 real(9,*)만 사용했다.


결과적으로 1-5를 a1-a5로 받아들이고 차원이 3인 b를 사용하여 6, 7, 8을 받아들였다. 그리고 나머지 9,10은 c1, c2를 통해 읽어들였다. 


그 아래 c3을 통해 file1.dat의 12 아래의 값을 읽기를 시도했으나 file1.dat에서는 12줄 이후는 빈공간도 없으므로 다음과 같은 'End of file' 에러가 뜬다.



아래는 주프로그램의 후반부이다.
줄번호 22에서 채널 20을 통해 외부파일과 연결시켰고 그 파일에 값들을 보내고 있다.


이 프로그램을 실해시키면 화면에 'program completed'를 출력하고 ./OUTPUT폴더 안에
다음과 같은 내용이 담긴 result.dat이 생긴다.


차원을 3으로 지정해 주면 알아서 데이터 세줄을 읽어들임이 주목할 만하다.

외부파일 제어의  예 그리고 마무리

여러 목적에 따라 다양한 방식으로 사용이 가능하겠다. 수치적분의 경우 여러 근사법이 사용되어지는데 적분범위가 주어지면 그 값에 따라 원하는 만큼 적분에 필요한 특수한 숫자들을 얻을 수 있다. (예를 들어 Gaussian Legendre Qudrature 방법과 같은 것을 찾아보라 20이하의 포인트로 50 이상의 적분 구간의 적분보다 나은 결과를 얻을 수 있다.)

그 밖에 그 프로젝트에만 사용되는 특수한 데이터 값들이나 제어 옵션들을 외부 파일를 통해 제어할 수 있을 것이다. 

여기서는 수백 수천 줄의 프로그램을 분석할 의도는 전혀없다. 간단한 벽돌들을 하나씩 소개함으로써 개개인이 알아서 집을 짓는데 도움이 됐으면 하는 바램이다. 스스로에겐 간단한 복습으로도 좋다.