全然更新せずにすいません.抜け殻のようになってました.
気分転換にf03で不等流計算を書いてみました.結構苦労しましたというかかなりの力作です.DBの置きましたので,確認し意見をいただけると幸いです.doxygenもあります.
ハマった点や気になる点を列挙しておきます.
ifortでは拡張子f03が使えない.
ドウジンテイスウ.log — Fortran2003、拡張子問題
module内のPROCEDUREの呼び出し方が独特
- 例えば,module内で,type(section)内に定義したメソッドが以下のような場合は,
SUBROUTINE Cal_SectionProfile(s, H0) CLASS(section),INTENT(INOUT) :: s REAL(8),INTENT(IN) :: H0
メイン文から呼び出す場合,
クラス名%Cal_SectionProfile(H0)
のように,引数の一つ目(クラス名)が省略されます(メソッド名の前に付くため,二重になるからと思います).もし,省略したくない場合は,PROCEDUREの宣言時にNO PASS属性を定義する必要があります.
さらに,今回は使ってないですが,メイン文にINTERFACEを設ける場合は特殊で以下のようにIMPORT文が必要です.当然,INTERFACEの上にUSE文も必要です.
INTERFACE SUBROUTINE Cal_SectionProfile(s, H0) IMPORT section CLASS(section),INTENT(INOUT) :: s REAL(8),INTENT(IN) :: H0 END SUBROUTINE Cal_SectionProfile END INTERFACE
type内の変数にprotected属性が使えない.
- 2003からpublic,privateに加えて,protectedという属性が追加されてます.意味はmodule外からはread onlyになるというものです.オブジェクト指向では非常に便利なので使いたいのですが,type内の変数には使えません.
gfortranがとにかく不完全
- とにかく2003の機能は不安定です.ver5.0台は全然駄目なようなので今回はver4.8でコンパイルしてます.一部駄目な機能もありますが,今のコードでは回るようにしております.
- 2003の機能をフルで使いたいならintelは必須かも.
その他
- 先日の打ち合わせ時の話も徐々に進めております.ちょっと離散化がうまくいかないため,また相談します.