Существуют ли научные библиотеки с открытым исходным кодом, которые используют современный Фортран с ООП?

14

Последние пару месяцев я потратил на написание программы на Фортране для решения конкретной системы PDE (описывает поток / сгорание жидкости). Я попытался использовать новейший стандарт Fortran и новые возможности OOP, которые есть у современного Fortran. Я работаю самостоятельно, и у меня нет гуру Фортрана, чтобы задавать вопросы, поэтому естественным способом обучения для меня было бы посмотреть на другие библиотеки / решатели, которые используют современный Фортран.

К сожалению, все библиотеки Фортрана, кажется, написаны в довольно старых вершинах Фортрана, Fortran90. Поэтому я должен был сам продумать дизайн класса и взаимодействие. И я совсем не уверен, что сделал все правильно, особенно если посмотреть с точки зрения преформанса. Но, возможно, я что-то упустил, и есть ли современные научные пакеты, написанные на Фортране и использующие ООП?

Есть много хороших библиотек C ++ для изучения (OpenFOAM, deal.II и более), а также библиотеки Python. Эти языки в целом также имеют большее сообщество. Может быть, лучше отказаться от Фортрана и поменять язык, если я хочу учиться на собственном примере?

Tiam
источник
Джек, кажется, твой комментарий был слишком большим: «(Остальная часть этого комментария должна соответствовать требованию к длине.)». Это вселяет надежду во меня, поэтому, пожалуйста, отредактируйте это, чтобы каждый мог прочитать это: D.
Tiam
2
Извините, мой комментарий вводил в заблуждение, так как я отвечал на ваш последний вопрос. Я имею в виду, что если вы хотите изучить современный ООП на примере полноценной библиотеки, C ++ - это путь. Сожалею; Мне неизвестны какие-либо лучшие в своем роде современные библиотеки Фортрана с открытым исходным кодом.
Джек Поулсон
6
Я хотел бы предостеречь, что C ++ уже является чем-то вроде искаженного воплощения объектной ориентации, и многие библиотеки еще больше его используют (верно для любого языка). Я согласен с тем, что важно смотреть за пределы Фортрана, но важно также смотреть за пределы C ++. Изучение того, как выражать понятия в языках разных типов (объектно-ориентированный, универсальный и функциональный; статический и динамический), того стоит, даже если вы вернетесь к простому языку, такому как C, для своей «настоящей» работы.
Джед Браун

Ответы:

10

Существуют современные коды CFD, которые вы можете посмотреть. Например ...

Текучесть : код многофазного CFD (FE) общего назначения; Даже делает полностью неструктурированной AMR

WRF : система прогнозирования погоды с числовой моделью следующего поколения от NCAR

Субботний код : код CFD (FV) общего назначения; Некоторые функции перечислены в Википедии

Существуют аналогичные современные коды Фортрана для структурного анализа.

Но они могут не использовать все возможности F2003 из-за отсутствия широкой поддержки компиляторов. Большинство новых компиляторов поддерживают большие части F2003 (см. Документы ACM SIGPLAN Fortran Forum), но для того, чтобы иметь широкую базу пользователей, требуется время. Например, стабильная версия Debian имеет GCC 4.4.5, поэтому, как правило, не стоит ожидать, что у ваших пользователей будет что-то лучше (например, 4.5 / 4.6 / 4.7).

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

Сейчас вы можете посмотреть на эту книгу Дамиана Роусона о том, как использовать возможности ООП.

Stali
источник
Правильно, F2003 только-только догоняет (для моей собственной библиотеки я решил придерживаться F95 для максимальной мобильности). Скоро мы увидим больше кода, написанного на F2003 или даже на F2008.
Ондржей Чертик
Очень хороший момент. Я надеюсь, что мы увидим больше нового стандарта кода в ближайшие годы.
Tiam
Дамиан Роусон работает над ForTrillinos , который является современным интерфейсом Fortran для проекта Trillinos .
Джереми Коздон
7

Если вы хотите учиться на примере, я бы порекомендовал rosettacode , сайт , посвященный программированию. Там вы можете найти множество примеров задач, сравнительно написанных на нескольких языках.

Может быть, еще более интересным для вас будет вики-страница Fortran , и вот раздел о ООП в Фортране, который может быть полезен.

У Фортана все в порядке - давайте не будем сдаваться!

Johntra Volta
источник
Сам Фортран мне нравится :). Я знаю вики-сайт, книги Маткалда также очень хороши, как и учебники PGI. Но увидеть какой-нибудь реальный материал было бы неплохо!
Тиам
Стиль кодирования CFD-кода dolfyn действительно всеобъемлющий и «современный Fortran грамотный». Там вы можете найти примеры некоторых структур данных, таких как связанные списки и т. Д., Которые могут быть информативными, и немного ООП, если я правильно помню.
Johntra Volta
4

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

Тем не менее, вы также неохотно выбрасываете то, что уже завершили. Если вы все еще заинтересованы в поиске Fortran для этого и у вас есть конкретные вопросы по разработке, я бы посоветовал вам задать их в StackOverflow. Там работают несколько высококвалифицированных разработчиков на Фортране, которые более чем рады помочь.

Barron
источник
3

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

Даниэль Шаперо
источник
1

Я не знаю, на каком диалекте Фортрана он написан, но есть код PHAML Уильяма Митчелла, который является универсальным кодом Фортрана FEM.

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

Вольфганг Бангерт
источник
-1

Существует библиотека с открытым исходным кодом forDat от ffr Engineering, которая использует функции oop 2003

Феликс Фришманн
источник
1
Добро пожаловать в SciComp! Ваш ответ не очень полезен, поскольку вы не описываете а) что делает forDat и б) какие функции ООП для dat использует. Здесь вы также упускаете возможность, поскольку, как разработчик forDat (о котором вам следует рассказать, кстати, см. Scicomp.stackexchange.com/help/behavior ), вы также можете указать, почему forDat использует эти функции.
Кристиан Клэйсон