読者です 読者をやめる 読者になる 読者になる

fortran でよく使うコンパイラオプションのメモ

自分用。あとで書き足す リンク Debugging tools in Fortran Wiki Invoking GNU Fortran - The GNU Fortran Compiler gfortran 牛島先生本で紹介されていたのがキッカケで使い始めた g95 がわりと好きだったんだけど、だいぶ前から開発が止まってる(という…

Fortran で、form="unformatted", access="stream" で wirte されたファイルを read する

前置き natures flyers: Fortran でのバイナリ (unformatted, binary) の扱いについてのメモ では write しか考えてなかった。なぜなら FIELDVIEW という可視化ソフトで読み込むことだけ考えてたので。でも今ちょっと、書きだしたデータを読み込んで処理した…

Fortranで出力したデータを、call system() とシェルスクリプトを使ってその場ですぐに xz で圧縮し、元データは削除する

まえがき 前にも書いたかもだけど忘れそうなのでメモしとく。まず Fortran 側で FV_00001.xyz, ...(グリッド)とか FV_00001.func, ...(流れ場)とか FV_00001.q, ...(時刻)といったファイルを出力している。これらは流れの可視化用のデータで、そのまま…

コードの見直し(リファクタリング?)

機能追加に伴ってコードがゴチャゴチャしてきた。見づらいだけならいいが、さらなる機能追加が容易でなくなってきて、やばい。機能追加が容易なように改良する必要がある。「気象庁コーディングルール(ルビ:バイブル)」を再度見ている。 変数参照型モジュ…

restart方法の見直し

@yuuriiさんにだいぶ前に教わった方法に変更中。すなわち、計算は必ず load で始めて、計算開始か再開かの違いは load する file が「初期条件data」か「途中のdata」かの違いのみとする、ということ。擬似コード的に書くと、 if new game 変数をごちゃごち…

g95で "ld: crt2.o: No such file: No such file or directory" っていうエラーが出たら

ここ http://d.hatena.ne.jp/arakik10/20090213/p1 のコメント欄にあるとおり、ユーザ環境変数に LIBRARY_PATH を C:\g95\lib\crt2.o として追加したら解決した。他のところにインストールした人はとにかく crt2.o のある場所 (path) を設定すればいい。イン…

行列の積 (Fortran 90)

matmul を使うのが正解。例えばこんなコードを書いてみればわかる。 program test_matmul implicit none integer :: l !! 一気に初期化。http://www.nag-j.co.jp/fortran/FI_12.html を参照 real(8) :: mat(3,3) = reshape( (/1.0d0, 2.0d0, 3.0d0, 4.0d0, 5…

ゼロクリアしてなくて死んだ

「配列の上限下限をallocateでなく必要よりも多めにとったとき」は必ずゼロクリアする癖をつけたほうがいい。してなくて maxval が E+286 とかなってて死んでた。たいていはゼロが入ってるんだけどたまにこういう凄いのが入ってくる(メモリの状態に寄るらし…

maxval, maxloc, minval, minloc

前も書いたかもしれないがメモ<いろいろひどかったんで消す>参考: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlf101a.doc%2Fxlflr%2Fmaxval.htm なんかここの表記も(サンプルが)怪しい → まとめ直しておい…

NaNを検出してstop

NaN detect fortran でググるといろいろでてくる。http://www.nag-j.co.jp/fortran/FI_7.html#AUTOTOC_7 http://ftp.g95.org/G95Manual.jp.pdf http://ftp.aset.psu.edu/pub/ger/fortran/hdk/nan.f90g95, ifort では isnan という intrinsic function があっ…

Fortran 90 code on Notepad++で任意の位置で折り畳み

ユーザ定義言語を利用する。ユーザ定義パネルを開いて、「折りたたみ部分開始キーワード設定」と「折りたたみ部分終了キーワード」のところに「!」から始まるキーワードを登録すればいい。たとえば、!!_fold_と!!_endfold_などを登録し、これらをコードの任…

セーブデータの命名

いろいろ考えたけどメンドイのでこんな感じにしようと思う(コードの一部)。 real(8), intent(in) :: t_hat character(len=72) :: file_save write(file_save,"('./restart/t_hat_'i3.3,f9.8,'.sav')") int(t_hat), t_hat ただし、t_hat は羽ばたき周期 t/T…

システムコールとシェルスクリプトを利用して、Fortranのコードから「ディレクトリがなければ作る」を実行

2016-02-28追記 変数を渡せるようにしたこっちの方が良い→ natures flyers: Fortran で call system() するときに変数 (variable) を渡す方法 古い記述 計算実行中のディレクトリが入力する設定ファイルやら出力されるデータやらセーブデータやらでごちゃご…

切り捨て、四捨五入と整数化について

前も書いたかもしれないけど。 参考: http://fortran.hiroshism.com/ref.html 追加: http://nkmrtkhd.blogspot.com/2010/07/fortranintnint.html program test_anint implicit none real(8) :: foo = 7.536d0 write(*,"(2x,' foo = ',f9.4)") foo write(*,…

俺コーディングルール

基本的には気象庁コーディングルールに従う。そこからの modifications や additions について記す。コメントについて コメントは !! で行う。コメントアウトの ! と区別するため。subroutine の call について 必ず全ての引数を = で明示する。順番依存の呼…