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?
Respostas:
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.
fonte
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!
fonte
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.
fonte
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.
fonte
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.
fonte
Existe a biblioteca fortran de código aberto forDat da ffr Engineering que usa os recursos do oop 2003
fonte