Un code Octree à Fortran


10

Je suis nouveau dans le calcul scientifique. Je recherche une implémentation Fortran (de préférence f90) d'un Octree.

Mon problème nécessite un octree qui divise mon domaine jusqu'à ce qu'il n'y ait plus que quelques particules N (ou sources où je connais la valeur de densité qui peut être branchée dans une méthode d'équation intégrale pour résoudre une équation comme l'équation de Laplace) dans une boîte.

Tout ce que j'ai pu trouver était cette implémentation C ++ . Je veux savoir s'il existe déjà des bibliothèques Fortran que je peux utiliser.

De plus, de bonnes recommandations papier sur les implémentations Octree dans Fortran qui peuvent être utilisées pour que l'application de méthodes d'équation intégrale rapide sur la boîte de calcul devienne facile, seront appréciées!


Essayez BoxLib. Selon le manuel, il existe une version Fortran 90 pure. Voir ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Réponses:


9

Je n'ai pas d'expérience avec Octrees, mais chaque fois qu'il y a une belle bibliothèque C ++ que je veux utiliser dans Fortran, j'écris simplement un simple pilote C --- généralement quelques fonctions C qui font exactement ce dont j'ai besoin. Ensuite, je les appelle depuis Fortran en utilisant le module iso_c_binding. Cela a le grand avantage que vous réutilisez une bibliothèque bien testée avec une communauté autour d'elle.

Pour savoir comment utiliser iso_c_binding, j'ai écrit quelques informations ici:

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

cette information particulière est pour appeler Fortran à partir de C. Je peux voir que je devrais le mettre à jour. Voici mon code où j'appelle la bibliothèque C ++ de Fortran, le premier lien est le simple pilote C, le deuxième lien est une interface Fortran, puis je l'appelle comme n'importe quel autre sous-programme Fortran:

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

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


6

Vous semblez très déterminé à utiliser Fortran. Les octrees, lorsqu'ils sont mis en œuvre efficacement, sont des structures de données plutôt complexes et, en tant que tels, mieux adaptés aux langages de programmation qui ont plus de support pour cela, tels que C / C ++. Il existe un certain nombre d'implémentations de très haute qualité en C / C ++ que vous pourriez utiliser.


Merci pour votre réponse! Mais, les méthodes intégrales rapides que je dois utiliser sont écrites en Fortran. Il serait tout aussi naturel d'écrire le code Octree dans Fortran.
rivendell

Quelles méthodes intégrales rapides? Ils sont pour la plupart tous enveloppés dans des langages de niveau supérieur, qui enveloppent également notamment des octrees. . .
meawoppl

Quel support pour les implémentations efficaces d'octree manque dans Fortran (moderne) par rapport à C? Le seul inconvénient réel que je connaisse est qu'il manque des entiers non signés, de sorte que vous devez écrire explicitement certaines opérations au niveau du bit.
Jannis Teunissen

@JannisTeunissen - ce n'est pas que Fortran 200x n'a pas de moyens de créer des structures de données complexes, c'est plus à quel point c'est facile (ou pas). C ++, par exemple, a std::map, std::multimap, std::vector, std::sortet ainsi de suite et ainsi de suite, tous indépendants génériquement du type avaiable de données sous - jacentes stockées. Il n'y a aucun argument que vous pouvez également faire tout cela dans Fortran aujourd'hui, mais cela nécessite des jours et des semaines de travail que vous pourriez utiliser de manière productive pour réellement travailler sur votre application, plutôt que sur les structures de données sous-jacentes.
Wolfgang Bangerth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.