運用方法 -------- ANGEL は、Windows系、各種UNIX系マシンで利用可能です。 どのマシンでも同じ結果を得ることができます。 パッケージの中に、代表的なマシンとOS毎に実行形式の ファイルが梱包されていますので、 まず動かしてみてください。 それらが利用できれば問題ありませんが、そうでない場合は、 以下にコンパイルの仕方も説明します。 まず、ANGEL 起動から説明します。 本体起動 ~~~~~~~~ 実行形式の ANGEL の本体は、梱包されているもので、 ``angel400.exe, angel400.alp, angel400.hp, angel400.g77, angel400.pgf`` など、\ ``angel``\ の後にバージョン番号とマシン識別子が ついています。 例えば、識別子が\ ``exe``\ のものはWindows系の ものです。 ANGEL を利用するには、最低限この実行ファイルだけで運用できます。 次に述べる ANGEL 本体を動かすシェルスクリプトや、バッチファイルを 使わなくても、ちょっと不便ですが利用できます。 まず本体の起動パラメーターを説明します。 本体を起動すると、 .. rubric:: List 1.3 ● ANGEL 起動場面 :name: list-1-3 :class: angel-list-caption .. code-block:: text 1: > angel400 2: > 3: > ANGEL (R) Graphic Program Version 4.00 4: > Copyright (C) Koji NIITA 1993-2002. All rights reserved. 5: > | のように商標とコピーライトが標準出力に 書かれ、その後、起動パラメーターの入力待ちの 状態になります。 ここで、入力ファイル名、処理するページの指定、 出力ファイル名などを入力します。 これらは、空白で区切って一行入力です。 入力後、Enter を押すと ANGEL の処理が行われます。 入力の書式は、 .. container:: minipage angel-doublebox *input_filename*  [ ``-f`` :math:`n_1` ]   [ ``-t`` :math:`n_2` ]   [ ``-o`` *output_filename* ]   [ ``-a`` ]   [ ``-v12`` ]   [ ``-exp`` ] | ここで、[   ] の付いているものは省略可能です。最低インプットの ファイル名が必要です。 これらのパラメーターは、空白 で区切られている限り順番は 自由です。 各パラメーターは次のような働きをします。 .. container:: center .. table:: 起動パラメーター +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | パラメーター |   説明 | +==========================+==========================================================================================================================================================================================================+ | *input_filename* | ANGEL で処理する入力ファイル名。必須です。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-f`` :math:`n_1` | .. container:: minipage | | | | | | | 処理する最初のページ :math:`n_1` | | | | これを省略すると1ページから処理します。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-t`` :math:`n_2` | .. container:: minipage | | | | | | | 処理する最後のページ :math:`n_2` | | | | これを省略すると最後のページまで処理します。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-o`` *output_filename* | .. container:: minipage | | | | | | 出力するEPSファイル名。これを省略すると、入力ファイル名の 拡張子を eps に変えたファイルに出力します。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-a`` | .. container:: minipage | | | | | | A4 横置きか縦置きかの情報をGhostviewの立ち上げに反映するための 起動シェルを書き出します。 起動シェルのファイル名は、\ ``angelbat`` です。 デフォルトは書き出しません。 UNIXユーザーのためのものです。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-v12`` | .. container:: minipage | | | | | | ANGEL バージョン2以前のインプットをバージョン3のインプットに 変換します。ギリシャ文字などの特殊文字の記述の仕様が | | | | | | 大幅に変わったので、それらを変換します。 変換したインプットは、入力ファイル名の拡張子を an2 に 変えたファイルに出力します。変換後、通常の ANGEL の処理も 行います。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ``-exp`` | .. container:: minipage | | | | | | 入力ファイルにインクルードファイルのある場合、 それを展開した新たな入力ファイルを作成し、ANGEL の処理を 行います。展開した結果は、入力ファイル名の拡張子を new に変えたファイルに出力します。 | +--------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 本体起動シェル ~~~~~~~~~~~~~~ 本体を直接起動しても運用できますが、本体を起動するシェルや バッチファイルを利用すれば、より便利な使い方ができます。 以下に、Windows系バッチファイルとUNIX系の起動シェルの 例題を示します。これらは、ANGEL のパッケージの中に含まれています。 .. rubric:: List 1.4 ● Windows系バッチファイル :name: list-1-4 :class: angel-list-caption .. code-block:: text 1: @echo off 2: if "%1"=="" goto man 3: goto start 4: :man 5: echo ANGEL (R) Graphic Program Version 4.00 6: echo Copyright (C) Koji NIITA 1993-2002. All rights reserved. 7: echo usage: 8: echo angel4 INPUT [-a] [-f N1] [-t N2] [-o OUTPUT] [-v12] [-exp] 9: echo ----------------------------------------------------------- 10: echo INPUT : input file name 11: echo N1 : first page 12: echo N2 : terminate page 13: echo OUTPUT : output file name 14: goto end 15: :start 16: if exist error.ang del error.ang 17: echo %1 %2 %3 %4 %5 %6 %7 %8 %9 > input.ang 18: c:\angel\angel400.exe < input.ang 19: del input.ang 20: :end パラメータがない場合は、商標とコピーライト、簡単な使い方を 示して終わります。 16行で消している error.ang は、ANGEL のエラー出力ファイルです。 古いものが残っているときに消します。 17行で最大9個のパラメーターを ``input.ang`` に書き込んでいます。 次の行でこのファイルを ANGEL にリダイレクトして起動しています。 ANGEL 本体が、\ ``c:``\ ``\``\ ``angel`` にあるとして書いていますが、 PATH を切っていれば実行ファイル名だけで十分です。 処理後 ``input.ang`` を消します。 UNIX系の起動シェルもほぼ同様ですが、\ ``-a`` パラメーターに 関してUNIX独特のものもあります。 .. rubric:: List 1.5 ● UNIX系シェルファイル :name: list-1-5 :class: angel-list-caption .. code-block:: text 1: #!/bin/sh 2: if [ "$1" = "" ] 3: then 4: echo 'ANGEL (R) Graphic Program Version 4.00' 5: echo 'Copyright (C) Koji NIITA 1993-2002 All rights reserved.' 6: echo 'usage:' 7: echo ' angel4 INPUT [-a] [-f N1] [-t N2] [-o OUTPUT] [-v12] [-exp]' 8: echo ' -----------------------------------------------------------' 9: echo ' INPUT : input file name' 10: echo ' N1 : first page' 11: echo ' N2 : terminate page' 12: echo ' OUTPUT : output file name' 13: exit 14: fi 15: if [ -r error.ang ] 16: then 17: rm error.ang 18: fi 19: if [ -r angelbat ] 20: then 21: rm angelbat 22: fi 23: echo $1 $2 $3 $4 $5 $6 $7 $8 $9 > input.ang 24: angel400 < input.ang 25: rm input.ang 26: if [ -r error.ang ] 27: then 28: if [ -r angelbat ] 29: then 30: rm angelbat 31: fi 32: exit 33: else 34: if [ -r angelbat ] 35: then 36: . angelbat 37: fi 38: fi 25行目までの ANGEL の処理と\ ``input.ang`` の消去までは ほぼ同じですが、その後で、エラーがない場合は、 ``angelbat`` を起動するようになっています。 このシェルの中でGhostviewなどを起動するように ユーザーが設定できます。 Ghostview起動シェル ~~~~~~~~~~~~~~~~~~~ 起動パラメーターで ``-a`` を指定した時には、\ ``angelbat`` という ファイルが作られます。 ANGEL では、A4用紙を横置きに使うLandscapeと縦置きに使う Portraitを選択できます。その選択に合わせてビューアーを 起動する時に使います。 ``angelbat`` の中身は、 .. rubric:: List 1.6 ● angelbat for Landscape :name: list-1-6 :class: angel-list-caption .. code-block:: text 1: angel-gs output_filename >/dev/null & 2: rm angelbat .. rubric:: List 1.7 ● angelbat for Portrait :name: list-1-7 :class: angel-list-caption .. code-block:: text 1: angel-gp output_filename >/dev/null & 2: rm angelbat これらは、Landscapeの時には\ ``angel-gs``\ 、Portraitの時には ``angel-gp``\ というシェルに出力ファイル名を渡して 起動し、自分自身を消去するというものです。 ユーザーは、\ ``angel-gs, angel-gp`` というシェルを 用意してGhostviewなどのビューアーを起動することになります。 これらの例題を以下に示します。 .. rubric:: List 1.8 ● angel-gs :name: list-1-8 :class: angel-list-caption .. code-block:: text 1: #!/bin/sh 2: if [ "$1" = "" ] 3: then 4: exit 5: fi 6: ghostview -fg black -bg white -a4 -magstep 1 -landscape $1 -display myscreen & .. rubric:: List 1.9 ● angel-gp :name: list-1-9 :class: angel-list-caption .. code-block:: text 1: #!/bin/sh 2: if [ "$1" = "" ] 3: then 4: exit 5: fi 6: ghostview -fg black -bg white -a4 -magstep 1 $1 -display myscreen & ふたつの違いは、\ ``angel-gs`` に ``-landscape`` があるだけです。 これにより出力を即座に正しい方向から見ることができます。 大きさ\ ``-magstep``\ 、色などのパラメーターは各自の好みで決めてください。 ``-display`` のパラメーター\ *myscreen* は、画像を 出したい画面のIPを入れると便利です。 エラー出力 ~~~~~~~~~~ ANGEL の処理中にエラーが生じた場合は、error.ang というファイルに、 エラーの原因、起こったファイル名と行番号が示されます。 タグジャンプ形式にしてありますのでご利用ください。 エラーファイルの名前は変えられませんので注意してください。 ソースファイル ~~~~~~~~~~~~~~ パッケージの中にある実行形式のファイルでは動かない場合、 また、入力パラメーターでは動かせないデフォルト値を 変えたい場合など、コンパイルが必要になることがあります。 そのような時は、パッケージの中の ``source`` ディレクトリーから ソースファイルとmakefileをコピーしてコンパイルしてください。 | ソースは、Fortran77 で書かれています。特殊なことや、 機種依存することは殆ど使っていないので、どんなFortranのコンパイラでも メイクできると思います。ただし、日付と時間を取る関数が含まれますので、 うまく動かない時は、\ ``mdp-uni.f`` を ``mdp-win.f`` に変えるか、 これらのプログラムの中身を変更して下さい。 ソースファイルとインクルードファイルは、 :: a-alone.f a-main0.f a-main1.f a-hsect.f a-line.f a-func.f a-utl00.f a-wtext.f mdp-uni.f の9つのファイルからなります。 改造、改変は自由です。ただし、それらのものを別名で配布することは 禁止します。また、無断でソースの一部を転用することを禁止いたします。 インクルードファイル ~~~~~~~~~~~~~~~~~~~~ 上のソースファイルには、\ ``angel00.inc, angel01.inc`` の 2つのインクルードファイルが必要です。 まず、\ ``angel00.inc`` では、コード全体のメモリー量を定義する ``mdas`` を記述しています。デフォルト値は5000000で、 40Mb取っています。大きな2次元表示や点数の非常に大きな グラフの時に足りなくなり、メッセージをだして止まりますので、 この値を大きくして下さい。また、デフォルト値では、メモリーが大きすぎて 動かないマシンの時はこの値を小さくしてコンパイルして下さい。 .. rubric:: List 1.10 ● angel00.inc :name: list-1-10 :class: angel-list-caption .. code-block:: text 1: ************************************************************************ 2: * * 3: * angel00.inc * 4: * * 5: ************************************************************************ 6: 7: *----------------------------------------------------------------------- 8: 9: parameter ( mdas = 5000000 ) 10: 11: common /mdasa/ das( mdas ) 12: common /mdasb/ mmmax 13: 14: *----------------------------------------------------------------------- 次に、\ ``angel01.inc`` では、入力の数値データの最大コラム数、 読み込みの最大コラム数、コメントや矢印の最大数などが定義されます。 特殊な入力ファイルの時などに、これらの値を変更してコンパイルして下さい。 .. rubric:: List 1.11 ● angel01.inc :name: list-1-11 :class: angel-list-caption .. code-block:: text 1: ************************************************************************ 2: * * 3: * angel01.inc * 4: * * 5: ************************************************************************ 6: 7: *----------------------------------------------------------------------- 8: 9: parameter ( mh = 30 ) 10: * max column terms in one h: section 11: 12: parameter ( mfc = 100 ) 13: * mfc : max number of constant 14: * and max terms of equation 15: 16: *----------------------------------------------------------------------- 17: 18: parameter ( icolm = 200 ) 19: * icolm : max column number, should be less than ichrl 20: 21: parameter ( ichrl = 2048 ) 22: * ichrl : length of character for dimension 23: * and max column number for ps file 24: 25: *----------------------------------------------------------------------- 26: 27: parameter ( inig = 500 ) 28: * inig : length of character for dimension 29: 30: parameter ( mc = 500 ) 31: * mc : max number of line comments (total) 32: * max number of arrows 33: * max number of multi records 34: 35: parameter ( numtic = 1000 ) 36: * numtic : max number of tic number 37: 38: parameter ( ipsm = 100 ) 39: * max number of include ps file in one graph 40: 41: parameter ( nr = 50 ) 42: parameter ( nc = 50 ) 43: 44: * nr: maximum number of row in one table 45: * nc: maximum number of column in one table 46: 47: *----------------------------------------------------------------------- 48: 49: parameter ( r0max = 1.0d+40, r1max = 1.0d+41 ) 50: * max real number 51: 52: parameter ( r9max = 1.0d+39 ) 53: parameter ( r9min = 1.0d-39 ) 54: 55: parameter ( pi = 3.1415926535898d0 ) 56: 57: *----------------------------------------------------------------------- 58: 59: parameter (jol=18) 60: * output temporary file of lines 61: parameter (jil=19) 62: * output temporary file of region line 63: parameter (jhc=20) 64: * output temporary file of 3D color plot 65: parameter (jhl=21) 66: * output temporary file of 3D cluster plot 67: parameter (jer=22) 68: * for error message 69: parameter (jps=23) 70: * input ps file 71: parameter (jab=24) 72: * angelbat for psview only for unix 73: parameter (jht=25) 74: * final eps output for angel 75: parameter (jhs=26) 76: * temporary file of gauss smearing for contour plot 77: * temporary new input file 78: * temporary file for wtab 79: parameter (jwt=71) 80: * temporary file for wtab: 81: parameter (jhm=72) 82: * temporary file for w: wt: 83: parameter (jha=73) 84: * temporary file for aw: 85: parameter (jhy=74) 86: * temporary file for y-comment 87: 88: *----------------------------------------------------------------------- メイクファイル ~~~~~~~~~~~~~~ パッケージに入っているMakefileを以下に示します。 機種依存のところのコメントを目的のものに合わせて外してください。 全てPATHが通っているとして書いてあります。 またオプションは、コンパイラに合わせて変えてください。 ANGEL としては、特別なオプションは必要ありません。 ライブラリーとしては、日時をとるために\ ``date( ), time( )``\ を 使っています。これが利用できるようにしてください。 .. rubric:: List 1.12 ● Makefile :name: list-1-12 :class: angel-list-caption .. code-block:: text 1: #------------------------------------------------------------------------ 2: # 3: # @(#)Makefile 2002/08/06 4: # 5: # Makefile for ANGEL 6: # 7: #------------------------------------------------------------------------ 8: ##### sources ##### 9: #------------------------------------------------------------------------ 10: 11: OBJ1 = \ 12: a-alone.o 13: 14: OBJ2 = \ 15: a-main1.o a-hsect.o a-line.o a-func.o a-utl00.o \ 16: a-main0.o a-wtext.o mdp-uni.o 17: 18: #------------------------------------------------------------------------ 19: ##### set executable file name ##### 20: #------------------------------------------------------------------------ 21: 22: TERGET = angel400 23: 24: #------------------------------------------------------------------------ 25: ##### set compile options ##### 26: #------------------------------------------------------------------------ 27: #Alpha 28: # FFLAGS = -O4 -warn noalignments -warn nousage 29: # FC = f77 30: #------------------------------------------------------------------------ 31: #Linux pgf 32: FFLAGS = -O4 33: FC = pgf77 34: #------------------------------------------------------------------------ 35: #Linux g77 36: # FFLAGS = -O4 -fno-automatic 37: # FC = g77 38: #------------------------------------------------------------------------ 39: #Sun 40: # FFLAGS = -O 41: # FC = f90 42: #------------------------------------------------------------------------ 43: #HP 44: # FFLAGS = +DA1.1 +O0 +e +U77 +Onolimit 45: # FC = f77 46: #------------------------------------------------------------------------ 47: 48: MAKE = Makefile 49: CC = cc 50: CFLAGS = -O0 51: 52: OBJS = $(OBJ1) $(OBJ2) 53: 54: .f.o : 55: $(FC) $(FFLAGS) -c $*.f 56: .c.o : 57: $(CC) $(CFLAGS) -c $*.c 58: 59: all :$(OBJS) 60: $(FC) -o $(TERGET) $(OBJS) 61: 62: $(OBJ1) : angel00.inc 63: $(OBJ2) : angel01.inc 64: 65: clean : 66: rm -f $(OBJS)