2

私はPythonから使用可能にする必要がある長いFortranコードを持っています。私はFortran->C->Pythonインターフェースを実行することにしました。

問題が発生しました:Fortranモジュール内に次のような派生型があります

double precision, allocatable  

メンバーとして入力します。

ifortでコンパイルしようとすると、(gfortranで似たようなものが)得られます:

Each component of a derived type with the BIND attribute shall be a nonpointer,         
nonallocatable data component with interoperable type and type parameters

これは、実際にはIntelコンパイラのドキュメントおよびFortran2003標準のポイント15.2.5と一致しています。

内部に割り当て可能またはポインタを使用してFortranの「タイプ」にアクセスする方法はありますか?

4

1 に答える 1

0

あまり。真新しいTS 29113でさえ 解決策を提供しません。ただし、Cで構造をデコードする方法を知ってTYPE(*)おく必要があります。リバースエンジニアリングで行うことができます。

実際には、参照される TS の構造体のサイズのマクロがあります。を参照してくださいCFI_attribute_allocatable。しかし、逆参照の問題は残ります。標準の配列記述子が提案されていますが、この TS は一部のコンパイラ (特に gfortran) ではまだサポートされていません。

可能なことは、構造体へのポインターを などの汎用関数に渡すことqsortです。次に、たまたまポインタまたは割り当て可能な記述子も含むメモリの一部を使用しますが、C はそれらについて知る必要はありません。

もう 1 つの可能性はtype(c_ptr)、Fortran ポインタの代わりに ,のみを保持する派生型を構築し、c_loc()それらを埋めるために使用することです。その場合、連続した配列のみを持っていることを確認してください。

于 2012-12-06T18:17:11.613 に答える