Um código Octree em Fortran

10

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!

Rivendell
fonte
Experimente o BoxLib. De acordo com o manual, existe a versão pura do Fortran 90. Veja ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Respostas:

9

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

Ondřej Čertík
fonte
6

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.

Wolfgang Bangerth
fonte
Obrigado pela sua resposta! Mas, os métodos integrais rápidos que devo usar estão escritos em Fortran. Seria natural escrever também o código Octree no Fortran.
Rivendell # 25/13
Quais métodos integrais rápidos? Eles são principalmente envoltos em idiomas de nível superior, que também envolvem também octrees. . .
meawoppl
Que suporte para implementações eficientes de octree está faltando no Fortran (moderno) comparado ao C? A única desvantagem real que conheço é a falta de números inteiros não assinados, para que você precise escrever explicitamente algumas operações bit a bit.
Jannis Teunissen
@JannisTeunissen - não é que o Fortran 200x não tenha maneiras de criar estruturas de dados complexas, é mais sobre como é fácil (ou não). C ++, por exemplo, tem 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.
precisa saber é o seguinte