問題タブ [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.
arrays - Fortranで2次元配列を初期化する方法
Cでは、私が正しく覚えていれば、中括弧構文を使用して配列を簡単に初期化できます。
数学的な目的で特定のテスト値を使用して行列を初期化する場合、Fortranで2次元配列に対して同じことをどのように行うことができますか?(個別のステートメントですべての要素に二重のインデックスを付ける必要はありません)
配列は次のいずれかで定義されます
また
arrays - Fortran90 エラー: EXTERNAL 属性が DIMENSION 属性と競合しています
2*2 行列の固有値を計算する関数を作成しました。引数として 2*2 行列を取り、2 要素配列を介して 2 つの固有値を返します。次のように、プログラム単位で関数を宣言しました。
しかし、コンパイルされず、次のエラーが発生します。
配列を返す関数を持つことは不可能ですか、それとも何か間違っていますか?
ヘルプ/提案をいただければ幸いです。それが役立つ場合は、gfortranコンパイラでfortran 90を使用しています
fortran - プログラムを中断せずに Fortran で入力を読み取るにはどうすればよいですか?
Fortranの通常のread
ステートメントは、RETURN キーが押されるまでプログラムの実行を中断します。RETURN キーを待たずに、押されたキーを読み取るステートメントを探しています。キーが押されなくても、プログラムは停止しません。ご回答ありがとうございます。
編集:質問を明確にする必要があるソースコードを次に示します。
キーが押されていない場合、プログラムtest1
は画面に「出力」という単語を書き込みません。
私が探している read ステートメントを使用するtest2
と、「2」以外のキーが押されるまで、プログラムは画面を「出力」で埋める必要があります。
fortran - ファイルから読み取った値は、Fortran では別の値として格納されます
入力ファイルがあり、最初の行に次の 10 進数が含まれています。
ファイルを読み取って値を出力する Fortran 90 プログラムがあります。
これは出力です:
どうやら、保存されているものと読み取られているものは同じではありません。問題は、なぜですか?
format - エラー: Fortran のフォーマット文字列で予期しないフォーマット文字列の終わり
Fortran 77 プログラムからコピーしたコードをコンパイルしようとすると、このエラーが発生します。
コード:
コンパイラ エラー:
エラーの意味がわかりません。
module - Fortran 90 コンパイルの問題: 未定義参照
同じディレクトリ内のモジュールを使用する単純な fortran プログラムをコンパイルしようとすると問題が発生します。プログラムを含む test1.f90 とモジュールを含む modtest.f90 の 2 つのファイルがあります。
これは test1.f90 です。
これは modtest.f90 です:
両方のファイルは同じディレクトリにあります。modtest.f90 と test.f90 を次のようにコンパイルします。
しかし、その後、次のエラーが発生します。
足りないものはありますか?助けてくれてありがとう
pointers - ダミー引数としてのポインタ
私は次のプログラムに少し戸惑っています
およびその派生物。それらについては後で詳しく説明します。ご存知のように、Fortranはルーチン引数を参照渡しとして転送します。つまり、test
両方のダミー引数でfoo
出現するエンティティbar
は、のスタックで付与された同じメモリスペースprogram hello
です。ここまでは順調ですね。
でポインタとして定義しprogram hello
、type(TestType) :: t
それを割り当てたとします。
コードは以前と同じように機能しますが、唯一の違いは、オブジェクトがスタックではなくヒープに割り当てられていることです。
ここで、スタックに割り当てられたプログラムに戻り、その代わりにサブルーチンバーが次のように定義されていると仮定します。
プログラムを機能させるにはヒープ割り当てバージョンを使用する必要があるため、プログラムはコンパイルされなくなります。より正確に言うと、ルーチンがダミー引数としてポインターを受け入れるように定義されている場合は、ルーチンへのポインターを渡す必要があります。一方、ダミー引数にpointer
キーワードが含まれていない場合、ルーチンはポインターと非ポインターの両方を受け入れます。
これは私に不思議に思います...ダミー引数をポインタとして宣言することのポイントは何ですか?
fortran - 割り当て可能な配列コンポーネント内の項目へのポインターを取得できますか?
ユーザー定義型がありvector
ます。別のタイプでは、割り当て可能なベクトルの配列があります。この割り当て可能な配列から単一のベクトルへのポインターが必要です。だから私はこれをするだろうと思った:
と
しかし、コンパイルすると、コンパイラは次のように不平を言います。
割り付け可能な配列から 1 つの項目へのポインターを取得できますか? 出来ますか?
mpi - サブルーチンで MPI_COMM_WORLD ハンドルの値が失われる
私のプログラムは次のとおりです:
モジュール x
使用 mpi !x が含ま
れ
てい
ます
...
終了モジュール x
program main
use mpi use x
MPI_INIT(...)
call do_something_with_mpicommworld end program main
このプログラムは、次のエラーで失敗します: MPI_Cart_create(199): 無効なコミュニケーター。( * *) でマークされた行がコメント解除されていない限り。
さて、Fortran 90 に関する私の知識は不完全かもしれませんが、モジュール定義にuse句がある場合 (私のモジュール x を参照)、インクルードされたモジュールに存在するグローバル変数 (x の場合: インクルード モジュール mpi の MPI_COMM_WORLD) を考えました) は、含まれるサブルーチン ( do_something_with_mpicommworld ) のいずれにおいても、それらのサブルーチンがモジュールを明示的にインクルードしていない場合でも (たとえば、( * *) がコメント化されている場合)、同じ値になります。または、簡単に言えば、別のモジュール内にモジュールを含める場合、2 番目のモジュールに含まれるサブルーチンは、特別な使用ステートメントなしで、含まれるモジュールのグローバルにアクセスできます。
プログラムを実行すると、別の動作が見られました。x に含まれるサブルーチンは、'use mpi' ステートメントがない限り、エラーを作成していました。
Fortran 90 について間違った考えを持っているのでしょうか、それともそのような動作を誘発する MPI モジュールに何か特別なものがあるのでしょうか?