Я новичок в научных вычислениях. Я ищу Fortran (предпочтительно f90) реализацию Octree.
Моя проблема требует Octree, которая делит мою область, пока в любом блоке не будет больше, чем несколько N частиц (или источников, где я знаю значение плотности, которое можно включить в метод интегрального уравнения для решения уравнения, подобного уравнению Лапласа).
Все, что я мог найти, это реализация C ++ . Я хочу знать, есть ли уже существующие библиотеки Фортрана, которые я могу использовать.
Кроме того, будут оценены хорошие рекомендации по реализации Octree в Fortran, которые можно использовать для упрощения применения методов быстрого интегрального уравнения к блоку вычислений!
fortran
integral-equations
Ривенделл
источник
источник
Ответы:
У меня нет опыта работы с 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
источник
Вы, кажется, очень настроены на использование Fortran. Octrees, когда они реализованы эффективно, представляют собой довольно сложные структуры данных и, как таковые, лучше подходят для языков программирования, которые имеют большую поддержку для этого, таких как C / C ++. Есть ряд очень качественных реализаций на C / C ++, которые вы можете использовать.
источник
std::map
,std::multimap
,std::vector
,std::sort
, и так далее и так далее, все в общем зависит от доклада доступен базового типа данных, хранящихся. Нет никаких аргументов в пользу того, что вы можете делать все это и на Фортране и сегодня, но для этого требуются дни и недели работы, которые вы могли бы продуктивно использовать для фактической работы над вашим приложением, а не над базовыми структурами данных.