...

Fortranの基礎(スライド)

by user

on
Category: Documents
21

views

Report

Comments

Transcript

Fortranの基礎(スライド)
コンピュータシミュレーション特論
Fortranプログラミングの基礎
Advanced Course in Computer Simulation:
Basics of Programming in Fortran
機械工学専攻
かくた
なおと
角田 直人
Fortranには様々な命令文や規則があるが、ここでは最小限
の文法について紹介する。その他の文法については書籍
やWEBで調べること。その際、プログラミングしながら、必
要に応じて調べる方がよい。
また、Fortran77に準拠したものを紹介しており、Fortran95で
は他の表現法があることに注意。
プラグラム実行までの手順
(1) 計算式とパラメータの準備
(2) プログラミング (programming)
(3) コンパイル (compile)
(4) ロード・リンク (load and link)
(5) 実行 (execute)
エディタによりソースコードファ
イルをコンピュータ上で作成す
る。(例:EXA1.f)
Fortranコンパイラによりソースコ
ードファイルをコンパイルして、オ
ブジェクトコードファイルを作成す
る。(例:EXA1.obj 又は.o)
オブジェクトコードをロード・リン
クして,プログラムのアブソリュ
ートコードファイルを作成する。
(例:EXA1.exe)
アブソリュートコードを実行する。
エディタによるFORTRAN文の書き方
1 2 3 4 5 6 7…
… 72
1 ␣␣␣␣␣␣PROGRAM␣EXA1
2
:
C ␣this is …
# PROGRAM文で必ず始める
# 1文字目にcを入れるとコメントを書ける(注2)
␣␣␣␣␣␣ END
# END文で必ず終わる
(注1) Fortran95では6文字空白の制限がない場合がある。
(注2) Fortran95ではコメント文には1文字目に ! を用いる。
注意点
以下を間違えない。
・0(ゼロ)とO(オー)
・1(いち)とI(アイ)とl(小文字のエル)
Fortran95はFortran77を部分集合として含んでいる。
宣言文
プラグラムの最初に書く(PROGRAM文の次)。
PARAMETER (…)
REAL
DOUBLE PRECISION
INTEGER
DIMENSION
CHARACTER
暗黙の宣言
A to H → 実数
定数名
実数型(単精度実数型)
倍精度実数型
整数型
配列型
文字列
I to N → 整数
O to Z → 実数
(重要!)
・1つの変数の宣言は1回だけである。重複は不可。
・配列変数は必ず宣言しなければならないが、DIMENSION以外の宣言文でも可能。
DATA文
変数や配列には、プラグラムの実行開始する直前に(宣言文よりも後に)、
値を与えておくことができる。
DATA a1, a2, …, an/c1, c2, …, cn/
→ a1にc1の値が,…, anにcnの値が与えられる。
配列では
DATA (DX(I), I=1,11)/0.0100, 9*0.020, 0.0100/
という記述もできる。
・DATA文は分かりやすいが、ソースプログラム中にパラメータ値を指定するのは適
切ではない。READ文で外部ファイルから読み込む方がよい。
繰り返し計算(DO文)
IMAX = 10
A(1) = 1.0
#初期値が必要
DO 100 I = 1, IMAX
A(I + 1) = A(I) + 0.1
100 CONTINUE
:
2回(2重)の繰り返しの場合
DO 110 I = 1, NI
DO 120 J = 1, NJ
A0(I, J) = A1(I, J) + A2(I, J)
120 CONTINUE
110 CONTINUE
:
もしくは
DO 110 I = 1, NI
DO 110 J = 1, NJ
A0(I, J) = A1(I, J) + A2(I, J)
110 CONTINUE
:
IF文
論理式を用いて、それが真(True)のときと偽(
False)のときで異なる処理を選択し実行するこ
とができる。
・ブロックIF文(右図参照)
IF(e1) THEN
ELSE IF(e2) THEN
ELSE
END IF
・論理IF文(1行のみ実行)
IF(e) S #Sは1行の実行文
これは次のように書いたのと同じ:
IF(e) THEN
S
END IF
原田,Fortran77プログラミング,サイエンス社(1986).
論理演算子と関係演算子
・論理演算子
.NOT. :否定
.AND. :論理積
.OR. :論理和
・関係演算子論理IF文(1行のみ実行)
<
<=
==
/=
>=
>
または .LT. :より小さい(Less Than)
または .LE. :より小さいか等しい(Less than or Equal to)
または .EQ. :等しい(EQual to)
または .NE. :等しくない(Not Equal to)
または .GE. :より大きいか等しい(Greater than or Equal to)
または .GT. :より大きい(Greater Than)
例:
IF(A .GT. 3.0 .OR. A. LT. –2.0) GO TO 10
→ A > 3.0 または A < –2.0のとき文番号10へ。
出力文
モニタへの出力例(2次元の例):
DO 100 I = 1, NI
DO 110 J = 1, NJ
WRITE(6, *) T(I, J) # 装置指定子が6(もしくは*) はモニタ出力
110 CONTINUE
100 CONTINUE
・2番目の*は書式指定(*は任意書式で変数の型に合わせて出力される)。
ファイルへの出力
ファイルへの書き込みにはOPEN文とCLOSE文を用いる。
OPEN (20, FILE = ‘result.dat')
:
カレントディレクトリにこの名前の
ファイルが作成される。
DO 100 I = 1, NI
DO 110 J = 1, NJ
WRITE (20,*) T(I, J)
110 CONTINUE
100 CONTINUE
:
CLOSE(20)
・装置指定子(ここでは20)は任意の番号でよいが、既定値に注意。
・OPEN文とCLOSE文は1対1に対応していなければならない。
書式指定
書式指定はWRITE文での直接指定もしくはFORMAT文指定。
WRITE (*, ’(/10X, F7.2)’ ) T(I, J)
もしくは
WRITE (*, 200) T(I, J)
200 FORMAT(/10X, F7.2)
/ : 1行空ける。
X: 1文字空ける。
F: 小数型(固定小数点)
E: 実数型(浮遊小数点)
I: 整数型
A: 文字型
入力文
キーボードからの入力例:
READ(5, *) ALAMD # 装置指定子が5(もしくは*) はキーボード入力
・2番目の*は書式指定(*は任意書式で変数の型に合わせて入力される)。
ファイルからの入力
ファイルからの入力にはOPEN文とCLOSE文を用いる。
OPEN (21, FILE = ‘parameter.dat')
:
カレントディレクトリにこの名前の
ファイルが存在する。
:
READ (21,*) ALAMD, RHO, SPH
:
CLOSE(21)
・装置指定子 (ここでは21) は任意の番号でよいが、既定値に注意。
・OPEN文とCLOSE文は1対1に対応していなければならない。
・書式指定は、出力と同様。
CALL文
サブルーチン副プログラムを呼び出す。
PROGRAM EXA2
:
:
CALL GLU(AA, NIJ, NDIJ, BB, ...)
:
引数を与える。主プログラムで宣
言されていること。型や精度はサ
:
ブルーチンからの指定に従う。
END
主プログラム
C
SUBROUTINE GLU(A, N, N1, B, ...)
:
:
END
サブルーチン副プログラム
*主プログラムと同じファイル内
に付加しておけばよい。提供され
た既製のプログラムの場合、中
身は変えてはいけない。
Fly UP