この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
fortran:tips [2015/03/03 12:36] saito [makefileでコンパイル その2] |
fortran:tips [2017/10/03 12:55] (現在) |
||
---|---|---|---|
ライン 2: | ライン 2: | ||
* intelのコンパイラは[[fortran:ifort]]参照のこと. | * intelのコンパイラは[[fortran:ifort]]参照のこと. | ||
* [[http://www.owlnet.rice.edu/~ceng303/manuals/fortran/]] が役に立ちそう. | * [[http://www.owlnet.rice.edu/~ceng303/manuals/fortran/]] が役に立ちそう. | ||
+ | * | ||
+ | |||
+ | ===== よくある間違い ===== | ||
+ | コーディングにおいてよくある間違いをまとめる. | ||
+ | |||
+ | ==== べき乗の順序 ==== | ||
+ | <nowiki>計算の優先順位は | ||
+ | +- < */ < ** | ||
+ | である.</nowiki> | ||
+ | <code fortran> | ||
+ | print*,-1**0 | ||
+ | </code> | ||
+ | <nowiki> | ||
+ | これは-(1**0)と解釈されるので,出力結果は−1. | ||
+ | -1に対してべき乗する場合は,(-1)**0. | ||
+ | </nowiki> | ||
+ | |||
+ | ==== 論理演算の順序 ==== | ||
+ | <nowiki> | ||
+ | 論理演算子の優先順位は | ||
+ | .eqv., .neqv. < .or. < .and. < .not. | ||
+ | である. | ||
+ | </nowiki> | ||
+ | <code fortran> | ||
+ | logical :: a=.false. | ||
+ | num :: i=1 | ||
+ | if(a.eqv..false..or.i==1) then | ||
+ | print*,'if' | ||
+ | else | ||
+ | print*,'else' | ||
+ | end if | ||
+ | </code><nowiki> | ||
+ | これは,a.eqv.(.false..or.i==1) と解釈される. | ||
+ | (.false..or.i==1) はtrueなので,上のコードはelseを吐き出す. | ||
+ | 前後の条件をorでつなぐ場合は, | ||
+ | if((a.eqv..false.).or.(i==1)) としてカッコで順序を明示する. | ||
+ | </nowiki> | ||
+ | |||
+ | ちなみに | ||
+ | * (.ture..or..false.)は.true.(どちらかが真なのでtrue) | ||
+ | * (.ture..and..false.)は.false.(どちらも真でないのでfalse) | ||
+ | になる. | ||
+ | ===== allocated ===== | ||
+ | すでにallocateしたかどうかわからない時は,allocatedで確かめてからallocateする. | ||
+ | https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gfortran/ALLOCATED.html | ||
+ | <code fortran> | ||
+ | if (allocated(x).eqv..false.) allocate(x(n)) | ||
+ | </code> | ||
+ | ===== construct name ===== | ||
+ | 入れ子のループで,cycleやexitを使って外側に飛びたいときは,do ループにラベルをつける. | ||
+ | これで文番号を付けずに好きなところへ飛べる. | ||
+ | - do の前にラベルとコロンをつける. | ||
+ | - cycleやexitの後にラベルをつける. | ||
+ | - end do の後ろにラベルをつける. | ||
+ | 例 | ||
+ | <code fortran> | ||
+ | outer : do i=1,n | ||
+ | do j=1,n | ||
+ | if(...) cycle outer | ||
+ | end do | ||
+ | end do outer | ||
+ | </code> | ||
+ | |||
+ | |||
===== 読み込み専用,書き込み専用で開く ===== | ===== 読み込み専用,書き込み専用で開く ===== | ||
読み込み専用で開く場合. | 読み込み専用で開く場合. | ||
ライン 47: | ライン 111: | ||
===== makefileでコンパイル その2===== | ===== makefileでコンパイル その2===== | ||
+ | |||
+ | 以下の記事は古い.[[fortran:makefile|別のページ]]を参照せよ. | ||
+ | |||
moduleファイルを含む場合,依存関係をはっきりさせる必要がある. | moduleファイルを含む場合,依存関係をはっきりさせる必要がある. | ||
依存関係を変えるたびにmakeファイルを書き変えるのは面倒なので,依存関係を見てくれる | 依存関係を変えるたびにmakeファイルを書き変えるのは面倒なので,依存関係を見てくれる | ||
ライン 279: | ライン 346: | ||
$ sh hoge.sh | $ sh hoge.sh | ||
</code> | </code> | ||
- |