Fortran

【マンデルブロー集合で学ぶFortran入門】繰り返し(do文)と制御構文(if文)

こんにちは(@t_kun_kamakiri

本記事ではFortranの変数とデータの型について解説を行います。

実例を交えながら確認した方が理解しやすいし、何より楽しいと思うのでこちらに書いた「マンデルブロー集合」のコードを例に確認していくことにします。

環境

  • WSL(ubuntu 20.04.4 LTS)
  • gfortran 9.4.0
  • paraview

マンデルブロー集合のFortranコード

全体のコードがこちら。

こちらを実行することでマンデルブロー集合を再現できます。

コードはそこまで長くないのでべた書きしていますが、追々改良を進めていきます。

繰り返し文(do文)

Fortranの繰り返し文(do文)の基本構文は以下のように記述します。

本コードでの繰り返し文は以下の部分です。

ここではx,y,z,cに対しては以下の配列を定義しているので、アクセスする際にはdo文を使って繰り返し構文を書いています。

ここで一点注意ですが、Fortranの配列の並び順がarray(1,1),array(2,1),array(3,1),array(4,1),array(1,2)・・・・であるため以下のように1つ目の要素から順番にアクセスをしていった方が効率が良いプログラムになります。

Fortranでの離れたメモリアクセスは実行速度が落ちる

では、実際に「離れたメモリでアクセス」と「メモリの並び順でアクセス」でCPUでの実行速度を計測してみましょう。

結果はこちらです。

まずwrite(*,*)aで出力した結果が 11 21 12 22となっていることに注意します。
これはarray(1,1),array(2,1),array(1,2),array(2,2)の並び順で配列ができていることを意味しています。

そして結果について、

  • 離れたメモリでアクセスした場合:CPU time = 1.0399999999999993E-004
  • メモリの並び順でアクセスした場合:CPU time = 3.7999999999999839E-005

となり、計算時間は1/3になっています。

今回のような小さな配列では大した差は出てこないですが、3次元配列、4次元配列となるにつれて離れたメモリへのアクセスは実行速度を落とすことになります。

制御構文(if文)

Fortranでのif文の基本構文は以下のようになります。

本コードでの制御構文は以下の部分です。

参考書

Fortranは日本の書籍がかなり少ないのですが以下のようなサイトがあり、とても参考になります。

その他出版されている参考書を挙げておきます。

数値計算のためのFortran90/95プログラミング入門(第2版)

数値計算のためのFortran90/95プログラミング入門(第2版)

牛島 省
3,465円(11/21 14:11時点)
Amazonの情報を掲載しています

こちらの参考書は文法からちょっとした応用(偏微分方程式を解く)まで解説がありFortranを使う人にとって手元に置いておきたい参考書ですね。OpenMPによる並列計算の解説もあります。
しかし、Fortran90/95の記述のみなのでForran2003以降を学ぶにはやはり上記のサイトを参考にした方が良いでしょう。

Fortran ハンドブック

Fortran ハンドブック

田口俊弘
3,450円(11/21 02:43時点)
発売日: 2015/07/22
Amazonの情報を掲載しています

こちらはFortranのコード集となっています。
Fortranは科学計算のためのプログラミング言語ですので数値計算の参考コードがいっぱい載っているこちらの参考書はとても勉強になります。
Fortran文法の解説はありませんが、数値計算の勉強にはとても良いです。

C & Fortran 演習で学ぶ数値計算

C & Fortran 演習で学ぶ数値計算

片桐 孝洋, 大島 聡史
2,970円(11/21 17:14時点)
Amazonの情報を掲載しています

こちらはC言語とFortranの両方を学びながら数計算の基礎力を身に付けるための参考書です。問題演習の全てにサンプルコードがあるため本書を読みながらサンプルコードをじっくり眺めるだけでも大変力が付きます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です