Чи є наукові бібліотеки з відкритим кодом, які використовують сучасний Fortran разом з OOP?


14

Останні пару місяців я витратив на кодування програми Fortran для вирішення конкретної системи PDE (описується витрата / спалювання рідини). Я спробував використати найновіший стандарт Fortran та нові можливості OOP, які має сучасний Fortran. Я працюю самостійно і не маю поруч із собою гуру Fortran, який би ставив запитання, тож натаральним способом дізнатися для мене було б перегляд інших бібліотек / вирішувачів, які використовують сучасний Fortran.

На жаль, всі бібліотеки Fortran там, здається, написані досить старими вершинами Fortran, Fortran90. Тому мені довелося самому продумати дизайн-дизайн та взаємодію класів. І я зовсім не сертифікат того, що я зробив це правильно, особливо якщо дивитися з точки зору продуманості. Але, можливо, я щось пропустив, і є сучасні наукові пакети, написані, якщо Fortran і використовує OOP?

Є багато хороших бібліотек C ++, з якими можна вчитися (OpenFOAM, deal.II та багато іншого), а також бібліотеки Python. Ці мови також мають більшу спільність. Чи, можливо, краще кинути Fortran і переключити мову, якщо я хочу вчитися на прикладі?


Джеку, здається, що ваш коментар був занадто великим: "(Решта цього коментаря відповідає вимогам довжини.)". Це викликає надію всередині мене, тому будь ласка, відредагуйте його, щоб усі могли його прочитати: D.
Тіам

2
Вибачте, мій коментар був оманливим, оскільки я відповідав на ваше останнє запитання. Я маю на увазі, що якщо ви хочете вивчити сучасний OOP на прикладі з повноцінних бібліотек, C ++ - це шлях. Вибачте; Мені не відомі жодні з найпопулярніших сучасних бібліотек Фортран з відкритим кодом.
Джек Поульсон

6
Я застеріг би, що C ++ вже є дещо скрученим втіленням об'єктної орієнтації, і багато бібліотек додатково неправильно використовують його (справедливо для будь-якої мови). Я погоджуюся, що важливо дивитися за межі Фортран, але важливо також виходити за межі C ++. Навчитися виражати поняття мовами декількох різних видів (об'єктно-орієнтованих, загальних та функціональних; статичних та динамічних) варто того, навіть якщо ви повернетесь до такої простої мови, як C для своєї "реальної" роботи.
Джед Браун

Відповіді:


10

Є сучасні коди CFD, які ви можете переглянути. Наприклад ...

Флюїдність : багатофазний код CFD (FE) загального призначення; Навіть повністю неструктурований AMR

WRF : Числова модель чисельної моделі прогнозування погоди нового покоління від NCAR

Код Сатурна : код CFD загального призначення (FV); Деякі функції, перелічені у Вікіпедії

Існують подібні сучасні коди Fortran для структурного аналізу.

Але вони можуть не використовувати повнофункціональні можливості F2003 через відсутність широкої підтримки компілятора. Більшість нових компіляторів підтримують великі частини F2003 (див. Статті ACM SIGPLAN Fortran Forum), але для того, щоб мати широку базу користувачів, потрібен час. Наприклад, стабільна програма Debian має GCC 4.4.5, так що в цілому ви не повинні сподіватися, що ваші користувачі матимуть щось краще (тобто 4,5 / 4,6 / 4,7).

Коли компілятори F2003 набудуть широкого поширення, ви побачите libs / code, які використовують можливості F2003.

Зараз ви можете подивитися цю книгу Даміана Русона про те, як використовувати можливості OOP.


Правильно, F2003 нещодавно наздоганяє (для власної бібліотеки я вирішив дотримуватися F95 для максимальної мобільності). Ми незабаром побачимо більше коду, написаного у F2003 або навіть у F2008.
Ondřej Čertík

Дуже хороший момент. Я сподіваюся, що ми побачимо більше нового стандартного коду в найближчі роки.
Тіам

Даміан Русон працює над ForTrillinos , який є сучасним інтерфейсом fortran до проекту Trillinos .
Джеремі Коздон

7

Якщо ви хочете дізнатися на прикладі, я б рекомендував розеткакод , веб-сайт з хростоматії програмування. Там ви можете знайти безліч прикладів проблем, порівняно написаних досить кількома різними мовами.

Можливо, ще цікавішою для вас була б вікі Fortran , і ось розділ про OOP у Fortran, який може бути корисним.

Фортан робить все добре - давайте не будемо здаватися на це!


Мені подобається Фортран :). Я знаю веб-сайт wiki, книги Matcalds також дуже хороші, а також підручники PGI. Але побачити якийсь реальний матеріал було б добре!
Тіам

Стиль кодування dolfyn CFD-коду є дійсно всеосяжним та "сучасним грамотою Fortran". Там ви можете знайти приклади деяких структур даних, таких як пов’язані списки тощо, які можуть бути інформативними і трохи OOP, якщо я правильно пам’ятаю.
Джоннтра Вольта

4

Я згоден з коментарем @JackPoulson. Мені не відомі жодні бібліотеки з відкритим кодом, написані в сучасному Fortran. Тож відповідь на ваше конкретне питання про необхідність переходу на C ++, щоб навчитися на прикладі, - невдале «так». Але, щоб бути зрозумілим, я знаю, що принаймні одна бібліотека існує, написана майже виключно в сучасному Фортрансі з оглядом на ООП, тому це можливо (і варто). Однак ця бібліотека не є відкритим кодом, тому вона не допоможе досягти мети навчання.

Однак, ймовірно, ви також неохоче викинете те, що вже закінчили. Якщо ви все ще зацікавлені в пошуку за цим Fortran і маєте конкретні питання щодо розвитку, я б радив вам задати їх на StackOverflow. Там працює кілька висококваліфікованих розробників Fortran, які з радістю допомагають.


3

Я трохи запізнююся на цьому, але ви повинні ознайомитись з версією 3 паралельної бібліотеки лінійних алгебр PSBLAS , яка повністю використовує сучасні особливості Fortran, такі як успадкування та поліморфізм. Там також папери тут , де вони порівняли продуктивність цієї версії з їх старими версіями, які застрягли в F90 / F95. Дивно, але різниця швидкостей була загалом незначною.


1

Я не знаю, на якому діалекті Fortran написано, але є PHAML-код Вільяма Мітчелла, який є загальним призначенням FEM-коду Fortran.

Я визнаю, що я не є неупередженим в обговоренні Fortran vs C ++, але хочу зазначити, що вам важко знайти сучасний FEM-код, заснований на Fortran, і в той же час знайти цілу кількість кодів на основі C ++. щось із того, що думає громада в цілому - це шлях. Звичайно, немає нічого поганого в спробі побудувати свій власний код мовою, яка вам подобається і вам відома, але ваше коротке опитування вже показує, що ви будуєте острів. Ви можете взяти це до уваги.


-1

Існує бібліотека fortran з відкритим кодом forDat від ffr Engineering, яка використовує функції oop 2003


1
Ласкаво просимо до SciComp! Ваша відповідь не дуже корисна, оскільки ви не описуєте а) що робить ForDat і б) які функції OOP використовує forDat. Тут вам також не вистачає можливості, оскільки як розробник forDat (який ви повинні розкрити, до речі, див. Scicomp.stackexchange.com/help/behavior ), ви також можете зазначити, чому forDat використовує ці функції.
Крістіан Класон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.