Top Banner
Fortran 勉強会 辻野 智紀
23

Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Oct 18, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran 勉強会

辻野 智紀

Page 2: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

目次

Fortran の基本的な書き方 変数の宣言

− 実数・整数・複素数− 配列

結果の入出力 実際に計算する

− 複素数の計算− 円周率の計算− フーリエ級数展開

Page 3: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

その前に

• 今回, いくつかプログラムを作ります.• 以下の URL から, データファイルをダウンロー

ドして下さい.– http://rain.hyarc.nagoya-

u.ac.jp/~satoki/main/calc/Nagoya-Fortran/seminar-1.tar.gz

Page 4: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran プログラムの作成

● 必要なもの– コンパイラ

• ifort, gfortran, frt, pgfrt, g95

– ソースファイル• 拡張子 .f, .f90• 今回は Fortran 90 をベース.

● プログラム作成手順– ソースファイルの作成.– コンパイラによるコンパイル.– 実行ファイルの作成.

Page 5: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran の基本的な書き方● 基本的な流れ

– メインプログラム宣言(1)– (必要ならば)モジュールの読み込み(2)– 変数の宣言(3)– 実際の処理(4)– (必要ならば)内部手続き(5)

Page 6: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran の基本的な書き方

メインプログラム

モジュール読み込み

変数宣言

実際の処理

内部手続き

Page 7: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

変数の宣言

実数型 (real) 整数型 (integer) 複素数型 (complex) 論理型(logical) 文字型 (character)

– 宣言 : character(文字数) 構造体(後で詳しく)

Page 8: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

変数の宣言

実数型 (real)– a = 1.0, b = 2.0, …

整数型 (integer)– a = 1, b = 2, …

文字型(character(10))– a = 'hogehogeho'

論理型(logical)– a = .true.

複素数型 (complex)– a = (1.0,1.0), b = (0.0,1.0), …– 複素数変数の場合,

• (実部, 虚部)

Page 9: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

実数型に関して

単精度− メモリ上で 1 つの番地に収まる大きさ− 宣言 : real a, b, …

倍精度− メモリ上で 2 つの番地に収まる大きさ− 宣言 : real(8) a, b, …

倍精度の方が, より多くの数値を扱える− 円周率では

単精度 : 3.141592 倍精度 : 3.14159265358979

Page 10: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

配列の宣言

宣言 : – [変数型], dimension(要素数) :: a– [変数型] :: a(要素数)

多次元配列– [変数型], dimension(要素数1,要素数2) :: a– [変数型] :: a(要素数1,要素数2)

Fortran での配列順番– 要素数1 の方が要素数2 より先に格納される.

Page 11: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran の基礎的な処理

演算子– + : 足し算– ー : 引き算– * : 掛け算– / : 割り算– ** : べき乗

優先順位– ** > *, / > +, ー

比較– >, < : (greater, less) than– <=, >= : (greater, less) equal– ==, /= : equal, not equal– .eqv., .neqv. : 論理比較 (equivalent,not equivalent)

Page 12: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran の基礎的な処理

処理命令− ループ(繰り返し)

do i=(from), (to), (step) 繰り返す処理end do

− 条件(判断)if(条件)then 条件が成り立つときの処理else 条件が成り立たないときの処理end if

Page 13: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Fortran の基礎的な処理

処理命令− 条件付きループ

do while (条件) 条件が満たされる間繰り返す処理end do

− 複数条件select case (変数)case (条件1) 条件1 が成り立つときの処理case (条件2) 条件2 が成り立つときの処理end select

Page 14: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

その他の基礎的な処理

Page 15: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

結果の入出力(端末)

出力 : write− write(*,*) a, '文章'

入力 : read− read(*,*) a, b

Page 16: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

結果の入出力(ファイル)

ファイル出力装置の宣言open(unit=装置番号, file=ファイル名, status=) write(装置番号,フォーマット) [書き出すデータ] read(装置番号,フォーマット) [読み込むデータ]close(unit=装置番号)

• status– unknown, new, old

– フォーマット• '(f5.1)' => 実数(float) で負号を合わせて 5 文字, 小数点以下 1 文字.

• '(i8)' => 整数(integer) で負号を合わせて 8 文字.

Page 17: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

結果の入出力(ファイル)

装置番号 (ファイルに出力する場合は以下の番号以外を使用)– 0 番:標準エラー出力 (F90 では 102 番も)

– 5 番:標準入力 (F90 では 100 番も)

– 6 番:標準出力 (F90 では 101 番も) status

– unknown : ファイルの有無に関わらず開く.

– old : ファイルが存在している場合に開く.

– new : 新しくファイルを作成して開く. iostat (エラー判定)

– 書式• open(...., iostat=変数,...)

• read(..,iostat=変数)

– 正常に read できれば“変数=0”が, できなければ 0 以外が代入される.

Page 18: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

実際に計算して見ましょう

Page 19: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

複素数の計算

変数を適切に定義し, 以下を計算させる– 実部, 虚部– 共役複素数– 自身と共役複素数の積– 自身と共役複素数の和, 積

詳しくは, 配布資料参照

Page 20: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

円周率の計算

• ライプニッツの公式を用いて計算する• 任意の項数まで計算できるように,実行時に計算する項数をこちらで指定する• 単精度と倍精度を作成する• 詳しくは, 配布資料参照• 完成したら, この公式以外の方法で円周率を計算させてみてもいいかも

Page 21: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Advanced : フーリエ級数展開

• f(x)=±1, (-π<x<π) をフーリエ展開する• 展開係数は事前に計算しておく(配布資料).

• 展開項数は任意に指定できるようにする.• 詳しくは, 配布資料参照.

Page 22: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

Advanced : ゾンデデータの処理

• 実際のゾンデデータから高度, 気圧, 温度を読み込み, 各高度における温位を計算するプログラムを作ってみましょう.

• 計算した温位は別のファイルにテキスト形式で出力してみましょう.

Page 23: Fortran 勉強会 - IT pass (Informational Training ...fourtran/Nagoya-Fortran/seminar-1/... · • ifort, gfortran, frt, pgfrt, g95 – ソースファイル • 拡張子 .f, .f90

参考資料

• http://www.nag-j.co.jp/fortran/index.html– Fortran 入門