ユーザ用ツール

サイト用ツール


fortran:tips

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
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>​
- 
fortran/tips.1425353774.txt.gz · 最終更新: 2017/10/03 12:55 (外部編集)