Esistono librerie scientifiche open source che utilizzano il moderno Fortran con OOP?


14

Ho trascorso gli ultimi due mesi a programmare un programma Fortran per risolvere un particolare sistema PDE (descrive il flusso / combustione del fluido). Ho provato a utilizzare il Fortran più recente e le nuove funzionalità OOP moderne di Fortran. Sto lavorando da solo e non ho nessun guru Fortran accanto a me per fare domande, quindi un modo natarale di imparare per me sarebbe quello di guardare altre librerie / solutori che usano il moderno Fortran.

Sfortunatamente tutte le librerie Fortran là fuori sembrano essere scritte in un bel vecchio Fortran, in cima a Fortran90. Pertanto, ho dovuto pensare personalmente attraverso il design di classe e l'interazione. E non sono affatto certo di averlo fatto bene, specialmente se si guarda da una prospettiva di preformance. Ma forse mi sono perso qualcosa e ci sono moderni pacchetti scientifici scritti se Fortran e usando OOP?

Ci sono molte buone librerie C ++ da cui imparare (OpenFOAM, deal.II e altro) e anche librerie Python. Quelle lingue hanno anche una comunità più grande in generale. È forse meglio abbandonare Fortran e cambiare lingua se voglio imparare con l'esempio?


Jack, sembra che il tuo commento sia troppo grande: "(Il resto di questo commento deve soddisfare i requisiti di lunghezza.)". Questo aumenta la speranza dentro di me, quindi per favore modificalo in modo che tutti possano leggerlo: D.
tiam,

2
Mi dispiace, il mio commento è stato fuorviante, poiché stavo rispondendo alla tua ultima domanda. Voglio dire, se vuoi imparare il moderno OOP con l'esempio da librerie complete, C ++ è la strada da percorrere. Scusa; Non sono a conoscenza di nessuna delle librerie Fortran moderne open source migliori.
Jack Poulson,

6
Vorrei mettere in guardia sul fatto che C ++ è già in qualche modo una contorta incarnazione dell'orientamento agli oggetti e che molte biblioteche lo usano ulteriormente (vero per qualsiasi linguaggio). Sono d'accordo che è importante guardare oltre Fortran, ma è importante guardare anche oltre il C ++. Imparare come esprimere concetti in linguaggi di diversi tipi (orientati agli oggetti, generico e funzionale; statico e dinamico) ne varrà la pena anche se torni in un linguaggio semplice come C per il tuo "vero" lavoro.
Jed Brown,

Risposte:


10

Ci sono moderni codici CFD che puoi esaminare. Per esempio ...

Fluidità : codice CFD (FE) multifase per uso generale; Fa anche AMR completamente non strutturato

WRF : sistema di previsione meteorologica modello numerico di prossima generazione di NCAR

Codice Saturne : codice CFD (FV) per uso generale; Alcune funzionalità elencate su Wikipedia

Esistono codici Fortran moderni simili per l'analisi strutturale.

Tuttavia, potrebbero non utilizzare le funzionalità complete di F2003 a causa della mancanza di un ampio supporto di compilazione. La maggior parte dei nuovi compilatori supporta gran parte di F2003 (consultare gli articoli del forum ACM SIGPLAN Fortran) ma ci vuole tempo per avere una vasta base di utenti. Debian stable, ad esempio, ha GCC 4.4.5, quindi in generale non dovresti aspettarti che i tuoi utenti abbiano qualcosa di meglio (es. 4.5 / 4.6 / 4.7).

Quando i compilatori F2003 si diffonderanno, vedrai libs / code che usano le funzionalità di F2003.

Per ora puoi guardare questo libro di Damian Rouson su come utilizzare le funzionalità OOP.


Proprio così, F2003 è stato recentemente in fase di recupero (per la mia libreria ho deciso di rimanere con F95 per la massima portabilità). Vedremo presto più codice scritto in F2003 o anche in F2008.
Ondřej Čertík,

Ottimo punto Spero che vedremo un codice più nuovo nei prossimi anni.
tiam,

Damian Rouson lavora su ForTrillinos , che è una moderna interfaccia fortran per il Progetto Trillinos .
Jeremy Kozdon,

7

Se vuoi imparare con l'esempio, consiglierei rosettacode , un sito di chrestomathy di programmazione. Lì puoi trovare molti problemi di esempio scritti comparativamente in parecchie lingue diverse.

Forse ancora più interessante per te sarebbe il wiki di Fortran , ed ecco una sezione su OOP in Fortran che potrebbe essere utile.

Fortan sta andando bene - non rinunciamo!


Mi piace anche Fortran :). Conosco il sito web wiki, i libri di Matcalds sono anche molto buoni così come i tutorial di IGP. Ma vedere del materiale reale sarebbe bello!
tiam,

Lo stile di codifica del codice CFD di Dolfyn è veramente completo e "moderno letterato Fortran". Lì puoi trovare esempi di alcune strutture di dati come elenchi collegati ecc. Che potrebbero essere informativi e un po 'di OOP se ricordo bene.
Johntra Volta,

4

Sono d'accordo con il commento di @JackPoulson. Non sono a conoscenza di alcuna libreria open source scritta nel moderno Fortran. Quindi la risposta alla tua domanda specifica sulla necessità di passare al C ++ per imparare dall'esempio è uno sfortunato "sì". Ma, per essere chiari, so che esiste almeno una biblioteca che è stata scritta quasi esclusivamente nel moderno Fortran con un occhio verso OOP, quindi è possibile (e utile). Questa libreria non è open source, tuttavia, quindi non ti aiuterà a raggiungere il tuo obiettivo di apprendimento.

Tuttavia, è anche probabile che tu sia riluttante a buttare via ciò che hai già completato. Se sei ancora interessato a perseguire Fortran per questo e hai domande di sviluppo specifiche, ti incoraggio a farle su StackOverflow. Ci sono alcuni sviluppatori Fortran altamente qualificati attivi lì che sono più che felici di aiutarti.


3

Sono un po 'in ritardo su questo, ma dovresti dare un'occhiata alla versione 3 della libreria di algebra lineare parallela PSBLAS , che sfrutta appieno le moderne funzionalità di Fortran come eredità e polimorfismo. C'è anche un documento qui in cui hanno confrontato le prestazioni di quella versione con le loro versioni precedenti, che si sono attenute a F90 / F95. Sorprendentemente, la differenza di velocità era complessivamente trascurabile.


1

Non so in quale dialetto Fortran sia scritto, ma esiste il codice PHAML di William Mitchell che è un codice FEM Fortran generico.

Devo ammettere che non sono imparziale nella discussione su Fortran vs C ++ ma mi piace sottolineare che hai difficoltà a trovare un moderno codice FEM basato su Fortran mentre allo stesso tempo trova un sacco di codici basati su C ++ qualcosa di ciò che la comunità nel suo insieme è la strada da percorrere. Ovviamente non c'è nulla di sbagliato nel provare a costruire il proprio codice in una lingua che ti piace e che conosci, ma il tuo breve sondaggio ti mostra già che stai costruendo un'isola. Si consiglia di tenerne conto.


-1

Esiste la libreria fortran open source forDat di ffr Engineering che utilizza le funzionalità di oop 2003


1
Benvenuto in SciComp! La tua risposta non è davvero utile dal momento che non descrivi a) cosa fa forDat eb) quali funzionalità OOP usa perDat. Ti manca anche un'opportunità qui, poiché come sviluppatore di forDat (che dovresti rivelare, a proposito, vedi scicomp.stackexchange.com/help/behavior ), potresti anche menzionare perché forDat sta usando quelle funzionalità.
Christian Clason,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.