■ 実行環境
- OS
- Debian GNU/LINUX ver.3.0 (woody)
- Fortran77 コンパイラ
- Intel Fortran Compiler ver.7.1(ifc)
■ ソースの入手・展開
以下のurlからダウンロードする.
任意のディレクトリにて展開.
$ tar xvzf gtool4-currenttgz
■ configure
ディレクトリ内のINSTALLファイルを参考にビルドする.
このとき、bash環境では、
$ export FC=ifc
とする.
configureをかます.
# ./configure --prefix=/usr/local/gtool4\
--with-netcdf=/usr/local/netcdf/lib/libnetcdf.a \
--with-dclf90config=/usr/local/dcl-f90/bin/dclf90config
■ gt_map.f90 の書き換え
src/gt_map.f90 内の
use gt_vartable, only:hoge
を全てコメントアウトする. gt_map 内で gt_vartable を定義していても,
gt_map 内のサブルーチンで use gt_vartable, only:hoge してしまうと,
gt_map を呼び出したルーチンから gt_vartable で定義されているものが見えなくなる
ためらしい. 以下参考文献.
■ Config.mk の書き換え
Config.mk を以下のように書き換える.
...
# コンパイル時・リンク時に必要なフラグ
SYSFFLAGS=-I/usr/local/dcl-f90/include -O -w -Vaxlib
# => -Vaxlib を付け加えた.
...
# SYSDEPARG, SYSDEPABORT: sysdem dependent routine (usually "DCL" works)
SYSDEPARG=common # => dcl を common に書き換えた.
この作業は必ずしも必要ではないが, マシンによってはこの書き換えを行わないと, インストール後, gtview が正しく動作しないことがある. 詳細はエラー対処/gtview が引数をとれないを参照のこと.
■ make
展開したトップディレクトリでmake, make installする.
# make
# make install
■ gtview が引数を取れない
インストール後に, gtview コマンドを実行すると, 指定した引数をとらずに, 以下のようなエラーが表示され使用できない場合がある.
$ gtview sample.nc
ANVarOpen(@) : No such file or directory
** Abort signal **
End of diagnostic
これは gtview が呼び出している SysdepArgCount() に関連している. SysdepArgCount()引数の個数の取得を行う関数である.
これは gtool4 のインストール時に 与える SYSDEPARG という環境変数の値に応じて, コンパイルされるライブラリが異なり,
SYSDEPARG=dcl → sysdeparg-dcl.f90
SYSDEPARG=common → sysdeparg-common.f90
SYSDEPARG=hitachi → sysdeparg-hitachi.f90
が指定される.
デフォルトでは SYSDEPARG=dcl となっている. sysdeparg-dcl.f90 は dcl のosqarn サブルーチン(dcl-5.2/src/math1/oslib/osqarn.f.iargc) を呼び出す.
osqarn はその中身で iargc を呼び出している. iargc とは f77 の組み込み関数で, iargc(k, arg) を指定することでコマンド行の k 番目の引数の取得を行う. すなわち実際に引数の取得を行うのは iargc である.
dcl をソースから正しくインストールできていれば問題ないはずだが, 例えば deb パッケージからインストールした dcl のライブラリ libdcl**.a は常に arg = 0 を返すために その場合にgtool4をソースからコンパイルすると引数を取れなくなる. また dcl をソースからインストールした場合でもなぜか引数がとれないことがある.
SYSDEPARG=common を指定するとその場で組み込み関数 iargc を呼び出すので,
dcl を経由して iargc を呼び出す場合と動作は変わりない. よって SYSDEPARG=common として make を行うほうが確かである. ただし, intel fortran compiler を利用する際には 実行オプションとして -Vaxlib を指定する必要があるので注意が必要である.