問題タブ [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.
pointers - fortran 2003 とポインター
Fortran プログラムを書いています。このプログラムは、いくつかの数値メソッドを実装しています。プログラムの速度は非常に重要です。私は動的配列を取り除くことに決めました (プログラムを高速化するかどうか?)、次の問題に直面しました。MAX を知っている 3D 配列 (NXxNYxNZ = MAX 要素) がありますが、NX/NY/NZ の比率はわかりません。1x1xNZ またはこの 2xNYx1 などのようにすることができます。解決策は、ポインターを使用することです。単純化された 2D ケース:
この例は機能しますが、そのような更新により、5 次元配列を使用している実際のプログラムの速度が低下するのではないかと心配しています。出来ますか?
fortran - Fortranで無制限のポリモーフィック仮引数を使用して割り当て可能な文字をサブルーチンに渡す
無制限のポリモーフィズムに基づいて、文字列をさまざまな種類のデータ型に変換できるルーチンを作成しようとしています。アイデアは、ユーザーがこのルーチンを呼び出し、データを格納する場所に変数を渡し、ルーチンが変数/引数の型に基づいて変換を定義することです。
このルーチンの抜粋は次のとおりです。
「this%fValue」は「character(len=:)、割り当て可能な」文字列です。割り当て可能な文字列を渡すこのルーチンを使用しようとすると、成功して終了し、エラー/例外は発生しません:
ただし、文字列「値」は常に空です。ルーチン内でも、"value = this%fValue" を割り当てた後、value は空 (len(value) は 0) です。
コンパイラは、引数が文字型 (len=:) であり、割り当て可能であることを検出できないため、値を割り当てることができないようです。
もちろん、いくつかの代替手段がありますが、単一のルーチンを使用でき、さまざまな種類のデータに対してオプションの引数を使用できないというアイデアは非常に優れています。
たとえば、文字列を処理するために作成したユーザー定義型を使用できます。
しかし、これが Fortran 2008 のデフォルトの動作であるかどうかを知りたいです。また、これを達成する方法があれば、このルーチンを単一の「class(*)」ダミー引数とともに使用して、割り当て可能な文字を参照しました。たとえば、ルーチン内で割り当てを強制する方法はありますか?
コメントをお待ちしております。乾杯、エドゥアルド
generics - このタイプ バインドされたジェネリック サブルーチン呼び出しに一致する特定のサブルーチンがありません
ジェネリック プロシージャ (GetValue) の下に 2 つのバインドされたプロシージャ (GetAsScalar & GetAsList) を持つ型があります。
ルーチンのシグネチャは次のとおりです。
内部的に、TKeyword オブジェクトは文字列を格納します。
次の方法で使用しようとすると (下記)、コンパイル エラーが発生します。
GetASScalar をジェネリック アソシエーションから削除してパブリックにすると、次のコードが期待どおりに機能します。
スカラー (整数、実数、文字など) を渡す場合、GetAsScalar ルーチンは問題なく呼び出されます。
なぜこれが起こっているのか知りたいです。コンパイラがジェネリックの下で私のサブルーチンを認識できないようにするこの「ジェネリックなもの」には何が欠けていますか? これを機能させる方法はありますか?ルーチンの署名に関連するものでしょうか?
Intel Fortran 15.0.1.148 を使用しています
input - 不適切な値を変数に読み込もうとすると、その値が変更されますか?
キーワードが存在する場合iostat
、I/O エラーが発生してもプログラムは停止しません。次に、不適切な値をスカラー変数に読み込もうとすると、i
たとえば、この変数は変更されませんか? 以下はうまくいくようです:
Fortran 2003 でこの動作を信頼できますか?
fortran - Fortran での関数の戻り値の直接インデックス付け
関数の戻り値に直接インデックスを使用する可能性はありますか? このようなもの:
はreadStr()
文字列または配列を返す関数です。他の多くの言語では可能ですが、Fortran ではどうでしょうか? もちろん、私の例の構文はコンパイルされません。使用する他の構文はありますか?
fortran - Fortran 2003 での非標準型宣言
特定の fortran 標準を使用せずに、科学的な fortran コードを作成しました。しかし、ここで、使用している fortran 標準を宣言する必要があります。
get_command_argument および command_argument_count 組み込み関数が必要なため、fortran 2003 を使用していると言いました。ただし、フラグ -std=f2003 を使用してコード標準をチェックすると、コンパイルは失敗します。
一部で実数の型宣言に関するエラーが発生します。たとえば、モジュールで変数を宣言すると、次のようになります。
すべての実数変数で「非標準型宣言 REAL*8」というメッセージが表示されます。
誰が何が起こっているか知っていますか?
inheritance - 継承されたクラスで (1:n) を使用すると、gfortran で奇妙な動作をする
私は客観的な方法で fortran90 の古いプログラムを更新してきましたが、継承されたオブジェクトの非常に奇妙な動作に遭遇しました: 例として:
このプログラムを gfortran (4.8 または 4.9) でコンパイルすると、
ただし、1 行目と 2 行目 (それぞれ 3 行目と 4 行目) は同じである必要があります。変数 j (InnerSpec_t 内) の宣言をコメント化すると、この問題は解消されるため、継承されたオブジェクトのメモリ割り当てに問題があるようです。intel fortran でコンパイルすると、すべて正常に動作します。
どういうわけか不適切な構文を使用していますか? gfortranでもこれを機能させる方法はありますか?
fortran - オーバーライドする引数の名前が抽象インターフェイスの名前と一致しなければならないのはなぜですか?
プロシージャをオーバーライドする際の引数の名前が、抽象インタフェースのものと一致する必要があるのはなぜですか?
TYPE
そのような引数の、などがインターフェイスに一致する必要があることは明らかINTENT
ですが、なぜコンパイラは私が変数と呼ぶものを気にする必要があるのでしょうか?
EVAL
以下では、倍精度の引数を取る単一の遅延プロシージャを含む単純な抽象ユーティリティ クラスを定義しました。
のオーバーライド クラスと実装の定義EVAL
:
から次のエラーが表示されgfortran
ます。
エラー: (1) の 'eval' のダミー引数 'another_variable_name' は、オーバーライドされたプロシージャの対応する引数と一致するように 'data' という名前にする必要があります
代わりDATA
にANOTHER_VARIABLE_NAME
すべてを代用すると、期待どおりにコンパイルおよび実行されます。
しかし、これはばかげているように思えます。複数回から継承できるようにしたいのですが、さまざまな状況下で、毎回FUNC_1D
変数を呼び出さなければならないのはばかげているようです。DATA
コンパイラが引数のTYPE
and以外に関心を持つべき理由がわかりません。INTENT