Код Octree в Фортране

10

Я новичок в научных вычислениях. Я ищу Fortran (предпочтительно f90) реализацию Octree.

Моя проблема требует Octree, которая делит мою область, пока в любом блоке не будет больше, чем несколько N частиц (или источников, где я знаю значение плотности, которое можно включить в метод интегрального уравнения для решения уравнения, подобного уравнению Лапласа).

Все, что я мог найти, это реализация C ++ . Я хочу знать, есть ли уже существующие библиотеки Фортрана, которые я могу использовать.

Кроме того, будут оценены хорошие рекомендации по реализации Octree в Fortran, которые можно использовать для упрощения применения методов быстрого интегрального уравнения к блоку вычислений!

Ривенделл
источник
Попробуйте BoxLib. Согласно инструкции существует чистая версия Fortran 90. См ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
Staļi

Ответы:

9

У меня нет опыта работы с Octrees, но всякий раз, когда в Fortran есть какая-то хорошая библиотека C ++, которую я хочу использовать, я просто пишу простой драйвер C - обычно несколько функций C, которые делают именно то, что мне нужно. Затем я вызываю их из Фортрана с помощью модуля iso_c_binding. Это имеет большое преимущество в том, что вы повторно используете хорошо протестированную библиотеку с сообществом вокруг нее.

Для получения информации о том, как использовать iso_c_binding, я записал некоторую информацию здесь:

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

эта конкретная информация предназначена для вызова Fortran из C. Я вижу, что должен обновить его. Вот мой код, в котором я вызываю библиотеку C ++ из Fortran, первая ссылка - простой драйвер C, вторая ссылка - интерфейс Fortran, а затем я просто называю его, как любая другая подпрограмма Fortran:

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90

Ондржей Чертик
источник
6

Вы, кажется, очень настроены на использование Fortran. Octrees, когда они реализованы эффективно, представляют собой довольно сложные структуры данных и, как таковые, лучше подходят для языков программирования, которые имеют большую поддержку для этого, таких как C / C ++. Есть ряд очень качественных реализаций на C / C ++, которые вы можете использовать.

Вольфганг Бангерт
источник
Спасибо за Ваш ответ! Но быстрые интегральные методы, которые я собираюсь использовать, написаны на Фортране. Было бы естественно написать код Octree и на Фортране.
Ривенделл
Какие быстрые интегральные методы? Все они в основном обернуты в языки более высокого уровня, которые также, в частности, оборачивают октреи. , ,
meawoppl
Какая поддержка эффективных реализаций octree отсутствует в (современном) Fortran по сравнению с C? Единственный реальный недостаток, который я знаю, это отсутствие целых чисел без знака, так что вам нужно явно писать побитовые операции.
Яннис Теуниссен
@JannisTeunissen - дело не в том, что в Fortran 200x нет способов создавать сложные структуры данных, а в том, насколько это легко (или нет). С ++, например, имеет std::map, std::multimap, std::vector, std::sort, и так далее и так далее, все в общем зависит от доклада доступен базового типа данных, хранящихся. Нет никаких аргументов в пользу того, что вы можете делать все это и на Фортране и сегодня, но для этого требуются дни и недели работы, которые вы могли бы продуктивно использовать для фактической работы над вашим приложением, а не над базовыми структурами данных.
Вольфганг Бангерт