Последние пару месяцев я потратил на написание программы на Фортране для решения конкретной системы PDE (описывает поток / сгорание жидкости). Я попытался использовать новейший стандарт Fortran и новые возможности OOP, которые есть у современного Fortran. Я работаю самостоятельно, и у меня нет гуру Фортрана, чтобы задавать вопросы, поэтому естественным способом обучения для меня было бы посмотреть на другие библиотеки / решатели, которые используют современный Фортран.
К сожалению, все библиотеки Фортрана, кажется, написаны в довольно старых вершинах Фортрана, Fortran90. Поэтому я должен был сам продумать дизайн класса и взаимодействие. И я совсем не уверен, что сделал все правильно, особенно если посмотреть с точки зрения преформанса. Но, возможно, я что-то упустил, и есть ли современные научные пакеты, написанные на Фортране и использующие ООП?
Есть много хороших библиотек C ++ для изучения (OpenFOAM, deal.II и более), а также библиотеки Python. Эти языки в целом также имеют большее сообщество. Может быть, лучше отказаться от Фортрана и поменять язык, если я хочу учиться на собственном примере?
Ответы:
Существуют современные коды 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.
Сейчас вы можете посмотреть на эту книгу Дамиана Роусона о том, как использовать возможности ООП.
источник
Если вы хотите учиться на примере, я бы порекомендовал rosettacode , сайт , посвященный программированию. Там вы можете найти множество примеров задач, сравнительно написанных на нескольких языках.
Может быть, еще более интересным для вас будет вики-страница Fortran , и вот раздел о ООП в Фортране, который может быть полезен.
У Фортана все в порядке - давайте не будем сдаваться!
источник
Я согласен с комментарием @JackPoulson. Я не знаю ни о каких библиотеках с открытым исходным кодом, написанных на современном Фортране. Таким образом, ответ на ваш конкретный вопрос о необходимости перехода на C ++, чтобы учиться на собственном примере, - неудачное «да». Но, чтобы быть ясным, я знаю, что существует по крайней мере одна библиотека, которая была написана почти исключительно на современном Фортране с ориентацией на ООП, так что это возможно (и стоит). Эта библиотека не является открытым исходным кодом, поэтому она не поможет вам достичь вашей цели обучения.
Тем не менее, вы также неохотно выбрасываете то, что уже завершили. Если вы все еще заинтересованы в поиске Fortran для этого и у вас есть конкретные вопросы по разработке, я бы посоветовал вам задать их в StackOverflow. Там работают несколько высококвалифицированных разработчиков на Фортране, которые более чем рады помочь.
источник
Я немного опоздаю с этим, но вам стоит взглянуть на версию 3 библиотеки параллельной линейной алгебры PSBLAS , которая в полной мере использует современные возможности Fortran, такие как наследование и полиморфизм. Там также бумаги здесь , где они сравнили производительность этой версии с их старыми версиями, которые застряли в F90 / F95. Удивительно, но разница в скорости была незначительной в целом.
источник
Я не знаю, на каком диалекте Фортрана он написан, но есть код PHAML Уильяма Митчелла, который является универсальным кодом Фортрана FEM.
Я признаю, что я не беспристрастен в обсуждении Fortran против C ++, но я хотел бы отметить, что вам трудно найти современный FEM-код, основанный на Fortran, и в то же время найти целый ряд кодов, основанных на C ++, говорит то, что думает сообщество в целом, - это путь. Конечно, нет ничего плохого в том, чтобы пытаться создать свой собственный код на языке, который вам нравится и с которым вы знакомы, но ваш краткий опрос уже показывает, что вы строите остров. Вы можете принять это во внимание.
источник
Существует библиотека с открытым исходным кодом forDat от ffr Engineering, которая использует функции oop 2003
источник