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.
fortran
integral-equations
rivendell
fuente
fuente
Respuestas:
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
fuente
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.
fuente
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.