$IO OUTPUT

ASAP을 실행해 보면 Command Output Window에 수많은 결과값들이 출력된다. 그중에서 파일로 저장해 두고 싶은 결과가 있을 수 있다. 이 결과값을 파일로 저장시켜주는 기능이 바로 $IO OUTPUT 명령어이다. 우선 아래의 프로그램을 실행시켜 보자.

SYSTEM NEW
RESET

EMITTING  RECTANGLE  Z  0  1  1  10000
WINDOW Y X

STATS  POSITION
RETURN

그러면, Command Output Window에 아래와 같은 결과물이 출력된다.

— SYSTEM NEW
— RESET
— EMITTING  RECTANGLE  Z  0  1  1  10000
Total flux in rays created by this emitter is   1.000000
— WINDOW Y X

—   STATS POSITION
 Current Statistics for Object 0 –
  Total Flux =  1.000000     from 10000 rays (100.00%)
                                             X                          Y                           Z
                    Centroid: 0.2892359E-02  -.1040085E-02  0.000000
        RMS Deviation: 0.5797728            0.5767288           0.000000
   Maximum Spread: -1.002879             -.9988816           0.000000
                                     to 0.9968241           1.000964            0.000000
— RETURN

이 중에서 우리는 STATS POSITION의 결과를 저장하고 싶다면 어떻게 할까?. STATS POSITION 명령어 앞뒤로 아래와 같이 $IO 명령어를 추가한 후 다시 실행시켜 보자.


$IO  OUTPUT  RESULT  FILE(10)
  STATS  POSITION                            !! $IO OUTPUT 루프안에 있는 내용이 파일로 저장된다.
$IO  OUTPUT  CLOSE

RETURN

Command Output Window에 출력된 결과에는 차이가 없다. 그런데, 탐색기나 메뉴바에서 File > Open…으로 Working Directory를 열어보면 result.out 이라는 파일이 하나 생성되어 있을 것이다.

IO_out
그림 8.30 result.out 파일 생성

메모장으로 파일을 한번 열어보자. STATS POSITION 명령어에 의한 Command Output Window에 출력된 결과와 동일한 내용이 저장되어 있을 확인 할 수 있다. 즉, $IO OUTPUT$IO OUTPUT CLOSE 구간 사이에 있는 내용이 파일로 저장된다.

IO_notepad
그림 8.31 result.out 내용

그러면 $IO  OUTPUT  RESULT  FILE(10) 에 대해서 좀 더 자세히 알아보자. 여기서 RESULT는 저장하려는 파일 이름이다. 파일명은 대문자로 작성되어야 하며 소문자일 경우에는 파일이 생성되지 않는다. 그러나, 저장된 파일은 result.out 처럼 소문자로 저장된다. 마지막에 있는 FILE(10)은 ASAP의 범위를 넘어서는 내용이다. ASAP이 Fortran 언어로 만들어진 프로그램이다보니 파일 입출력과 관련해서는 Fortran의 문법을 따르고 있다. FILE(10)이라고 하지 않고 그냥 10 이라고 숫자값만(ASAP에서는 이것을 unit number 라고 한다) 있어도 파일은 생성된다.

Note…

Fortran의 OPEN 함수에 대해서 알아보자.

OPEN
Statement : Connects an external file to a unit, creates a new file and connects it to a unit, creates a preconnected file, or changes certain properties of a connection.

Syntax
   OPEN ([UNIT=]io-unit  [, FILE=name] [, ERR=label] [, IOSTAT=i-var], slist)

   io-unit
   Is an external unit specifier.

   name
   Is a character or numeric expression specifying the name of the file to be connected.

   OPEN의 첫번째 인수는 [UNIT=]io-unit 이다. 이것은 FILE(10)의 (10)에 해당하는 값으로 Fortran에서는 이것을 ‘입출력장치번호’라고 하며, 입출력을 담당하는 장치에 번호를 부여하는 것으로 결과를 파일로 저장하려면 숫자(정수)를 넣고, 화면에 출력하려면 *(별표)를 넣는다. Fortran에서는 OPEN(*, file=’result.txt’) 이나 OPEN(10, file=’result.txt’) 형식처럼 사용한다.


마지막으로, 결과를 하나의 파일에 계속 추가하여 저장하는 방법에 대해서 알아보자.


$IO  OUTPUT  RESULT  FILE(10)
  STATS  POSITION                            !! $IO OUTPUT 루프안에 있는 내용이 파일로 저장된다.
$IO  OUTPUT  CLOSE

$IO  OUTPUT  RESULT  +FILE(10)
  STATS  DIRECTION                          !! 같은 파일에 추가되어 결과가 저장된다.
$IO  OUTPUT  CLOSE

RETURN

위의 프로그램은 STATS POSITION에 대한 내용을 먼저 저장한다. 그리고, 이어서 STATS DIRECT-ION에 대한 내용을 저장한다. 즉, 같은 파일명에서 FILE(10) 앞에 + 를 추가하면 하나의 파일에 연속적으로 결과를 저장하고, -FILE(10) 처럼 – 를 붙이면 기존에 있던 내용은 모두 지우고 마지막 내용만 저장된다. +/- 아무것도 없이 FILE(10)으로 되어 있어도 당연히 덮어쓰기 되어 마지막 내용만 저장된다. 그럼 이제, 중요한 결과들을 파일로 저장할 수 있게 되었다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: