趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

コーディングルール

多少まとめました。 誤字脱字等あるかもしれませんので、修正を書けるつもりです。

あと、一般的なもとの差があるかもしれませんが、 基本的には、「ルールを守って記述する」というのが一番重要です。

文字の取り扱い

キーワードはすべて大文字

基本的にはfortran90のキーワードは大文字で表記する。 以下、以外にもあるので注意。

INTEGER
REAL(8)
SUBROUTINE
END DO
DO
END
ALLOCATE
IMPLICIT NONE
MODULE
SAVE
USE
.etc

モジュール名は頭文字を大文字

# 宣言
MODULE Globals
END MODULE

# 呼び出し
USE Globals

定数はすべて大文字

単語のつなぎは、「_」(アンダーバー)とする。

# 定数
REAL(8),PARAMETER :: WATER_DENSITY = 1.0D0
INTEGER,PARAMETER :: IMAX = 100

変数名は頭文字小文字

変数名の頭文字は小文字とし、単語のつなぎはキャメル式とする。 (アンダーバーのつなぎにする場合は、統一する)

# 変数
REAL(8), x,y = 1.0D0
INTEGER, flagOfCal = 0

モジュールは基本的に3つとメイン文

1.グローバル変数と定数

# 例えば、Globalsというモジュールに入れる場合
MODULE Globals
    # グローバル変数
    REAL(8), ALLOCATABLE, SAVE, DIMENSION(:,:) :: pressure
    # 定数
    REAL(8),PARAMETER :: WATER_DENSITY = 1.0D0
    INTEGER,PARAMETER :: IMAX = 100
END MODULE

# 呼び出し
USE Globals

2.サブルーチン群

# 例えば、Sub1というサブルーチンを作成する場合
SUBROUTINE Sub1(imax,x)
    # モジュールの読み込み
    USE Globals
    # 必ず宣言
    IMPLICIT NONE
    # インテント文を入れて、引数を宣言
    INTEGER,INTENT(IN) :: imax
    REAL(8),INTENT(INOUT) :: x
    # サブルーチン内で利用するローカル変数の設定(カウンター等)
    INTEGER I,J,K
    # 以下処理の記述
END SUBROUTINE

# 呼び出し
CALL Sub1(imax,x)

3.ファンクション群

# 例えば、Sub1というサブルーチンを作成する場合
FUNCTION INTEGER func1(a,b)
    # モジュールの読み込み
    USE Globals
    # 必ず宣言
    IMPLICIT NONE
    # インテント文を入れて、引数を宣言
    INTEGER,INTENT(IN) :: a,b
    # 以下処理の記述
    func = a + b
END func1

# 呼び出し
INTEGER sum
sum = func1(1,1)

FUNCTIONは数が多くなる可能性があるので、必要に応じて、インターフェイスモジュールを使う。 後ほど記述予定。

4.メイン文

基本的には、時間積分を記述するものとする。

PROGRAM MAIN
    # モジュールの読み込み
    USE Globals
    # 必ず宣言
    IMPLICIT NONE
    # ローカル変数
    INTEGER TMAX
    INTEGER T
    # 初期条件、パラメータの設定
    T = 0
    # 以下、時間積分の処理
    DO
        # 連続式
        # 運動方程式
        # 境界条件
        # 乱流モデル
        # 河床変動等々
        T = T + 1
        # 出力関連
        CALL OutPut
        IF(T .GE. TMAX) EXIT
    END DO
END PROGRAM

その他

makefileを作成

必要であれば、記述。

実行時のオプションがあれば明記

必要であれば、記述。

インデントは半角スペース4つ

普通は2文字であるが、コードの見やすさのために、あえてスペース4つとする。 f90であれば、列の制限はないので、問題ないかと。

タブは使わない。

小数点の値を記述するときには「d0」を付けること

小数の精度を考えて、「d0」を付ける。

サブルーチンにおいて、引数を持たせる場合は、INTENT文を入れること。

サブルーチンの引数の取り扱いを明確にするために付ける。

書き換えてはいけない変数を書き換えてしまうのを防止する。

IMPLICIT NONEを宣言すること。

変数は宣言してから使うものとする。

組み込み関数は大文字にする。

標準の関数については大文字とする。

見た目で、組み込み関数か、自作関数かを明確にするため。