こんにちは、ぴよ工房を運営しているぴよ(@piy0_gadget)です!
この記事は、
- Fortran初心者
- 改めて基礎を確認したい
- 他人のコードを見てみたい
といった人が対象です!
コードの例を用いて説明するので本記事で基礎をマスターしましょう!

配列とは?
まずは配列について話していきます!
普通は一つの変数に一つの値しか入れることが出来ませんが、配列を使うことで一つの文字に幾つもの値を入れることが出来ます。
それでは初めに、一つの変数に値を入れていきましょう。
コード例と結果を示しますね。
1 2 3 4 5 6 7 8 9 10 |
Program hairetsu Implicit none Real*8 a a = 2020.0d0 Write(*,*) a Stop End Program |
このように、『a』という変数に2020といった値を入れることが出来ました。
次は配列を使って値を入れていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Program hairetsu Implicit none Real*8 a,b(3) a = 2020.0d0 b(1) = 2020.0d0 b(2) = 4.0d0 b(3) = 25.0d0 Write(*,*) a Write(*,*) b(1),b(2),b(3) stop End Program |
この例では、『b』という配列を使って値を入れました。
配列は番号の付いた箱の中に数字を入れていくイメージを持ってもらえると分かりやすいかなと思います。
また、コードの例ではいわゆる一次元配列というものでしたが、二次元配列というものもあります。
1 |
Real*8 c(2,2) |
この『c』が二次元配列です。
この配列もよく使うので覚えておいてください。
よく使う例としては、数値計算で2次元の計算をしたいときは二次元配列、3次元の計算をしたいときは三次元配列を使います。3次元配列の例もいかに示しておきます。
1 |
Real*8 d(2,2,2) |
配列の更に詳しい使い方は、後述する『繰り返し文(Do文)』に例を書くので、コードを真似して覚えていって下さい。
Open文
これは出力した結果をtextファイルなどに書き出すときに使います。
書き出すための流れとしては、Open文でtextファイルに書き込める状態にしておき、Write文でこのtextファイルに値を書き出します。
イメージ的には、Open文でノートを用意して、Write文でノートに書いてあげるって感じです。
以下にコード例を載せます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Program Open Implicit none Real*8 a Open(10,file='open.txt') a = 2020.0d0 Write(10,*) a Close(10) Stop End Program |
5行目の『Open(10,file='open.txt')』でノートを開き、8行目でそのノートに書き込みました。
コードを実行するとファイル内に『open.txt』が作られると思います。
中身を見てみましょう。
良い感じですね。
ここで、コードのOpen文に『10』という数字がありますが、これは10番目のノートを開き、Write文にある『10』は、この10番目のノートに『a』に入っている値を書き込む、というイメージを持ってください。
このとき数字は基本的に任意で良いですが、10以上にして下さい。
理由は、一桁の数字の中にはfortranの仕様であらかじめノートが割り当てられているものもあるからです。
ちなみにOpenしたらCloseしておいてください。(そこまでこだわる必要もないですが・・・)

