1. HOME
  2. ブログ
  3. Fortranでオブジェクト指向
  4. Fortranでオブジェクト指向

ブログ

Fortranでオブジェクト指向

Fortranでオブジェクト指向

Fortranでオブジェクト指向

Fortranというと一般的には「古い」、「枯れた」、「化石のような」プログラミング言語と考えられていますが
数値解析の分野では間違いなく現役バリバリの言語です。
スーパーコンピュータをはじめとする大規模計算機では第一選択肢ですし、
数値解析を行う上では過去の資産が豊富なFortranは有力です。

FORTRAN77と現在のFortran
とはいえ流石にFORTRAN77で改めてプログラムを書くのは得策ではありません。
過去の資産は引き継ぎつつ、新規にプログラムを各部分はオブジェクト指向プログラミングが
可能な新しいFortranを使うのが得策というものです。
数値解析という意味ではオブジェクト指向でプログラムを書くことそのものは重要では
ありませんが、
・プログラムの可読性
・シンプルな変数名の使用
・変数/サブルーチン/関数アクセスのカプセル化
など様々なメリットを享受できます。

TYPEとClassの使用
Fortranでオブジェクト指向プログラミングを進める場合TYPE定義とClass使用が基本になります。
以下にサンプルプログラムを示します。

MODULE facetMod

TYPE POINT
    double precision x, y, z
END TYPE POINT

TYPE FACET
    TYPE(POINT) pt(3)
CONTAINS
  procedure :: print => print_facet
END TYPE FACET
 
CONTAINS
    subroutine print_facet(this)
    implicit none
    CLASS(FACET), INTENT(INOUT) :: this
    integer i
    character(10), parameter :: header(3) = (/"1st point","2nd point","3rd point"/)

    do i = 1, 3
      write(6,'((a),3(f6.2,1x))') header(i), this%pt(i)%x, this%pt(i)%y, this%pt(i)%z
    end do
    return
    end subroutine print_facet
END MODULE facetMod

program main
USE facetMod
implicit none
TYPE(FACET) afacet

afacet%pt(1)%x = 0.0d0
afacet%pt(1)%y = 0.0d0
afacet%pt(1)%z = 0.0d0

afacet%pt(2)%x = 1.0d0
afacet%pt(2)%y = 0.0d0
afacet%pt(2)%z = 0.0d0

afacet%pt(3)%x = 1.0d0
afacet%pt(3)%y = 1.0d0
afacet%pt(3)%z = 0.0d0

call afacet%print
read(5,*)

stop
end

次回以降の予告
私のようにFORTRAN77ネイティブの方には?が多いプログラムですが
構造体(Type)を使った3つの点をもつ三角形の面(=facet)を扱う
プログラムです。次回以降このプログラムを通して
Fortranでオブジェクト指向のプログラミングをするポイントを紹介します。

関連記事