Fortran

Fortran入門

コードを実行し、計算結果とコンパイラーの警告を確かめながら、数値計算に強いFortranを基礎から学びましょう。

GNU Fortran(gfortran)とFortran 2018相当の書き方を対象にしています。

Fortran入門の講座一覧

Fortranの導入

このページの例は、Fortranのソースファイルをgfortranというコンパイラーで実行ファイルへ変換してから動かします。まず下のOS別コマンドでgfortranを用意し、ターミナルでgfortran --versionを実行してください。

sudoは管理者権限で実行するため、実行時にユーザーのパスワードを求められることがあります。「コマンドが見つかりません」と表示された場合は、ターミナルを開き直し、01 環境構築と最初のプログラムの手順を上から確認してください。

00

最初にgfortranを準備する

上の案内でgfortranをインストールしたら、学習用フォルダーを作って確認します。gfortranはFortranのソースコードを、OSで実行できるファイルへ変換するコンパイラーです。

確認コマンド

mkdir fortran-study、cd fortran-study、gfortran --versionの順に実行します。バージョン番号は環境で変わります。番号付きコマンドしか使えない場合は、たとえばgfortran-16 --versionで確認し、以降のgfortranをその名前に読み替えます。

01

Fortranとは

Fortranは、科学技術計算、数値シミュレーション、気象、物理、化学などで長く使われているプログラミング言語です。現代のFortranには配列演算、モジュール、派生型、C言語との連携などがあります。

この講座の方針
  • 最初からimplicit noneを書き、暗黙の型宣言を避ける
  • ソース、コンパイルコマンド、実行結果を順番に確認する
  • 配列の形、数値型、計算精度を意識する
  • エラーと警告を読んで修正する

古い固定形式のコードを読む場面はありますが、新しく書く例では自由形式の.f90ファイルを使います。

02

最初のプログラム

hello.f90FORTRAN
program hello
    implicit none
    print *, 'Hello, Fortran!'
end program hello
コンパイルと実行結果COMMAND / OUTPUT
gfortran -std=f2018 -Wall -Wextra hello.f90 -o hello
./hello
 Hello, Fortran!

programとend programでプログラムの範囲を示し、print *で標準出力へ表示します。詳しい環境構築は環境構築と最初のプログラムで確認できます。

03

データと計算

整数はinteger、実数はreal、真偽値はlogical、文字列はcharacterで宣言します。宣言と代入を分け、入力値の型を意識することが基本です。

型を宣言して計算するFORTRAN
program calculate
    implicit none
    integer :: count
    real :: price, total
    count = 3
    price = 120.0
    total = count * price
    print *, '合計:', total
end program calculate
実行結果OUTPUT
 合計:   360.000000

変数、演算子、if、doの詳しい使い方は変数・型・入出力と条件分岐と繰り返しで学びます。

04

配列と数値計算

Fortranの重要な特徴は、配列全体に対して計算を書けることです。sum、minval、maxval、sizeなどの組み込み関数も数値処理で活躍します。

配列の平均FORTRAN
program average
    implicit none
    real :: values(4) = [10.0, 20.0, 30.0, 40.0]
    print *, sum(values) / real(size(values))
end program average
実行結果OUTPUT
   25.0000000

配列の添字、スライス、2次元配列、行列計算は配列と数値計算で扱います。

05

処理を分割する

関数は値を返し、サブルーチンは複数の引数を使った処理をまとめられます。さらにモジュールへ手続きや型を分けると、複数のプログラムから安全に再利用できます。

読み進める順番

まず関数の引数と返り値、次にintent(in)などの引数属性、最後にモジュールと複数ファイルのコンパイルへ進みます。

詳しくは関数・サブルーチン・モジュールと派生型・再利用・ビルドを参照してください。

06

練習と発展

最後に、入力した数値の統計、ファイル集計、行列の計算を練習します。解答を写すだけでなく、入力値や配列の大きさを変え、予想した結果と実際の結果を比べてください。