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

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

string - Fortranサブルーチンで実行するための文字列の受け渡し

次のサブルーチンでは、という名前の文字列変数を渡しますstr。、、の場合'poly'、事前定義されたアクションがあります(以下のコードを参照)。使用する関数をユーザーに指定して、それを文字列変数として渡してもらいたいのですが。'gaus''slat'fval =

あれは ...

の場合str = '3*cos(i*t)'、私はfvalに等しくなりたい3*cos(i*t)です。入力した文字列をFortranで実行するコマンドとしてFortranに解釈させるにはどうすればよいですか?

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

function - Fortran90 で同じモジュール内の関数を呼び出す

私は Fortran90 を初めて使いましたが、抱えている問題に対する答えが見つかりませんでした。モジュール内にいくつかの関数を含む Fortran で記述されたモジュールがあります。

簡素化されたバージョン:

モジュールの終了 vdiStringFunctions

Intel Visual Fortran XE 2011 でコンパイルしようとすると、次のエラーが発生します。

エラー LNK2019: 未解決の外部シンボル _VDISTRINGGENERAL が関数 _VDISTRINGFUNCTIONS_mp_VDISTRING1CHAR vdiStringFunctions.obj で参照されました

関数 vdiStringGeneral は呼び出し元の vdiString1Char と同じモジュールにあるため、問題は発生しません。vdiStringGeneral をモジュールの外に移動すると、問題なくコンパイルされます。

DLL で使用する必要があるため、すべての関数はモジュール内にある必要があります。どうすればそのように機能させることができますか?

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

fortran - 密行列を拡張する

FORTRAN で密行列を新しい列で展開する最も効率的な方法は何ですか?

Tはm×nの密行列であるとします

m × n+1 にしたいと思います。私が考えることができる1つの戦略:各ステップで再割り当てして最後の列を割り当てるか、前にスペースを割り当ててそれが十分かどうかを確認し、そうでない場合は再割り当てのようなものを行うなど、いくつかのより良い方法がありますか? 何か案は?

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

fortran - Fortranでの実数と整数

1つの変数をループし、各ステップで値を計算するプログラムがあります。

最初の試みではiT、整数ループカウンターとして使用し、それを数式で直接使用しました。iTこれにより、 >の区分的グラフが作成されましたic8tiカウンターとして追加iTし、数式で使用する前に実数に変換すると、グラフはスムーズに表示されました。iT数式にプラグインするときに、実数か整数かが重要なのはなぜですか?私のコンパイラはg77です。

iT編集:式は<にもいくつかの不正確な値を与えic8tます。

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

fortran - FFTW:リアルからコンプレックス、コンプレックスからリアルの2Dトランスフォームのトラブル

タイトルにあるように、私はFFTW(バージョン3.2.2)とFortran 90/95を使用して、実データ(実際には乱数のフィールド)の2DFFTを実行しています。私は前進のステップが機能していると思います(少なくとも私はいくつかの出力を得ています)。ただし、IFFTを実行してすべてをチェックし、元の入力を再構築できるかどうかを確認したいと思いました。残念ながら、complex to realルーチンを呼び出すと、何も起こらず、エラー出力も得られないため、少し混乱しています。コードスニペットは次のとおりです。

上記の順方向ステップは機能しているようですが(r2c)、逆方向ステップは機能していないようです。u配列とrecov配列を区別してこれを確認しましたが、最終的にはゼロではなくなりました。さらに、recov配列の最大値と最小値は両方ともゼロでした。これは、何も変更されていないことを示しているようです。

私はFFTWのドキュメントを調べ、次のページhttp://www.fftw.org/fftw3_doc/Fortran-Examples.html#Fortran-Examplesに基づいて実装しました。問題がインデックス作成に関連しているのかどうか疑問に思っています。少なくとも、それが私が傾いている方向です。とにかく、誰かが助けを提供できれば、それは素晴らしいことです!

ありがとう!

0 投票する
3 に答える
585 参照

fortran - Fortran から C の open() 関数を呼び出すときのファイル許可が正しくない

