Existem bibliotecas científicas de código aberto que usam o Fortran moderno com OOP?

14

Passei os últimos meses codificando um programa Fortran para resolver um sistema PDE específico (descreve fluxo / combustão de fluidos). Tentei usar o Fortran mais recente e os novos recursos de OOP que o moderno Fortran possui. Estou trabalhando por conta própria e não tenho nenhum guru do Fortran ao meu lado para fazer perguntas; portanto, uma maneira natural de aprender para mim seria olhar para outras bibliotecas / solucionadores que usam o Fortran moderno.

Infelizmente, todas as bibliotecas de Fortran por aí parecem escritas em Fortran bastante antigo, no topo do Fortran90. Portanto, eu mesmo tive que pensar no design da classe e na interação. E não estou certo de que fiz direito, especialmente se alguém olhar de uma perspectiva de desempenho. Mas talvez eu tenha perdido alguma coisa e há pacotes científicos modernos escritos se Fortran e usando OOP?

Existem muitas boas bibliotecas C ++ para aprender (OpenFOAM, deal.II e mais) e também bibliotecas Python. Esses idiomas também têm uma comunidade maior em geral. Talvez seja melhor largar o Fortran e mudar de idioma se eu quiser aprender pelo exemplo?

tiam
fonte
Jack, parece que seu comentário foi muito grande: "(O restante deste comentário é para atender ao requisito de duração.)". Isso gera esperança dentro de mim, então edite-o para que todos possam lê-lo: D.
tiam 24/05
2
Desculpe, meu comentário foi enganador, pois eu estava respondendo sua última pergunta. Quero dizer que, se você quiser aprender OOP moderno, por exemplo, a partir de bibliotecas completas, C ++ é o caminho a percorrer. Desculpe; Não estou ciente de nenhuma das melhores bibliotecas modernas de código-fonte Fortran.
22612 Jack Poulson
6
Gostaria de advertir que o C ++ já é uma encarnação distorcida da orientação a objetos, e muitas bibliotecas abusam ainda mais dele (verdadeiro para qualquer linguagem). Concordo que é importante olhar além do Fortran, mas também é importante olhar além do C ++. Aprender a expressar conceitos em linguagens de vários tipos diferentes (orientado a objetos, genérico e funcional; estático e dinâmico) vale a pena, mesmo se você voltar a uma linguagem simples como C para o seu trabalho "real".
Jed Brown

Respostas:

10

Existem códigos CFD modernos que você pode pesquisar. Por exemplo ...

Fluidez : código CFD multifásico (FE) de uso geral; Mesmo a AMR totalmente não estruturada

WRF : Sistema de previsão meteorológica modelo de próxima geração da NCAR

Código Saturno : código CFD (FV) de uso geral; Alguns recursos listados na Wikipedia

Existem códigos Fortran modernos semelhantes para análise estrutural.

Mas eles podem não usar os recursos completos do F2003 devido à falta de suporte generalizado ao compilador. A maioria dos novos compiladores suporta grande parte do F2003 (consulte os documentos do Fórum ACM SIGPLAN Fortran), mas leva tempo para ter uma ampla base de usuários. O Debian stable, por exemplo, possui o GCC 4.4.5; portanto, de um modo geral, você não deve esperar que seus usuários tenham algo melhor (isto é, 4.5 / 4.6 / 4.7).

Quando os compiladores do F2003 se espalharem, você verá bibliotecas / códigos que usam os recursos do F2003.

Por enquanto, você pode olhar para este livro de Damian Rouson sobre como usar os recursos de OOP.

stali
fonte
É isso mesmo, o F2003 está atualizando recentemente (para minha própria biblioteca, decidi ficar com o F95 para máxima portabilidade). Veremos mais códigos escritos no F2003 ou mesmo no F2008 em breve.
Ondřej Čertík
Muito bom ponto. Espero que vejamos mais códigos de novo padrão nos próximos anos.
25712
Damian Rouson trabalha no ForTrillinos , que é uma interface moderna de fortran para o Projeto Trillinos .
Jeremy Kozdon
7

Se você quiser aprender pelo exemplo, eu recomendaria o rosettacode , um site de programação muito útil . Lá você encontra muitos exemplos de problemas escritos comparativamente em vários idiomas diferentes.

Talvez ainda mais interessante para você seja o wiki do Fortran , e aqui está uma seção sobre OOP no Fortran que pode ser útil.

Fortan está indo muito bem - não vamos desistir!

John Travolta
fonte
Eu também gosto do Fortran :). Eu conheço o site wiki, os livros do Matcalds também são muito bons e os tutoriais do IGP. Mas ver algum material real seria bom!
tiam 24/05
O estilo de codificação do código CFD dolfyn é realmente abrangente e "moderno em Fortran". Lá você pode encontrar exemplos de algumas estruturas de dados, como listas vinculadas, etc., que podem ser informativas e um pouco de OOP, se bem me lembro.
Johntra Volta 24/05
4

Concordo com o comentário de @JackPoulson. Não conheço nenhuma biblioteca de código aberto escrita no Fortran moderno. Portanto, a resposta para sua pergunta específica sobre a necessidade de mudar para C ++ para aprender pelo exemplo é um infeliz "sim". Mas, para ser claro, eu sei que pelo menos uma biblioteca existe, que foi escrita quase exclusivamente no Fortran moderno, de olho no OOP, portanto é possível (e vale a pena). Porém, esta biblioteca não é de código aberto, portanto, não o ajudará a atingir seu objetivo de aprendizado.

No entanto, é provável que você também relute em jogar fora o que já concluiu. Se você ainda estiver interessado em buscar o Fortran para isso e tiver perguntas específicas sobre desenvolvimento, recomendamos que você as peça no StackOverflow. Existem alguns desenvolvedores de Fortran altamente qualificados ativos lá, que são mais do que felizes em ajudar.

Barron
fonte
3

Estou um pouco atrasado com este, mas você deve dar uma olhada na versão 3 da biblioteca de álgebra linear paralela PSBLAS , que aproveita ao máximo os recursos modernos do Fortran, como herança e polimorfismo. Há também um artigo aqui, onde eles compararam o desempenho dessa versão com as versões mais antigas, que mantiveram a F90 / F95. Surpreendentemente, a diferença de velocidade foi insignificante no geral.

Daniel Shapero
fonte
1

Não sei em qual dialeto do Fortran está escrito, mas há o código PHAML de William Mitchell que é um código Fortran FEM de uso geral.

Admito que não sou imparcial na discussão de Fortran vs C ++, mas gostaria de salientar que você tem dificuldade em encontrar um código FEM moderno baseado em Fortran e ao mesmo tempo encontrar muitos códigos baseados em C ++ algo do que a comunidade como um todo pensa que é o caminho a percorrer. Obviamente, não há nada de errado em tentar criar seu próprio código em um idioma que você goste e que esteja familiarizado, mas sua breve pesquisa já mostra que você está construindo uma ilha. Você pode levar isso em consideração.

Wolfgang Bangerth
fonte
-1

Existe a biblioteca fortran de código aberto forDat da ffr Engineering que usa os recursos do oop 2003

Felix Frischmann
fonte
1
Bem-vindo ao SciComp! Sua resposta não é realmente útil, uma vez que você não descreve a) o que o forDat faz eb) quais recursos de OOP usam o forDat. Você também está perdendo uma oportunidade aqui, pois como desenvolvedor do forDat (que você deve divulgar, por sinal, consulte scicomp.stackexchange.com/help/behavior ), você também pode mencionar por que o forDat está usando esses recursos.
Christian Clason