問題タブ [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 - Fortran でのパラメータ受け渡しの「実世界」での使用
私は常に、fortran が実体を「参照によって」仮引数に渡すと想定していました。それから私はこの答えを得ました(答えの実際の議論は関連していましたが、これについてではありません)
標準はそれを決して指定しておらず、実際、そのような指定を避けるためにかなりの努力をしています。あなたの考えはよくある誤解ですが、特に最適化がオンになっているほとんどの古いコンパイラでさえ、厳密には正確ではありませんでした。厳密な参照渡しは、多くの一般的な最適化を無効にします。
最近の標準では、参照渡しはほとんど許可されていない場合があります。標準では、その規範的なテキストでこれらの単語を使用していませんが、参照渡しで実装するのは実際的ではないものがあります。
ポインターのようなものに取り掛かり始めると、すべてが参照渡しであると想定する誤りが以前よりも明らかになり始めます。あなたはその誤解を捨てなければならないでしょう、さもなければ多くのことがあなたを混乱させるでしょう.
他の人が投稿の残りの部分に適切に答えていると思います。上記の点についても言及している人もいましたが、私はそれを強調したいと思いました。
帰属についてはこちらをご覧ください。
この回答によると、標準には、呼び出し元から呼び出し先にデータを送信する方法を指定するものは何もありません。実際には、特にインテント()仕様に関しては、(コンパイラが標準を実装する方法に起因する実際の影響に関係なく)実際に作業するという観点から、これをどのように解釈する必要がありますか?
編集:質問を明確にしたいと思います。私が理解しようとしているのは、通話を実行しているときに標準がどのように機能することを期待しているかということです。エンティティを渡すために使用される実際のコンパイラ戦略が標準によって定義されていないことを考えると、(標準によれば) 原則として、引数を関数に渡すことが実際に「参照渡し」として動作するとは期待できません。これは、この動作がコンパイラと最適化に依存するためです。したがって、標準は、実際の実装戦略に関係なく、動作するために従わなければならないプログラミング スタイルを課していると思います。
fortran - POINTERとALLOCATABLEの違い
これら2つのコードの違いは何ですか
と
特に次のコードに関しては:
fortran - fortranの非常識な数の継続行(ifort)
明らかに、Fortranコンパイラーで許可される継続行の数には制限があります。私は一時的な病理学的ケース(迅速なテスト目的で作成された)を持っており、ファイルを開かずに巨大な配列を初期化する必要があります。配列は非常に大きい(360000エントリ)。
コンパイラの制限を無制限に設定するにはどうすればよいですか、またはこの配列の初期化をホストするためにどのような代替戦略を使用できますか?
fortran90 - Fortranでファイル内の位置を設定しますか?
Fortran でファイル内の位置を設定するにはどうすればよいですか。私が理解している限りINQUIRE(unit, pos=currentpos)
、ファイル内の現在の位置を返します。位置を currentpos に設定するにはどうすればよいですか?
FSEEK があることは知っていますが、ifort の POSIX の移植性レイヤーのようです。私は標準的な方法を好むでしょう。
io - Fortranでの可変長/タイプ行の読み取り
fortranにデータの行があり、さまざまな値を読み取る必要があります。値の数は何でもかまいませんし、タイプも同様です。例
また
次の行の情報を取得せずに、この行を正常に読み取る、または少なくとも基本トークンに分解するにはどうすればよいですか(これは絶対に防止する必要があります)。
fortran - fortran 90 のインテント (アウト) スプライス配列の未定義の動作?
これを行うと、非常に奇妙な動作が発生します。これが問題の原因だと思いますが、間違っている可能性があります。これが実際に未定義の動作であることを確認できる人がいれば、少なくとも何が起こっているのかを知ることができます
私が持っていると仮定します(コンパイルするふりをしません)
私の質問は次のとおりです。私は何か変なことをしていますか? スライスを渡したとしても、intent(out) がブロック全体を定義解除しているように感じ、inout が必要です。規格から確認できますか?
編集: inout は同じ未定義の動作をしますが、スライスされていない配列を Sub に渡すと機能します。これは、サブブロックの初期化のためにスライスされた配列を渡すことが標準に違反していることを意味しますか?
ありがとう
arrays - サブルーチン呼び出し中に fortran で配列制限を維持する
私は次のプログラムを持っています
「ここ」でマークされた行で、私は何か間違ったことをしています。実際には、私が配列を受け取るとa
(-5 から +5 まで割り当てられた呼び出し元で)、呼び出し先は従来の番号付け (1 から n) を使用します。つまり、-4 を割り当てると、境界外の割り当てが行われます。bar
ルーチン内で、a
配列の番号付けが呼び出し元と同じでなければならないことをコンパイラーにどのように指示できますか?
fortran - dsygvの固有ベクトルの順序
を呼び出すとdsygv
、固有ベクトルを行列として取得します。これらの固有ベクトルは、行列の列または行に沿っていますか?
fortran - FORTRAN の関数引数
問題
関数を別の関数の引数にしようとしていますが、エラーが発生し続けます:
コード
以下は、関数を呼び出し、実際のコールバックを含むプログラムのベアボーン バージョンです。
次に、関数引数を取る関数が次のモジュールです。
概要
したがって、基本的に、testbutcher には特別な方法で評価される関数が含まれているため、モジュール butcher (具体的には butcher の関数ステップ) に送信して評価されます。これを実際に行う方法がわかりません!私が C で作業していた場合、単純に polytrope へのポインターを作成し、それを fxn にスローします。
fortran - for_write_seq_lisは何をしますか?
valgrindを使用してFortran90プログラムをデバッグしています。トレースにこれがあるとエラーが発生します
そして、それが私の間違いなのか、それとも単に内部ライブラリの癖なのかはわかりません。これらの機能の機能やその他の関連情報を知りたいのですが。
macosxでifort(IFORT)11.1 20100806、valgrind3.6.0をコンパイルしています。
associated(ptr)
編集:組み込みが使用されている場合、または使用されている場合に、valgrindエラーの発生を見つけることができましたprint *
。いずれにせよ、私はそれらのルーチンが何を担当しているのか知りたいだけです。lfテーブルとは何ですか?