1)まずFortranのプログラム内でのフォーマットは以下のように記述
parameter(ia=100,ja=100,ka=5)
dimension am(ia,ja,ka)
write(cf1,'(a)') './mode/mode1.grd'
lrecl = ia*ja*ka*4
open(60,file=cf1,status='unknown'
& ,form='unformatted',access='direct',recl=lrecl)
write(60,rec=1) (((am(i,j,k,1),i=1,ia),j=1,ja),k=1,ka)
end
配列データを出力するプログラム
2)プログラムをコンパイル 実行
スクリプトファイルの例
2−1) 最も単純なもの
#!/bin/csh -f
setenv LANG C
ifort mode_conv1.f
./a.out &
2−2)メインプログラムのほか、外部のサブルーチンプログラムを使う場合
#!/bin/csh -f
setenv LANG C
ifort -O3 - mode_conv1.f ~/program/S_EIGN.for ~/program/S_HAUS.for ~/program/S_OUTM.for ~/program/S_QR.for ~/program/S_DOT.for ~/program/S_FDBS.for ~/program/S_INMG.for ~/program/S_PIVO.for
./a.out &
3−2)1)で示した配列バイナリデータを読み込み、出力する場合は、パソコン環境によってbig_endian, little_endian方式の2通りがある。そのため、2−1)のような最も単純なコンパイル、実行をすると、うまく読めない、出力できないときがある。そこで、必ず間違えないように、以下のように引数を使ってバイナリデータの読み込み、出力形式を指定しておく
#!/bin/csh -f
setenv LANG C
ifort -O3 -g -convert big_endian mode_conv1.f ~/program/S_EIGN.for ~/program/S_HAUS.for ~/program/S_OUTM.for ~/program/S_QR.for ~/program/S_DOT.for ~/program/S_FDBS.for ~/program/S_INMG.for ~/program/S_PIVO.for
./a.out &
3−3)プログラムが大きすぎて、メモリが足りない場合がある。そのときは、引数に-shared_intel -mcmodel=medium
#!/bin/csh -f
setenv LANG C
ifort -O3 -g -convert big_endian -shared_intel -mcmodel=medium mode_conv1.f ~/program/S_EIGN.for ~/program/S_HAUS.for ~/program/S_OUTM.for ~/program/S_QR.for ~/program/S_DOT.for ~/program/S_FDBS.for ~/program/S_INMG.for ~/program/S_PIVO.for
./a.out &
3−4)プログラムにエラーがあって、止まっている場所を知りたいときは、引数 -gen_interfaces や-tracebackをつけて試してみる。
注:上はIntelのifortコマンドで実行する場合なので、gcc, gfortranなどのコンパイルコマンドの場合は別
0 件のコメント:
コメントを投稿