Un código de octubre en Fortran

10

Soy nuevo en computación científica. Estoy buscando una implementación Fortran (preferiblemente f90) de un Octree.

Mi problema requiere un Octree que divide mi dominio hasta que no haya más de algunas partículas de N (o fuentes donde conozco el valor de densidad que se puede conectar en un método de ecuación integral para resolver una ecuación como la ecuación de Laplace) en cualquier cuadro.

Todo lo que pude encontrar fue esta implementación de C ++ . Quiero saber si ya existen bibliotecas Fortran que pueda usar.

Además, se apreciarán buenas recomendaciones en papel sobre las implementaciones de Octree en Fortran que se pueden utilizar para que la aplicación de métodos de ecuación integral rápida en el cuadro computacional sea fácil.

rivendell
fuente
Prueba BoxLib. Según el manual, hay una versión pura de Fortran 90. Ver ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Respuestas:

9

No tengo experiencia con Octrees, pero cada vez que hay una buena biblioteca de C ++ que quiero usar en Fortran, simplemente escribo un controlador C simple, generalmente algunas funciones de C que hacen exactamente lo que necesito. Luego los llamo desde Fortran usando el módulo iso_c_binding. Esto tiene la gran ventaja de que reutiliza una biblioteca bien probada con una comunidad a su alrededor.

Para obtener información sobre cómo usar iso_c_binding, escribí alguna información aquí:

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

esta información particular es para llamar a Fortran desde C. Puedo ver que debo actualizarla. Aquí está mi código donde llamo a la biblioteca C ++ desde Fortran, el primer enlace es el controlador C simple, el segundo enlace es una interfaz Fortran, y luego lo llamo como cualquier otra subrutina Fortran:

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
fuente
6

Parece que estás muy decidido a usar Fortran. Los octrees, cuando se implementan de manera eficiente, son estructuras de datos bastante complejas y, como tales, se adaptan mejor a los lenguajes de programación que tienen más soporte para esto, como C / C ++. Hay una serie de implementaciones de muy alta calidad en C / C ++ que podría usar.

Wolfgang Bangerth
fuente
¡Gracias por tu respuesta! Pero, los métodos integrales rápidos que debo usar están escritos en Fortran. También sería natural escribir el código de Octree en Fortran.
rivendell
¿Qué métodos integrales rápidos? En su mayoría, están envueltos en idiomas de nivel superior, que también envuelven notablemente a los octrees. . .
meawoppl
¿Qué soporte para implementaciones de octree eficientes falta en Fortran (moderno) en comparación con C? El único inconveniente real que conozco es que faltan enteros sin signo, por lo que debe escribir explícitamente algunas operaciones bit a bit.
Jannis Teunissen
@JannisTeunissen: no es que Fortran 200x no tenga formas de crear estructuras de datos complejas, sino más bien lo fácil que es (o no). C ++, por ejemplo, ha std::map, std::multimap, std::vector, std::sort, y así sucesivamente y así sucesivamente, todos independientes genéricamente disponibles del tipo de datos subyacente que se almacena. No hay argumento de que pueda hacer todo esto también en Fortran hoy, pero requiere días y semanas de trabajo que podría utilizar productivamente para trabajar realmente en su aplicación, en lugar de en las estructuras de datos subyacentes.
Wolfgang Bangerth