問題タブ [fortran2003]
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 - 別のモジュールのサブルーチンに型を渡す
解決策が見つからない小さな問題がありますが、解決策があると確信しています。モジュールで型を定義し、その型を別のモジュールのコンストラクターへの引数として使用したいと考えています。このようなもの: 最初のファイル:
2 番目のファイル:
3 番目のファイル:
Getter 関数は適切に定義されています。コンパイルしようとすると、error #6457: This derived type name has not been declared. [SOLVERPARAMETERS]
class(SolverParameters), intent(in) :: VarSolverParameters
--------------^
オブジェクトをtypeSolverParameters
のコンストラクターに渡すにはどうすればよいですか?InitSolver
Solver_class
fortran - Fortran の実数リテラルに対して、科学表記法とアンダースコアの種類指定子を同時に使用する
Fortran では、浮動小数点リテラルに科学表記法を使用するのは簡単です。
1.5d-10
は倍精度を意味します (現在の Fortran コンパイラの設定でそれが意味するものは何でも) を近似する浮動小数点値です1.5*10^-15
。
ただし、指数表記と浮動小数点の種類指定子の融合には少し問題があります。の型を持ちたい場合、この浮動小数点リテラルをどのように宣言しC_DOUBLE
ますか?
これはちょっとした問題であることはわかっていますが、倍精度が と同じではない状況が発生する可能性がありますC_DOUBLE
。
pointers - 割り当て可能な属性またはポインター属性を持つ無制限のポリモーフィック仮引数?
私が取り組んでいるプロジェクトでは、新しいオブジェクトが作成され、古いオブジェクトが破棄されるときに、オブジェクトの配列のサイズを頻繁に変更する必要があることに気付きました。これは、コード全体で多数の異なる派生型で発生し、そのほとんどは相互に関係がありません。これらの配列のサイズを固有の派生型に合わせて変更するコードを書くのは面倒なので、派生型配列がそれらのサブルーチンを使用できるように、無制限のポリモーフィック仮引数を使用していくつかのヘルパー サブルーチンを作成してみようと考えました。
私が見つけたのは、私の無制限のポリモーフィック ルーチンをコンパイルして で呼び出すことができるということCLASS(*),INTENT(INOUT) :: val
です。この仮引数は、整数、割り当て可能な整数、または整数へのポインターを受け入れます。ALLOCATABLE
ただし、または属性を追加しようとするとすぐにPOINTER
、サブルーチンは正しくコンパイルされますが、コンパイラ エラーを取得せずに呼び出すことはできません。私の目標は派生型の配列のサイズを変更できるようにすることなので、これらの属性は、ルーチンが値を割り当て解除/割り当て/関連付けできるようにするために必要です。
実際に何もしようとせず、コンパイルに失敗するテスト コードを次に示します。このバージョンではスカラーの具象型を使用していますが、具象型の配列または派生型の配列を使用する元のコードでも同じエラーが発生します。
示されているように、コードは次のエラーを生成します。
エラーで指定された 2 行をコメント アウトすると、次の正しい出力が得られます。
私は Fortran コードを広範囲に記述してきましたが、これまで無制限のポリモーフィズムを使用しようとしたことはありません。私がやろうとしていることが可能かどうか、もしそうなら、私が間違っていることを教えてください。
私は gfortran コンパイラ 5.4.0 を使用しています。これは、私が知る限り、無制限のポリモーフィズムを完全にサポートする必要があります。
fortran - MVAPICH2 を使用した Fortran 2003 プログラムのコンパイル
MVAPICH2 を使用して Fortran 2003 プログラムをコンパイルできますか?
MVAPICH2は、a) 独自のコンパイラを提供し、b)mpif77
およびmpif90
ラッパー (どちらも eg を指す) を提供すると述べています/opt/mvapich2-2.3.1/bin/mpifort
。これに役立つドキュメントが見つかりません。
fortran - 最新の Fortran の静的配列要素
便宜上、このような 1 次元配列として実装された静的ルックアップ テーブルの要素を参照できるようにしたいと考えています。
I は、角括弧内の静的配列への整数インデックスです。名前付き配列を宣言してそれを使用できることは知っていますが、上記の意図に適した構文があるかどうか疑問に思っています。
fortran - select 型構造の関連する名前は、OpenMP によって自動的にプライベート化されますか?
(とその拡張)ary
の 2 つの拡張型を取ることができる多態的な割り当て可能な配列を割り当てようとしています。baseType
extType1
extType2
サブルーチンを並列化するには、最初は、関連する名前がループに入った後に作成されるため、構造aryPrintTypes
に問題があると考えました。したがって、最初の並列化バージョンを次のように書きました。select type
this
!$OMP PARALLEL DO
上記のコードは、期待どおりに正常に動作します。8 つのスレッドを使用した出力は次のとおりです。
ただし、後で宣言せずに2番目の並列化バージョンを試してみましたがthis
、POINTER
驚くべきことに、ITも機能し、最初のバージョンと同じ結果が得られました。
両方のバージョンを大規模な社内計算コードに実装しました。最初のバージョンはいつものように正常に動作しますが、2 番目のバージョンでは、関連付けられた名前 の型がDO ループ内の構造this
によって認識されません。select type
コンパイラ情報:
編集 :
1 つのコメントは、this
in構造はFIRST 並列化バージョンで宣言された asselect type
とは何の関係もないことを示唆していました。したがって、最初のバージョンの宣言を削除したところ、同じ結果が得られました。this
POINTER
POINTER
したがって、新しい問題が提起されます:コンストラクトthis
内の関連付けられた名前は、OpenMP によって自動的に非公開化されるのでしょうか?として宣言する必要はありません。select type
PRIVATE
c - Fortran 整数値を malloc で割り当てられた C メモリ ターゲットに割り当てる
array(:)
C で割り当てられたメモリへのポインターの Fortran を作成したとします(ベストアンサーmalloc
に示されているように、コードは以下で繰り返されます)。Fortran 配列、つまり iso_c_bindings を使用して、この割り当てられたメモリに整数値を書き込む方法はありますか? または、Cでこれを行う必要がありますか?
fortran - Associate からの 1 でないインデックス付き配列
配列 (またはその一部) を指し、インデックスが付けられていないアソシエイトが必要です。次のプログラムは、この問題を示しています。
私は試した
しかし、これは無効な構文です。(少なくとも gfortran 9.3 である私のコンパイラでは)