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?


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.


É 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!


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.


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.


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.


-1

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.