問題タブ [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.
fortran - サブルーチンで派生型のコンポーネントを割り当てるには、明示的なインターフェイスが必要ですか?
私は派生型を持っています:
bar
ここで、明示的なインターフェイスを使用せずに、サブルーチン内で のデータを割り当てたいと思います。
これは で問題なく動作ifort
するようですが、mybar がユーザー定義型の一部ではない場合、明示的なインターフェイスが必要になることはわかっています...割り当て可能な配列をユーザー定義型に配置すると、明示的なインターフェイスの必要性がなくなりますか? このコードと互換性のある Fortran 標準のバージョン (F90、F95、F2003 ...) がある場合、どのバージョンですか?
multidimensional-array - サイズの配列から配列を割り当てます
次のように宣言された次元の配列があるとします。
dims
の要素を使用してそれぞれの次元のサイズを指定して、この配列を最も簡単に使用して別の配列を割り当てるにはどうすればよいですか? 2 番目の配列が次のように宣言されているとします。
次のことができないのはなぜですか?
Error: Rank mismatch in array reference
コンパイルしようとすると取得します。
私はこれを行うことができることに気づきました:
しかし、私はもっと簡単に拡張できるものを探しています。
c++ - C での Fortran 割り当て可能メモリの割り当て
従来の Fortran コード (+100,000 行のコード) のメモリ割り当てを C++ で引き継ごうとしています。これは、クラスタ上の分散メモリの分割と割り当てに C ライブラリを使用しているためです。割り当て可能な変数は、モジュールで定義されます。これらのモジュールを使用するサブルーチンを呼び出すと、インデックスが間違っているように見えます (1 つシフトされます)。ただし、同じ引数を別のサブルーチンに渡すと、期待どおりの結果が得られます。次の簡単な例は、この問題を示しています。
こんにちは.f95:
main.cpp
以下でコンパイルしています:
実行中の出力 ./main は
ご覧のとおり、A の出力は異なりますが、両方のサブルーチンが A(1) と A(2) を出力しました。したがって、HELLO は A(1) ではなく A(0) から始まるようです。これはおそらく、Fortran で ALLOCATE が直接呼び出されていないため、A の境界を認識していないためです。回避策はありますか?
gdb - Fortran: 派生型の配列を含む派生型の割り当て可能な配列
私は現在、グリッドの境界内で追跡する一連の粒子を含む離散数値グリッドを持つ大規模な Fortran プログラムに取り組んでいます。これを行うために、次の 3 つの派生型を定義しました。
まず第一に、これは派生型の許容可能な使用法ですか (つまり、派生型の配列を含む派生型の割り当て可能な配列を持つこと)? コードは、gfortran 4.8.3 を使用して正常にコンパイルされます。
ただし、Fedora で gdb 7.7.1 を使用してコードをデバッグしようとすると、奇妙な問題が発生します。rbin
配列の要素のデータを調べようとすると(たとえばを使用して)、データを(たとえばに)割り当てたにもかかわらず、print rbin(10)%bpoints
gdb は常に出力されます。たとえば、配列の要素のデータを見ると、期待どおりの結果が得られます。誰かがこの問題について洞察を持っていますか?(0, 0, 0, 0, 0, 0)
bpoints
rbin(10)%bpoints = (/1,2,1,2,1,2/)
pbin
print pbin(10)%bpoints
fortran - mpi で割り当て可能な配列を使用して派生型データを送信するときのセグ フォールト
mpi 広告で割り当て可能な配列を使用して派生型データを送信しようとしていますが、seg fault が発生しました。
そして、これは私が2つのプロセスで実行して印刷したものです:
負のアドレス オフセットを取得するようです。助けてください。ありがとう。
memory - 割付け配列によるサブルーチン呼び出し
私のコードでは、使用しているマシンが原因でメモリの問題が発生しているため、引数を渡すときにできるだけ少ないメモリを割り当てたいと考えています。私のコード例:
メイン プログラムでは、ヒープ メモリを使用する必要があります。また、サブロチュインでヒープメモリを使用したいと考えています。Acc を検索すると、実行エラーが発生します (既に割り当てられている配列 'arrayb' を割り当てようとしています)。
したがって、私の目的は、サブルーチンでもヒープ メモリを使用し、上記のコードのようにプログラムからサブルーチンへの引数の受け渡し中に可能な限り最小のメモリを割り当てることです。今、私はコピー課題をしていると思いますが、私が知っているように、それは良くありません。モジュール、インターフェイス、およびブロックを含むことを確認しましたが、allocatabel 配列を使用してメモリ内のスペースを節約するのにどれが適しているかは明確ではありません。私の目的に合った助けをいただければ幸いです。
memory-management - ユーザー定義型の Fortran 割り当て可能配列メンバー
次の単純なプログラムで、派生型の割り当て可能な配列メンバーでセグメンテーション違反が発生しました。このセグメンテーション違反は、1 台のマシン (openSUSE で Intel Fortran 14.0.3 を使用) でのみ発生し、別のマシン (Ubuntu で Intel Fortran 14.0.2 を使用) では発生しませんでした。また、プログラム内の整数パラメータの 1 つを変更すると、プログラムは正常に終了します。
誰でも問題を再現できますか?コードの何が問題なのか誰か教えてもらえますか?
以下に、3 つのソース コード ファイルを示します。
main_dbg.f90
.. セグメンテーション違反が発生するかどうかは、このファイルのn1
との値に依存します。n2
strange.f90
forall
..このファイルのコンストラクトで
セグメンテーション違反が発生します。
tktype.f90
以下は、上記のソース コードをコンパイルし、生成された実行可能ファイルを実行するためのシェル スクリプトです。
compile_run.sh
標準出力は次のようになりました。
編集 2016-01-30
ulimit -s unlimited
の先頭 ( の後#/bin/bash
) に追加するとcompile_run.sh
、セグメンテーション違反が防止されることがわかりました
。Fortran の割り当て可能な配列は、ヒープではなくスタックに格納されていますか?