問題タブ [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.

0 投票する
2 に答える
1793 参照

arrays - Fortran: 割付け配列のランクの選択

A実行時の入力に応じて、割り当て可能な配列をランク 1、2、または 3 にするプログラムを作成しようとしています。Aの後続の操作は似ているため、これを実行したいと思います。また、モジュール内で、モジュール プロシージャを使用したインターフェイスworkを定義しました。モジュール プロシージャを実行するとA、目的の結果が得られます。

私が現在やっていることはこれです:

何らかの方法で のランクを選択できればAifステートメントは不要になるため、物事ははるかに簡単になります。多分これは不可能ですが、すべての助けに感謝します。

0 投票する
1 に答える
380 参照

data-structures - 割り当て可能なユーザー定義 (派生型、データ構造) 変数のサイズを fortran のサブルーチンに渡す方法は?

派生型の変数(別名、構造体またはユーザー定義変数)を作成し、それを 1 つのサブルーチンで計算して、別のサブルーチンで使用したいと考えています。構造体の両方のコンポーネントは割り付け可能な配列です。これらの配列のサイズをサブルーチンに伝える方法を知りたいです。派生型でそれを行う方法を知っている唯一の方法は、割り当て時ですが、割り当てられるのは一度だけです。非派生型の割り当て可能配列は、サブルーチンの開始時およびインターフェイスで特定のサイズとして宣言されます。

しかし、派生型配列に対してはどうすればよいでしょうか?

それらが役立つ場合の詳細: 私はモジュールを持っています:

メインコードとサブルーチンの両方がそれを使用し、新しい型を使用して変数を定義します:

また、メイン コードの先頭に配置するインターフェイスもあります。

構造体変数のコンポーネントをメインコードに配置してみた

しかし、その変数に書き込むときに大きな値 n と m を使用してコードを実行すると、問題が発生しました (無効な書き込み、アドレスはスタック 1 にあります)。そのため、それを作成するサブルーチンに割り当ててみましたが、他のサブルーチンがそれを読み取ろうとしたときに無効な読み取りが発生しました。(ただし、これらの問題は両方とも、大規模なシステムと valgrind を使用する場合にのみ明らかです。)

完全な構造体を渡すのではなく、構造体変数のコンポーネントを通常の変数として 2 番目のサブルーチンに渡すことで、コードを実行できます。「でも、構造体変数なら使えるはずだ!!」

0 投票する
1 に答える
327 参照

arrays - 割り当て可能な配列のサブ配列をサブルーチンに渡す、右境界あり

私が書いている並列プログラムでは、実行中に負の下限allocatableで割り当てられる多くの多次元配列 (実際には 1D、2D、または 3D)を定義しました。私がそれを行った理由は、各プロセスが2Dの例では14 x 14の行列を処理し、隣接する4 つのプロセスと2 つのレイヤーのオーバーラップを共有するため、行列は境界で割り当てられます。行列は 1 から10までのインデックスに対応します。(斜体は選択/入力の依存関係を表します)。 A(-1:12,-1:12)

問題は、これを行う際に、この Fortran2003 機能に依存することが不可能であることを認識していなかったためcall mysub(A(:,i),...)、呼び出し元ユニットで実行できずA、実際の境界 ( -1および12 )A(:,i)は式であり、単なる変数ではないためです。

前のリンクされAた回答で説明されているように、配列全体をサブルーチンに渡すと問題は解決しますが、これにより、「より大きく」普遍性が低いサブルーチンを作成する必要があり、逆に、1つに作用することを意図しています次元の部分配列。

allocatableサブルーチンが実際の変数の境界を認識する方法で、配列のサブ配列 (例: A(:,1)) をサブルーチンに渡すことは可能ですか?

0 投票する
0 に答える
1122 参照

fortran - 名前リストから割り付け可能な配列を読み取る

GNU Fortran (GCC) 4.8.2 を使用しています

名前リストから割り当て可能な配列を読み取りたい。しかし、割り当て可能な配列に読み込まなければならない要素の数が事前にわからないため、名前リストを読み取る前に割り当てることはできません。

これは私の名前リストです: namelist.nml:

これが私のプログラムです: namelist.f08:

ラベル付けされた行のコメントを外すと、プログラムは動作しますが、前に述べたように、名前リストを読み取る前に割り当てることができません。これを達成する方法を知っている人はいますか?

0 投票する
1 に答える
673 参照

arrays - 配列コンポーネントを使用した派生型の設計

派生型の設計に関する具体的な情報を見つけるのに苦労しました。これについて議論する最善の方法は、いくつかのオプションを使用することだと思います。派生型のさまざまなアプリケーションを使用して、コードのいくつかのセクションを作成しました。npartsindex、およびには動的配列を使用したいと思いますrefs。構造体を実際に使用するコードのセクションは省略しましたが (私が作成したものなのでありません)、例を示し、ルーチンで構造体のすべての値を少なくとも 1 回は使用するつもりです。

オプション A:派生型で静的配列を使用します。欠点は、コンパイル時に配列のサイズを推測する必要があることです。

オプション B:派生型で動的配列を使用します。

オプション C:派生型で使用される動的配列の数を最小限に抑え、強制的assemblyに配列にします。ただし、このバージョンでは未使用のメモリが大量にあることに注意してください。たとえば、npartsから の時間のindexメモリが必要です。packsassembly(packs,packs,nboxes)

オプション D:オプション C の別の順列。

質問:

  1. do示されているループ例の派生型を設計する正しい/予想される方法は、どのバージョンですか? 動的配列機能が必要な場合、どのバージョンが最も最適化されていますか?
  2. 上記に関連しているのかもしれません。メモリはどのように割り当てられ、アクセスされますか? の使用はSEQUENCE価値がありますか? とにかく、割り当てられた配列は順番に表示されないと思います。assemblyの各セクションが小さいため、これはオプション C が最適であることを示しているのではないでしょうか?
  3. この派生型を複数の派生型に分割するか、完全に削除して変数に固執する必要がありますか? この派生型を複数のルーチンで使用し、モジュールに配置します。
0 投票する
1 に答える
986 参照

fortran - ユーザー定義のデータ型割り当て可能配列を渡す

データ型として割り当て可能な配列を使用して、ユーザー定義のデータ型を定義できます。

同じサブルーチン内にいる間、割り当ては完全に機能します。しかし、このタイプのユーザー定義データ型をサブルーチン引数として渡す方法がわかりません。

Intel コンパイラは次のエラーを表示します# 6530

エラーを表示するために、コードが以下に共有されています。FORTRAN 77 で書かれています。FORTRAN 77 ファイルのみを受け入れる Abaqus のユーザー サブルーチンにこのコードを追加する必要があるため、FORTRAN 77 で作業しています。



プログラムをコンパイルすると、次のようなエラーが表示されます。

この問題を解決する方法があるはずです。一般的なブロックやモジュールから離れたい。とにかく、Fortran でモジュールを使用することはできません。

このエラーを回避するために、サブルーチンを呼び出すだけでなく、メイン プログラムでも割り付け可能な変数を使用していました。その後、プログラムはコンパイルされますが、実行時に「その割り当てが複数回行われました」というエラーが表示されます。

最後に、いくつかのグローバル定数を使用する必要があると思います.....私は推測します。