Ein Octree-Code in Fortran

10

Ich bin neu im wissenschaftlichen Rechnen. Ich suche eine Fortran (vorzugsweise f90) Implementierung eines Octree.

Mein Problem erfordert einen Octree, der meine Domäne teilt, bis nicht mehr als einige N Partikel (oder Quellen, bei denen ich den Dichtewert kenne, der in eine Integralgleichungsmethode eingefügt werden kann, um eine Gleichung wie die Laplace-Gleichung zu lösen) in einem beliebigen Feld vorhanden sind.

Ich konnte nur diese C ++ - Implementierung finden . Ich möchte wissen, ob es bereits Fortran-Bibliotheken gibt, die ich verwenden kann.

Außerdem werden gute Papierempfehlungen zu Octree-Implementierungen in Fortran geschätzt, die verwendet werden können, damit das Anwenden schneller Integralgleichungsmethoden auf die Berechnungsbox einfach wird.

Bruchtal
quelle
Versuchen Sie BoxLib. Laut Handbuch gibt es eine reine Fortran 90-Version. Siehe ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Antworten:

9

Ich habe keine Erfahrung mit Octrees, aber wenn es eine nette C ++ - Bibliothek gibt, die ich in Fortran verwenden möchte, schreibe ich einfach einen einfachen C-Treiber - normalerweise ein paar C-Funktionen, die genau das tun, was ich brauche. Dann rufe ich sie von Fortran aus mit dem Modul iso_c_binding auf. Dies hat den großen Vorteil, dass Sie eine gut getestete Bibliothek mit einer Community um sie herum wiederverwenden.

Für Informationen zur Verwendung von iso_c_binding habe ich hier einige Informationen geschrieben:

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

Diese spezielle Information dient dazu, Fortran von C aus anzurufen. Ich kann sehen, dass ich sie aktualisieren sollte. Hier ist mein Code, in dem ich die C ++ - Bibliothek von Fortran aus aufrufe, der erste Link ist der einfache C-Treiber, der zweite Link ist eine Fortran-Schnittstelle, und dann rufe ich ihn einfach wie jede andere Fortran-Subroutine auf:

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

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

Ondřej Čertík
quelle
6

Sie scheinen sehr darauf eingestellt zu sein, Fortran zu verwenden. Octrees sind, wenn sie effizient implementiert werden, ziemlich komplexe Datenstrukturen und eignen sich daher besser für Programmiersprachen, die dies besser unterstützen, wie z. B. C / C ++. Es gibt eine Reihe von Implementierungen von sehr hoher Qualität in C / C ++, die Sie verwenden können.

Wolfgang Bangerth
quelle
Danke für deine Antwort! Aber die schnellen integralen Methoden, die ich verwenden soll, sind in Fortran geschrieben. Es wäre natürlich, den Octree-Code auch in Fortran zu schreiben.
Rivendell
Welche schnellen integralen Methoden? Sie sind meistens alle in höheren Sprachen verpackt, die insbesondere auch Oktrees einschließen. . .
Meawoppl
Welche Unterstützung für effiziente Octree-Implementierungen fehlt in (modernem) Fortran im Vergleich zu C? Der einzige wirkliche Nachteil, den ich kenne, ist, dass vorzeichenlose Ganzzahlen fehlen, so dass Sie einige bitweise Operationen explizit schreiben müssen.
Jannis Teunissen
@JannisTeunissen - Fortran 200x bietet keine Möglichkeit, komplexe Datenstrukturen zu erstellen. Es geht eher darum, wie einfach es ist (oder nicht). C ++, zum Beispiel, hat std::map, std::multimap, std::vector, std::sort, und so weiter und so weiter, die alle allgemein verfügbar , unabhängig von dem zugrunde liegenden Datentyp gespeichert werden. Es gibt kein Argument dafür, dass Sie all dies auch heute in Fortran tun können, aber es erfordert Tage und Wochen Arbeit, die Sie produktiv nutzen können, um tatsächlich an Ihrer Anwendung zu arbeiten, anstatt an den zugrunde liegenden Datenstrukturen.
Wolfgang Bangerth