問題タブ [allocatable-array]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - f2py のモジュールから割り当て可能な配列を使用する
の割付け配列に問題がありますf2py
。以下のコード ( に格納されていますmymod.f90
) では、2 つのモジュールを作成vars
しましたworker
。
vars
配列を格納して割り当てますb
worker
からこの配列を操作するためのサブルーチンが含まれていvars
ます。
最初のworker
サブルーチンは、スカラーを に追加しb
ます。これは期待どおりに機能します。問題は、一致する最初の次元のベクトルを配列に追加する次のルーチンにありb
ます。実装されたサブルーチンは機能しますadd_vector2
が、入力の次元をvector
渡す必要があります。
必要なのは、コメントアウトされた subroutine のように、引数として vector のみを持つサブルーチンadd_vector1
です。ただし、これは でコンパイルされませんf2py
(ただし、 で動作しgfortran
ます)。
コードは次のとおりです。
これはでコンパイルできます
パイソンでは:
どうすればadd_vector1
(同じ引数/呼び出しで) を操作できf2py
ますか?
編集1:
これは からのエラー メッセージですf2py
:
編集2:
1 つのオプションは、次のようなラッパーを作成することwrapper.f90
です ( )。
ただし、これを でコンパイルすると、コンパイルできないf2py -m wrapper -c mymod.f90 wrapper.f90
という同じ問題が発生します。全体が拡張機能として使用できるはずです。f2py
mymod.f90
numpy
string - Fortran で名前リストを使用して割り当て可能な文字列を読み取る
Fortran 2003 以降、可変長文字列を扱うことが可能になりました。古風な方法で作業して一定の文字列長を宣言する代わりに、名前リストの文字列を動的に読み取りたいと思います。
プログラムを検討する
そして、次の namelist.txt ファイルに含まれる小さな名前リスト:
アグレッシブなデバッグ フラグを指定して GCC 8.2.0 でコンパイルすると、
実行時に何も出力されず、次のようになります。
Intel コンパイラ 17.0.6 では、同様のデバッグ フラグがあり、コンパイル時フラグがなく、次のランタイム エラーが発生します。
これは、名前リスト機能が可変長文字列を「単独で」割り当てることができないことを示しています。
エラーが消えます。これは予想される動作ですか?それともコンパイラの欠陥ですか?
fortran - 配列代入で割り当てられていない割付け配列を使用する
Fortran では、配列代入で割り当てられていない割付け配列を使用すると、実行時エラーが発生することが予想されます。しかし、割り当て中に割り当て可能な配列が割り当てられたことがわかりました。これは危険な設計のようです。誰かがこのデザインの理由を説明できますか? コード例は次のとおりです。
上記のコードを gfortran でコンパイルしました。コードを実行するden_i_right
と、同じ形状の配列になることが示されますa
pointers - 割り当て可能な属性またはポインター属性を持つ無制限のポリモーフィック仮引数?
私が取り組んでいるプロジェクトでは、新しいオブジェクトが作成され、古いオブジェクトが破棄されるときに、オブジェクトの配列のサイズを頻繁に変更する必要があることに気付きました。これは、コード全体で多数の異なる派生型で発生し、そのほとんどは相互に関係がありません。これらの配列のサイズを固有の派生型に合わせて変更するコードを書くのは面倒なので、派生型配列がそれらのサブルーチンを使用できるように、無制限のポリモーフィック仮引数を使用していくつかのヘルパー サブルーチンを作成してみようと考えました。
私が見つけたのは、私の無制限のポリモーフィック ルーチンをコンパイルして で呼び出すことができるということCLASS(*),INTENT(INOUT) :: val
です。この仮引数は、整数、割り当て可能な整数、または整数へのポインターを受け入れます。ALLOCATABLE
ただし、または属性を追加しようとするとすぐにPOINTER
、サブルーチンは正しくコンパイルされますが、コンパイラ エラーを取得せずに呼び出すことはできません。私の目標は派生型の配列のサイズを変更できるようにすることなので、これらの属性は、ルーチンが値を割り当て解除/割り当て/関連付けできるようにするために必要です。
実際に何もしようとせず、コンパイルに失敗するテスト コードを次に示します。このバージョンではスカラーの具象型を使用していますが、具象型の配列または派生型の配列を使用する元のコードでも同じエラーが発生します。
示されているように、コードは次のエラーを生成します。
エラーで指定された 2 行をコメント アウトすると、次の正しい出力が得られます。
私は Fortran コードを広範囲に記述してきましたが、これまで無制限のポリモーフィズムを使用しようとしたことはありません。私がやろうとしていることが可能かどうか、もしそうなら、私が間違っていることを教えてください。
私は gfortran コンパイラ 5.4.0 を使用しています。これは、私が知る限り、無制限のポリモーフィズムを完全にサポートする必要があります。