繰り返し文(Do文)
次は繰り返し文です。これは名前の通りで、処理を何回も繰り返す、ループさせる命令です。
まずはコード例を載せます。
1 2 3 4 5 6 7 8 9 10 |
Program kurikaeshi Implicit none Integer i Do i=1,10 Write(*,*) i End Do Stop End Program |
基本的には『Do~End Do』内に行いたい処理を書きます。今回の場合だとWrite文です。
ここで、iは1から10まで値を1ずつ増やしながら繰り返していきます。
それではコードを実行して結果を見てください。
確かにiが1ずつ増えているのが確認できますね!
それではDo文の使用例として、1~100までの和を求めるプログラムを組んでみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Program wa Implicit none Integer i,wa wa = 0 Do i=1,100 wa = wa + i End Do Write(*,*) wa Stop End Program |
『wa』に1~100までの和を計算させました。
5行目に『wa = 0』と入れたのは、初期値を与えるためです。これを入れないと結果がバグってしまうことがあるので必ず入れてください。(なぜバグるのかは自分で考えてみてください。分からなければtwitterのDMとかで聞いてくれれば答えます。)
結果を載せておきます。
次に配列を使ったDo文の例を載せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Program do_hairetsu Implicit none Integer i,a(10) Open(10,file='result.txt') Do i=1,10 a(i) = i Write(10,*) i,a(i) End Do Stop End Program |
こういった使い方もできます。これで『a(1)』には『1』が、『a(2)』には『2』が、・・・、『a(10)』には『10』が入りました。
今は一重ループですが、これを二重ループや三重ループといった使い方も出来ます。
例だけ載せておきますね。詳しいことは別の記事で話そうと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Program do2_do3 Implicit none Integer i,j,k Do j=1,10 Do i=1,10 !二重ループ End Do End Do Do k=1,10 Do j=1,10 Do i=1,10 !三重ループ End Do ; End Do ; End Do !こういった書き方も出来ます。 Stop End Program |

条件分岐(If文)
次は条件分岐です。ちょっと名前が難しそうですね。
これは、要するに『ある条件を満たすときに行う処理』です。
ある処理というのは、分かりやすい例だとお腹が空いたときにはご飯たべるみたいな。分かりにくいですかね・・・。
実用的な例だと、『ある時刻を過ぎた時にはデータを出力する』時に使います。
以下にコード例を載せます。
1 2 3 4 5 6 7 8 9 10 11 |
Program bunki Implicit none Real*8 time time = 10.0d0 If (time.GE.5.0d0) Then Write(*,*) 'output data' !処理内容 End If Stop End Program |
今までのものと比べると少し複雑かもしれないですが丁寧に解説していきます!
まず『If~End If』までが一連の処理になります。そして、『If』の直後(横)に条件を書いてあげます。
今回の例だと『(time.GE.5.0d0)』が条件になります。この条件の意味は『timeが5.0以上のとき以下の処理をしてください』となります。
『GE』は『Greater Equal』の略です。この意味としては『A Greater Equal B』=『AがB以上のとき』となります。
これで『(time.GE.5.0d0)』の言いたいことは何となく分かりましたね。
そして、この条件を満たすときは特定の処理、今回の例だと『Write(*,*) 'output data'』になります。
後は書き方の問題なので、型を覚えて使いこなせるようになりましょう。
ちなみに、今回は『GE』と書きましたが、他にも条件を指定する書き方があるので、以下にその一覧を載せておきます。
GE | A Greater Equal B | AがB以上のとき |
GT | A Greater Than B | AがBより大きいとき |
LE | A Less Equal B | AがB以下のとき |
LT | A Less Than B | AがBより小さいとき |
他にも細かなルールや使い方がありますが、まずはこれを覚えてください!

繰り返し文からの抜け出し(Exit文)
最後はおまけみたいな感じです。Do文とIf文が使えればここは難しくないですよ!
まずコード例を載せますね!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Program exit Implicit none Integer t Do t=1,20 Write(*,*) t If (t.GE.12) Then Exit End If End Do Write(*,*) 'Finish' Stop End Program |
コードを見ると『Do文の中にIf文があって、If文の中にExit』とありますね。
ExitというのはDo文からの抜け出しを表しています。
ですので、今回の例だと『tは1~20』までDo文で繰り返されますが、If文により『tが12以上のときExitせよ』と命令され、『Exitによりtは12まで』しか繰り返されません。
こう書くと「なら予めDo文でそう書けよ」って思うかもしれませんが、あくまでもこれは一例です。
実用的な例だと、『誤差が収束したらDo文から抜け出す』といった使い方が多いかなと思います。
まとめ
本記事は前回に続きFortranの基礎文法をコード例を用いて説明しました。
計算をする上ではどれも重要・必須な知識なので、絶対に覚えてくださいね!
疑問があればリプやDMで気軽にどうぞ!

https://twitter.com/piy0_gadget/status/1251079790548807684?s=20