FortranのOctreeコード


10

私は科学計算に不慣れです。OctreeのFortran(できればf90)実装を探しています。

私の問題では、任意のボックスにN個の粒子(またはラプラス方程式のような方程式を解くために積分方程式法にプラグインできる密度値がわかるソース)がなくなるまで、ドメインを分割するOctreeが必要です。

私が見つけたすべてはこのC ++実装でした。使用できるFortranライブラリが既に存在するかどうかを知りたい。

また、計算ボックスへの高速積分方程式法の適用が容易になるように使用できるFortranのOctree実装に関する優れた紙の推奨事項も高く評価されます!


BoxLibを試してください。マニュアルによると、純粋なFortran 90バージョンがあります。ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdfを
stali

回答:


9

私はOctreesの経験はありませんが、Fortranで使用したい素敵なC ++ライブラリがあるときはいつでも、単純なCドライバーを作成します。次に、iso_c_bindingモジュールを使用してFortranから呼び出します。これには、十分にテストされたライブラリを、コミュニティを中心に再利用できるという大きな利点があります。

iso_c_bindingの使用方法については、ここにいくつかの情報を記載しました。

http://fortran90.org/src/best-practices.html#interfacing-with-c

この特定の情報は、CからFortranを呼び出すためのものです。更新する必要があることがわかります。これがFortranからC ++ライブラリを呼び出すコードです。最初のリンクは単純なCドライバー、2番目のリンクはFortranインターフェースです。次に、他のFortranサブルーチンと同じように呼び出します。

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90


6

あなたはFortranの使用に非常に慣れているようです。Octreesは、効率的に実装すると、かなり複雑なデータ構造になるため、C / C ++など、これをサポートするプログラミング言語に適しています。C / C ++には、使用できる非常に高品質な実装がいくつかあります。


ご回答有難うございます!しかし、私が使用する高速積分法はFortranで書かれています。FortranでもOctreeコードを書くのは自然なことです。
リベンデル2013年

どの高速積分法?それらは主にすべて高レベル言語でラップされており、特にoctreeもラップされています。。。
meawoppl 2013年

Cと比較して、(現代の)Fortranには、効率的なoctree実装のサポートがありません。私が知っている唯一の真の欠点は、符号なし整数が欠落しているため、ビットごとの演算を明示的に記述する必要があることです。
Jannis Teunissen

@JannisTeunissen-Fortran 200xに複雑なデータ構造を作成する方法がないということではなく、それがいかに簡単か(またはそうでないか)についてです。C ++、例えば、たstd::mapstd::multimapstd::vectorstd::sort、などなど、基礎となるデータ・タイプの全てを総称盛独立したが格納されています。今日、Fortranでもこれをすべて実行できるという議論はありませんが、基礎となるデータ構造ではなく、実際にアプリケーションで作業するために生産的に使用できる数日および数週間の作業が必要です。
Wolfgang Bangerth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.