OOPで最新のFortranを使用するオープンソースの科学ライブラリはありますか?


14

私はここ数か月、特定のPDEシステムを解決するためのFortranプログラムのコーディングに費やしました(流体の流れ/燃焼について説明しています)。私は、最新のFortranと、最新のFortranに備わっている新しいOOP機能を使用しようとしました。私は自分で作業していて、質問をするためのFortranの第一人者がいないので、私にとって学習するための自然な方法は、最新のFortranを使用する他のライブラリ/ソルバーを調べることです。

残念ながら、そこにあるすべてのFortranライブラリは、かなり古いFortran、Fortran90トップで書かれているようです。したがって、クラスの設計と相互作用を自分で考えなければなりませんでした。そして、特にパフォーマンスの観点から見た場合、私はそれを正しくやったとはまったく言えません。しかし、おそらく私は何かを見逃しており、FortranとOOPを使用している場合、現代の科学的なパッケージがありますか?

多くの優れたC ++ライブラリ(OpenFOAM、deal.IIなど)やPythonライブラリから学ぶことができます。これらの言語には、一般に大きなコミュニティもあります。例を使って学習したい場合、Fortranを削除して言語を切り替える方が良いでしょうか?


ジャック、コメントが大きすぎるようです:「(このコメントの残りは、長さの要件を満たすためです。)」私の中で希望が持てるので、編集してみんなが読めるようにしてください:D。
-tiam

2
申し訳ありませんが、最後の質問に答えていたので、私のコメントは誤解を招くものでした。つまり、本格的なライブラリから例を使用して最新のOOPを学習したい場合は、C ++が最適です。ごめんなさい; 私は、オープンソースの最高の最新のFortranライブラリを知りません。
ジャックポールソン

6
C ++はすでにオブジェクト指向のねじれた化身であり、多くのライブラリはさらに誤用していることに注意してください(すべての言語に当てはまります)。Fortranを超えて見ることが重要であることに同意しますが、C ++を超えて見ることも重要です。いくつかの異なる種類の言語(オブジェクト指向、汎用、機能、静的および動的)で概念を表現する方法を学ぶことは、「実際の」作業のためにCのような単純な言語に戻っても価値があります。
ジェドブラウン

回答:


10

調べることができる最新のCFDコードがあります。例えば ​​...

流動性:汎用多相CFD(FE)コード; 完全に非構造化されたAMRでも

WRF:NCARの次世代数値モデル天気予報システム

Code Saturne:汎用CFD(FV)コード。ウィキペディアにリストされている機能

構造解析用の同様の最新のFortranコードがあります。

しかし、広範囲のコンパイラサポートがないため、F2003の完全な機能を使用できない場合があります。ほとんどの新しいコンパイラはF2003の大部分をサポートします(ACM SIGPLAN Fortranフォーラムの論文を参照)が、幅広いユーザーベースを持つには時間がかかります。たとえば、Debian安定版にはGCC 4.4.5がありますので、一般的に言って、ユーザーがより良いもの(4.5 / 4.6 / 4.7など)を持つことを期待するべきではありません。

F2003コンパイラが広く普及すると、F2003機能を使用するlibs / codeが表示されます。

今のところ、OOP機能の使用方法に関するDamian Rousonによるこのをご覧ください。


そうです、F2003はつい最近追いついたばかりです(私自身のライブラリでは、移植性を最大限にするためにF95を使用することにしました)。F2003またはF2008で記述されたより多くのコードがまもなく表示されます。
オンドレジ・セティク

非常に良い点。今後数年間で、新しい標準コードがさらに増えることを期待しています。
tiam

ダミアンRousonは上で動作ForTrillinosに近代的なFortranのインタフェースである、Trillinosプロジェクト
ジェレミーコズドン

7

例を使って学びたい場合は、プログラミングの胸部サイトであるrosettacodeをお勧めします。そこでは、かなり多くの異なる言語で比較的多く書かれた問題の例を見つけることができます。

多分もっと面白いあなたのためには以下のようになりFortranのウィキ、そしてここで役に立つかもしれないFortranでOOPのセクションです。

Fortanは順調です-giveめないでください!


私自身はFortranが好きです:)。私はウィキのウェブサイトを知っています。Matcaldsの本もPGIのチュートリアルと同様に非常に優れています。しかし、実際の資料を見るのはいいことです!
tiam

dolfyn CFDコードのコーディングスタイルは、非常に包括的で「最新のFortran文芸」です。そこには、有益なリンクリストなどのデータ構造の例と、正しく覚えていれば少しのOOPがあります。
ジョントラボルタ

4

@JackPoulsonのコメントに同意します。私は、最新のFortranで書かれたオープンソースライブラリを知りません。したがって、例で学ぶためにC ++に切り替える必要があるという特定の質問に対する答えは、残念な「はい」です。しかし、明確にするために、OOPに目を向けて現代のFortranでほぼ排他的に記述されたライブラリが少なくとも1つ存在することを知っています。ただし、このライブラリはオープンソースではないため、学習目標の達成には役立ちません。

ただし、すでに完了したものを捨てることをためらうこともあります。このためにFortranを追求することにまだ興味があり、特定の開発に関する質問がある場合は、StackOverflowで質問することをお勧めします。そこにはアクティブなFortranの開発者が数名いますが、喜んでお手伝いします。


3

私はこれに少し遅れていますが、継承やポリモーフィズムなどの最新のFortran機能を最大限に活用する並列線形代数ライブラリPSBLASのバージョン3をご覧ください。また、F90 / F95に固執する古いバージョンとそのバージョンのパフォーマンスを比較した論文もここにあります。驚いたことに、速度の差は全体的に無視できるほどでした。


1

どのFortran方言が書かれているのかはわかりませんが、William MitchellのPHAMLコードは汎用のFortran FEMコードです。

私はFortranとC ++の議論では公平ではないが、現代のFortranベースのFEMコードを見つけるのが困難であると同時にC ++ベースのコードの多くを見つけるのが難しいことを指摘したいコミュニティ全体が考えていることのいくつかは、進むべき道です。もちろん、好きな言語で独自のコードを作成しようとしても何も問題はありませんが、簡単な調査により、すでに島を建設していることがわかります。あなたはそれを考慮したいかもしれません。


-1

oop 2003の機能を使用するffr EngineeringによるオープンソースのfortranライブラリforDatがあります。


1
SciCompへようこそ!a)forDatが何をするのか、b)forDatがどのOOP機能を使用するのかを説明していないため、答えはあまり役に立ちません。また、forDatの開発者(scicomp.stackexchange.com/help/behaviorを参照する必要があります)については forDatがこれらの機能を使用している理由についても言及できるため、ここで機会を逃しています。
クリスチャンクラソン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.