久しぶりで compiler と戯れる。
とある移植性の低い Fortran の粒子輸送コードを、作者のものとは違うコンパイラでコンパイルしていて、一見 compile は通るのだが、実行してみると微妙にファイルが読めない。
数字だけが読めないというので、いかにももうちょいというところだったのだが、なにせ凄いコードで、 debug する気になれないで放置していたのだ。
そんなところへ最近、 IBM の XL Fortran の MacOSX 版がベータで公開されていたので拾ってきていて、こいつは職場の AIX な RS6000 のと同じ奴なのだ。なんか高級。
ってんで、なんとかこれで compile が通るところまで持っていけば、一挙に実行環境を Mac と職場の計算センタの二つも手に入れられるのでしばらく追っかけてみた。
と言っても、俺 debugger の使い方知らないし(爆)、そもそもこのプログラムは自分で error handling して正常終了してしまってるんで、どこでコケてるのかすらよく分からん。
で、地道に printf debug で一歩一歩進む。地面に棒を挿しながら地雷原を這い進むくらいゆっくりと……(--;;;
戯れること半日、ついに原因解明
1) XL Fortran では「内部ファイル識別子」に文字部分列名が使えない
2) null clear じゃなくてスペースでクリアしてやる
しかし、 Fortran 的には sscanf での文字列から読み込みも、変数を「内部ファイル」と称することでこなしていることに驚き。この辺が、がちょんと装置を割り当てるメインフレームのイメージだな。
[referer: [an error occurred while processing this directive]]