11/23’04
Revise 10/6’5
Revise 8/16’5
直接探査についてread_direct_access.htm11/27’5
3. f77からf90への変換
5. Psの変換
6. 関数の作り方
7. ブロックデータ文
zu_title = zu_title//" 風向"//WIND_D(idirec)
ではzu_titleの長さを宣言しているのでうまくいかない。
zu_title = trim(zu_title)//" 風向"//WIND_D(idirec)
が正解!
5/20/04
富士通コンパイラ ‘(x)’ OK
Sunコンパイラ ‘(x)’ NG → ‘(1x)’ OK
:%s/^C/!/g
適宜Cのところをc, *と変更する。
:%s/^c/!/g
:%s/^*/!/g
/^ +/
で複数行にまたがるところを探す。6カラム目は”+”とは限らないので適宜修正する。
6カラム目の文字を出力するperlスクリプト。ただし、タブが含まれていると検出されてしまう。
#!/usr/bin/perl
$n=0;
while(<>){
$n++;
# print $_;
chomp;
$colum1 =
substr($_,0,1);
$colum6 =
substr($_,5,1);
if( $_ ne '' ){
if( $colum1
ne '!' && $colum6 ne ' ' ){
print $n,"\t",$colum6,"\n";
}
}
}
変更の手順はviであればmapに登録すると便利。
map g 6s& ^[
コマンドの意味は、「’6カラム’を’&と5カラムの空白’で置換」する。最後はcntl+Vののち(esc)
nで次の対象を探して、gで変換できる。(f90の仕様では、&の入力は必須ではない)
map , k$a &^[
で,(コンマ)に1行上に移動し(k)、行末に移動し($)、&をつける(a)コマンドを割り付ける。最後はcntl+Vを入力したのち(esc)を入力する。
文章末から
?^ &
で複数行にまたがる箇所を検索し、コンマで置換できる。
(注意!) 行の終わりにコメントがある場合は対応できない。コンパイルエラーを見て修正する。
作業ディレクトリ:/export/raid2/koshida/tools/bin
モジュールのファイル名は (大文字).f90 が必要。 M_ で始めるとよい。
(リザバでコンパイルするとき。ファイル名はすべて大文字とする。)
(モジュール名は小文字でもよい)
(f90は小文字でもよい) 11/20’5追記
モジュール名とファイル名は同じが好ましい。ソース内のモジュール名をもとにオブジェクトファイルを要求するのでモジュール名とファイル名が異なるとMakefileを直す必要が出てくる。
リザバのコンパイラは拡張子が.fで、ソースがf77とf90の混合でも解釈してくれる(/home/koshida/jobs/2003/prg/geppou,1/2’6)
makeしたとき、以下のようなメッセージはオブジェクトファイルの生成順番がおかしいのでMakefileを書き直す。
"/export/raid2/koshida/MRR/data/prg/scat/src/M_COMMON1.f90",
行 = 5, 桁 = 5: エラー: "IOHANDLING" が USE 文でモジュール
名として指定されていますが、コンパイラはこれを見つけられません。
一つのファイルに複数のモジュールがある場合に、作成順を間違える傾向にある。
このとき、複数のオブジェクトファイルを出力対象としている。
使わない(ないはずの)オブジェクトファイルに対する記述は削除する。ソースがないのにオブジェクトファイルを要求するものに注意!
次のようなメッセージが出る。
make: Fatal error: Don't know how to make
target `/export/raid2/koshida/MRR/data/prg/scat/obj/M_SCAT.o'
オブジェクトファイルを作成する部分と、ソースの更新時間と比較する部分があるので両方削除する。
コンパイル時に、次のようなメッセージがでたら、
未定義の
最初に参照している
シンボル
ファイル
jwe_isfm
/export/raid2/koshida/tools/bin/libcalps90.a(gray.o)
f_ccomp
/export/raid2/koshida/tools/bin/libcalps90.a(namedcolor.o)
jwe_ilst
/export/raid2/koshida/tools/bin/libcalps90.a(gray.o)
ライブラリが古い、ということなので、オブジェクトファイルを作成しなおして
ar -r libtakelib90.a mojisu.o
等として、書き換える。
現在のファイルが新しいかどうかは
ar -tv libcalps90.a plot.o
等で確認できる。
Library 更新用のシェル
/export/raid2/koshida/tools/takelib_src/c_renew
/export/raid2/koshida/tools/cal_src/c_renew
前述のように/opt2/SUNWspro/bin/f90は *.fを同様に解釈するのでf77からf90への書き換えは必須でない(1/7’6)
_F90_STOP
/export/raid2/koshida/tools/bin/libtakelib90.a(mojisu.o)
f90でなくてf77でもコンパイル可。
オブジェクトファイルを作成
/opt2/SUNWspro/bin/f90 –c gray.f
set PSSEDFILE =
/export/raid2/koshida/tools/pseuctosj.sed
sed -f $PSSEDFILE out.ps | euctosj > sj.ps
gs -sDEVICE=png256 -r100
-sOutputFile=mrrARGV[0]%02d.png $PS <inp.gs
注)Reservoirには漢字フォントが無いようなので英数文字のみとする。
セグメント例外(10/6’5)
setfigorg2のなかで
if(itate.eq.0)then
...
else
...
itate=1
endif
という記述があり、「セグメント例外」となる。
hydroでコンパイルしたときplotにエラーが出た(Error: /undefined in movetocurrentpoint)。ソースの確認が必要。
convertの-trimはrainbow,hydroとも不可。
integer function iradget( ll, n ) !!関数の開始
! 地整番号(ll=Z81-Z8A)、地整内レーダ番号(n)より通し番号を得る
do irad = 1,nrad
if(
all((/ll,n/) == (/id_kyoku(irad),sn_local(irad)/)) ) then
iradget = irad !!←返り値として用いたい名前(関数名と同じで可)に値を入れる
return
endif
end do
iradget = -1
!!←返り値として用いたい名前(関数名と同じで可)に値を入れる
return
end function iradget
!!終了文
character(len=4)
function gaiji_kiji( ikiji1, ikiji2 )
! 最初に文字の長さを宣言する。長さの宣言がないと「長さ1」と判断される。
!同じ名前の文字変数を引用するプログラムで宣言しておく
c !to get
weather infomation about gaiji in geppou 1/2'6
C input:paare of 1bite integer first bite and seconde byte
c output: situation 4 character
integer(kind=1) :: ikiji1, ikiji2
character(len=4)
:: res
gaiji_kiji="????"
if(ikiji1==Z'eb')then
if(ikiji2==z'9f')then
res="fine"
elseif(ikiji2==z'a0')then
res="clud"
elseif(ikiji2==z'aa')then
res="snow"
elseif(ikiji2==z'b5')then
res="grap"
else
res="????" ! undefilne
endif
else
res="xxxx" !wrong
data
return !!途中で戻ることも可能
endif
gaiji_kiji=res
end
function gaiji_kiji !!関数の終了
参考:http://www.toyama-cmt.ac.jp/~mkawai/lecture/fortran/subroutine/subroutine.html
common文があると、データの初期化はブロックデータ文が必要。
ブロックデータ文であることを一行目で宣言し、最終行で閉じる。
block data sample!!!!一行目
real::x!!!!宣言文、
common/sam/x!!!!共通ブロック文
data x/1./!!!!データ文
end!!!! ブロックデータ文の終
sample.f90などの名前で保存し、一緒にコンパイルすると値が引き継がれる(はず)4/30’8