C 関数を呼び出し、open() を使用してファイルを開く Fortran プログラムがあります。

main.f90:

test.c:

私は次のようにコンパイルします:

プログラムを実行すると、ファイル test.txt が作成されますが、権限が正しくありません。

あるべきだったとき

この関数を別の C プログラムから呼び出すと、正常に動作します。誰かが何が間違っているのか指摘できますか?

仕様: 64 ビット Linux GNU Fortran (SUSE Linux) 4.5.0、GCC (SUSE Linux) 4.5.0

ありがとう、クシティジ

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

fortran - Fortran: 行から一度に 1 つの値を読み取る

FORTRAN を使用して ASCII テキスト ファイルからデータを読み込みます。ファイルには 1 行に複数のデータ値が含まれていますが、1 行の値の数は一定ではありません。

通常、read ステートメントの後、Fortran は次の行に移動します。私ができるようにしたいのは、一度に 1 つのデータ値を読み取ることです。行末に達した場合は、次の行を読み続ける必要があります。これは可能ですか?

0 投票する
3 に答える
7633 参照

fortran - Fortran90で複数のファイルを開く

abc25000までのファイル名で10,000個のファイルを開きabc35000、各ファイルにいくつかの情報をコピーしたいと思います。私が書いたコードは以下の通りです:

終わり

このコードは、から始まるファイルを生成することになっていますabc24000abc35000、途中で停止します。

ファイルtest-openFile.f90の17行目(ユニット= 26021、ファイル='')

Fortranランタイムエラー:開いているファイルが多すぎます

上記のコードを修正するにはどうすればよいですか?

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

fortran - write-statement が含まれている場合に関数呼び出しが停止/ハングするが、コンパイル中に特定のライブラリとリンクしている場合のみ

これが私の最小限の例です:

シンプルにコンパイルする場合

または Slatec のようなライブラリを含める場合

それは正常に動作します。

ただし、ライブラリを -lblas の -llapack に変更すると、実行時に testfunc() を呼び出すときにプログラムがハングします。ここでのサンプル コードでは、実際にはこれらのライブラリを使用していないことに注意してください。私が最後に見たのは「メインからの書き込み」であり、何も起こらず、制御を取り戻すにはCTRL-Cを押す必要があります。ハングすると、プロセスは CPU サイクルを使用していないように見えます。

奇妙なことに、testfunc() 内の書き込みステートメントをコメントアウトすると、常に機能します。

だから私の質問は本当に: これらのライブラリは本当に自分の関数内での印刷を防ぐことができますか? なんで?どのように?

(私は実際に、lapack と blas を必要とするより大きなプログラムに取り組んでいるので、それらへのリンクをやめることはできません。)

0 投票する
3 に答える
442 参照

linux - ロングラン中のプログラム失速

修理済み:

うーん、これは少しばかげているようです。top が正しく表示されていないことが判明し、プログラムは実際には引き続き実行されます。CPU 時間が大きくなりすぎて表示できなくなったのではないでしょうか。いずれにせよ、プログラムは正常に動作しているようで、この質問全体は意味がありませんでした。

ありがとう(そしてばかげた質問でごめんなさい)。

元の質問:

Ubuntu サーバー 10.04.3 を実行しているコンピューターでシミュレーションを実行しています。短い実行 (<24 時間) は正常に実行されますが、長い実行は最終的に失速します。ストールとは、プログラムが CPU 時間を取得できなくなったものの、すべての情報をメモリ内に保持していることを意味します。これらのシミュレーションを実行するために、プログラムを SSH および nohup し、出力をファイルにパイプします。

その他の情報:

システムの RAM が不足しているわけではありません。プログラムは、完了するまでハード ドライブの読み取りまたは書き込みを行う必要はありません。計算は完全にメモリ内で行われます。停止後も PID があるため、プログラムは強制終了されません。私はopenmpを使用していますが、プロセスの最大数を増やし、最大時間は無制限です。ARPACK fortran ライブラリを使用して、行列の最大固有値を見つけています。

この動作の原因や、現在停止しているプログラムを再開する方法について何か考えはありますか?

ありがとう