Код Октре у місті Фортран


10

Я новачок у наукових обчисленнях. Я шукаю Фортран (бажано f90) впровадження указу.

Моя проблема потребує Октре, який розділяє мій домен, доки в будь-якому полі не буде більше ніж декілька N частинок (або джерел, де я знаю значення щільності, яке можна включити в метод інтегрального рівняння для вирішення рівняння, як рівняння Лапласа).

Все, що я міг знайти, це реалізація C ++ . Хочу знати, чи вже існують бібліотеки Fortran, якими я можу користуватися.

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


Спробуйте BoxLib. Згідно з посібником, існує чиста версія Fortran 90. Див ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
Staļi

Відповіді:


9

Я не маю досвіду роботи з Octrees, але всякий раз, коли є якась приємна бібліотека C ++, яку я хочу використовувати у Fortran, я просто пишу простий драйвер C --- як правило, кілька функцій C, які роблять саме те, що мені потрібно. Потім я телефоную їм з Fortran за допомогою модуля 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 ++, які ви могли використовувати.


Дякую за вашу відповідь! Але швидкі інтегральні методи, які я маю використовувати, написані у Fortran. Було б природно написати код Octree і у Fortran.
rivendell

Які швидкі інтегральні методи? Здебільшого вони загорнуті мовами вищого рівня, які також помітно обгортають октриси. . .
meawoppl

Якої підтримки для ефективних реалізацій octree бракує у (сучасному) Fortran порівняно з C? Єдиний реальний мінус, який я знаю, - це відсутність підписаних цілих чисел, тому вам доведеться чітко писати деякі побітні операції.
Jannis Teunissen

@JannisTeunissen - справа не в тому, що Fortran 200x не має способів створювати складні структури даних, це більше про те, наскільки це легко (чи ні). С ++, наприклад, має std::map, std::multimap, std::vector, std::sort, і так далі і так далі, все в загальному залежить від доповіді доступний базового типу даних, що зберігаються. Немає жодних аргументів, що ви можете зробити все це і у Fortran і сьогодні, але для цього потрібні дні та тижні роботи, які ви могли б продуктивно використати, щоб фактично працювати над вашим додатком, а не над базовими структурами даних.
Вольфганг Бангерт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.