Fortranの構造体(TYPE)をC++で扱う

Fortranへのデータの取り回しは、C言語と同じように構造体を使うとok。C++ならばクラスを使いたいところなのだが、Fotranで扱うことはできないので構造体(TYPE)で。

module structmodule
    implicit none
    ! struct define
    type F3D
        double precision :: x,y,z
    end type F3D
contains
    ! struct parameter
    double precision function flen( pt )
        type (F3D) pt
        flen = sqrt( pt%x**2 + pt%y**2 + pt%z**2 )
        return 
    end function
end module structmodule

Fortranの構造体は TYPE で定義して、メンバ変数には「%」を使って参照する。

構造体はC言語側でもう一度定義しないさないといけない。

// 構造体を呼び出す
extern "C" {
	struct F3D {
		double x,y,z ;
	};
	double STRUCTMODULE_mp_FLEN( struct F3D *pt );
}

型だけを合わせれば OK で、メンバ変数名は自由につけてよい…が、同じようにつけたほうが良かろう。
関数の引き数に使う場合は、integerの変数と同じようにポインタにする。

function の戻り値に構造体を使うことも可能だと思うのだが、メモリ関係がややこしくなりそうなので構造体のデータ受け渡しは、引数で行ったほうが無難。

カテゴリー: 開発, Fortran パーマリンク