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!
la source
Réponses:
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
la source
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.
la source
std::map
,std::multimap
,std::vector
,std::sort
et 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.