問題タブ [fortran90]
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 - フォーマットされた配列をファイルから変数に読み込む
ディスク上のファイルからフォーマットされた 2D 配列を変数に読み込もうとしています。かなり単純な書き込み操作がありますが、同じファイルの読み取りに固執しています。誰かがこれを行う方法についてのサンプル/記事を教えてもらえますか? ネットは飽和しているようですが、役立つ記事が見つかりません。
ちなみに、フォーマットされたファイルの理由は、構成オプションが含まれているため、人間が判読できるようにするためです。
fortran - 拡張子が.f90のファイルを保存します
ワードパッドにソースコードを入力してaddition.f90として保存しましたが、残念ながら、Windowsが提供するオプションはテキストファイルやrtfなどだけです。
Windows用のG95コンパイラを使用しています。
pointers - Fortranポインター関数:このコードの動作が関数呼び出しの順序に依存するのはなぜですか?
コンテクスト
以下に掲載されているおもちゃのFortranコードは、2つのポインター関数を呼び出します。つまり、両方の関数がポインタを返します。実際、これらは両方とも配列ポインターです。どちらも同じことを行おうとします。つまり、1、2、3の3つの要素を持つ整数配列を参照する整数配列ポインターを返します。最初の関数は、ポインター割り当て演算子(=>)を使用して、関数ポインターをデータを保持する割り当て可能な配列。2番目の関数は、データを格納するために、ポインタを介して動的メモリのブロックを直接割り当てます。呼び出し側プログラムは、返された配列の要素を出力するだけです。
これが私が奇妙だと思うものです。
- の結果を指す
a
と、結果function1
は正しくありません。の最初の要素はa
「clobbered」のように見えます :a
has0
、、。2
3
- の結果を指す
b
と、function2
結果は正しいです。 、、b
を取得します。1
2
3
- それでも見知らぬ人は、それが正しくなるよう に変化を指し示した後
b
の結果を指し示します。次に、、、。_function2
a
function1
a
a
1
2
3
質問
なぜこれが発生するのですか?より正確には、割り当て可能な配列へのポインターを返すポインター関数が、呼び出し元のその配列の最初の要素をクローバーするのはなぜですか?さらに正確に言えば、あるポインター()を指すb
と、別のポインター()に副作用が生じるのはなぜa
ですか。ターゲットは、相互作用しないように記述されたさまざまな関数から取得されます。
警告
この動作は、Ubuntu(Jaunty)でIntelラップトップを実行しているGNUFortranコンパイラv.4.3.3を使用して取得します。結果は異なる場合がありますが、それでもなお興味深い場合があります。最後に、いつものように、それは私の側のオペレーターエラーである可能性があり、それは少なくとも私にとって興味深いでしょう。
コード
arrays - 整数配列 fortran を定義する
私はFortranの初心者です。以前に整数配列を定義する方法を教えてください。たとえば、12 か月の日数で配列を定義したいとします。お気に入り...
この構文は正しいですか? そうでない場合は、正しいものを教えてください。
ありがとうプラビーン
fortran - fortran 90 ユーザー定義型、値渡し?
Fortran 90 に問題があります。
私はユーザー定義型を持っており、MPI サブルーチンの 1 つを呼び出すと、データは値で渡されるように見えます (私が思っていたように、アドレスではありません)。出力引数は変更されません。MPI 呼び出しに固有のようです。簡単なテストで同じことを試しましたが、呼び出しスコープで渡された値を変更できます。Fortran は常にアドレスで渡すと思っていたので、これがなぜなのかわかりません。何が起こっているのでしょうか?
明確にするために、コメント付きのスニペットは呼び出しがどのように行われるかを示しています。最初の呼び出しでc%NSubDomains
は、出力引数であり、呼び出しスコープで変更する必要がありますが、そうではありません。ユーザー定義型のメンバーではなく配列で呼び出すと、コメント解除されたスニペットで機能します。
fortran - MPI_SCATTER 行ごとの Fortran 行列
Fortran 90 行列を列ではなく行で散布する最良の方法は何ですか? つまり、行列 a(4,50) があり、各部分が alocal(2,50) である 2 つのプロセスに MPI_SCATTER したいとします。ここで、ランク 0 には行 1 と 2 があり、ランク 1 には行 3 と行があります。 4. C では、配列は行優先なので単純ですが、Fortran 90 では列優先です。
TRANSPOSE を使用して分散前に a を反転する (つまり、メモリ使用量を 2 倍にする) ことを避けようとしていますが、MPI にはこれを行う方法が必要であると考えています。MPI_TYPE_VECTOR でしょうか。MPI_TYPE_CREATE_SUBARRAY?
同様に、3 次元配列 b(4,50,3) があり、blocal(2,50,3) の 2 つの分散行列を上記のように分散させたい場合はどうすればよいでしょうか?
string - 内容が最初の文字に依存する行の読み取り
Fortran では、実用的な読み取り方法は次のとおりです。
最初の文字が「A」であるが、次の文字を読み取らない場合:
たとえば、最初の文字が「Z」の場合は残ります。
行全体を読み取ろうとすると:
番号が欠落している場合、エラーが発生します。したがって、「A」をその行にとどめ、「A」または「Z」の読み取りに応じて、必要に応じて残りを読み取る方法が必要です。
debugging - デバッガーが接続されていると表示されないエラー
数値ライブラリをコンパイルするためにIntelのFORTRANコンパイラを使用しています。テストケースでは、libc.so.6内でエラーが発生しました。Intelのデバッガー(IDB)を接続すると、アプリケーションは正常に実行されます。デバッガーがバグを防止するバグをデバッグするにはどうすればよいですか?同じバグがgfortranで発生したことに注意してください。
私はOpenSUSE11.2x64内で作業しています。
エラーは次のとおりです。
forrtl:severe(408):fort:(3):配列Bの添え字#1の値は-534829264であり、これは1の下限よりも小さい値です。
fortran - Fortranの意図(inout)と省略の意図
良い習慣は、Fortranのサブルーチン引数がそれぞれ指定された意図を持っているべきであることを指示します(すなわちintent(in)
、intent(out)
またはこの質問intent(inout)
で説明されているように):
ただし、インテントを指定しないことは有効なFortranです。
intent(inout)
として指定された引数と指定された意図のない引数のコンパイル時チェック以外に実際の違いはありますか?インテントを古いインテントフリーのコードに後付けする場合、心配すべきことはありますか?
fortran - Fortran SAVE ステートメント
(Intel の) 言語リファレンス ドキュメントのステートメントについて読みましたsave
が、それが何をするのかよくわかりません。save
ステートメントがモジュールに含まれている場合の意味を簡単な言葉で説明してもらえますか?