Eu sou novo na computação científica. Estou procurando uma implementação Fortran (de preferência f90) de um Octree.
Meu problema requer um Octree que divida meu domínio até que não haja mais do que algumas partículas N (ou fontes em que conheço o valor da densidade que pode ser conectado a um método de equação integral para resolver uma equação como a equação de Laplace) em qualquer caixa.
Tudo o que pude encontrar foi essa implementação em C ++ . Quero saber se já existem bibliotecas Fortran que posso usar.
Além disso, boas recomendações em papel sobre as implementações da Octree no Fortran que podem ser usadas para facilitar a aplicação de métodos rápidos de equação integral na caixa computacional serão apreciadas!
fortran
integral-equations
Rivendell
fonte
fonte
Respostas:
Não tenho experiência com o Octrees, mas sempre que há uma boa biblioteca C ++ que quero usar no Fortran, simplesmente escrevo um driver C simples - normalmente algumas funções C que fazem exatamente o que eu preciso. Então eu os chamo de Fortran usando o módulo iso_c_binding. Isso tem a grande vantagem de você reutilizar uma biblioteca bem testada com uma comunidade ao seu redor.
Para obter informações sobre como usar iso_c_binding, escrevi algumas informações aqui:
http://fortran90.org/src/best-practices.html#interfacing-with-c
essa informação em particular é para chamar Fortran de C. Posso ver que devo atualizá-la. Aqui está o meu código no qual chamo a biblioteca C ++ do Fortran, o primeiro link é o driver C simples, o segundo link é uma interface do Fortran e, então, chamo-o como qualquer outra sub-rotina do Fortran:
https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp
https://github.com/certik/hfsolver/blob/master/src/qc.f90
fonte
Você parece muito disposto a usar o Fortran. Octrees, quando implementados com eficiência, são estruturas de dados bastante complexas e, como tal, mais adequadas para linguagens de programação que têm mais suporte para isso, como C / C ++. Existem várias implementações de alta qualidade no C / C ++ que você pode usar.
fonte
std::map
,std::multimap
,std::vector
,std::sort
, e assim por diante e assim por diante, todos independentes genericamente disponíveis do tipo de dados subjacente a ser armazenado. Atualmente, não há argumento de que você possa fazer tudo isso no Fortran, mas são necessários dias e semanas de trabalho que você poderia usar produtivamente para realmente trabalhar em seu aplicativo, e não nas estruturas de dados subjacentes.