OpenFOAM (Open Field Operation And Manipulation) è principalmente un toolboxC++ per customizzare ed estendere soluzioni software per la simulazione. È un finalizzatore (solver) basato sulla teoria della meccanica dei continui che include la fluidodinamica computazionale (CFD, Computational Fluid Dynamics). Viene fornito con una estesa libreria di solver, sempre ampliata, applicabile ad una generalità di problemi.
OpenFOAM è uno dei primi maggiori pacchetti software scientifici scritti in C++.
Ci sono tre versioni principali di OpenFOAM, gratuite e che sono rilasciate sotto la licenza GPL:
Oltre a queste versioni principali, ci sono diverse altre varianti mantenute e rilasciate per specifiche applicazioni da altre entità. Ad esempio: blueCFD®-Core, SIMSCALE, e iconCFD.
È prodotto dalla società britannica OpenCFD Ltd. e dal 2004, e nel 2007 il nome OpenFOAM è stato registrato come marchio[4] e garantisce l'uso del suo marchio OpenFOAM alle terze parti tramite licenza. ESI Group e la OpenFOAM Foundaation Ltd. possono attualmente utilizzare il nome e il dominio.
L'uso del nome FOAM viene fatto risalire per la prima volta come utility di post-processing scritta da Charlie Hill all'inizio degli anni '90 nel gruppo del Prof. David Gosman all'Imperial College di Londra[5].
Ciònonostante, i primi sviluppi di FOAM (poi OpenFOAM) come strumento di simulazione fluidodinamica furono iniziati da Henry Weller allo stesso istituto utilizzando come linguaggio C++, invece del de facto standard del periodo, FORTRAN. Henry Weller e Hrvoje Jasak continuarono a sviluppare OpenFOAM sotto il nome di Nabla Ltd, per quasi un decennio[6]. Per alcuni anni, FOAM fu venduto come codice commerciale dalla Nabla Ltd.[7], ma a partire dal 2004, FOAM venne rilasciato sotto licenza GPL e rinominato OpenFOAM.
Dopo il fallimento della Nabla Ltd. nel 2004, Henry Weller, Chris Greenshields e Mattijs Janssens fondarono OpenFOAM Ltd per sviluppare e rilasciare OpenFOAM[8]. Allo stesso tempo, Hrvoje Jasak fonda la compagnia di consulenza Wikki Ltd[9] e mantiene una fork di OpenFOAM chiamata openfoam-extend.
Dall'8 Agosto 2011, OpenCFD fu acquisita da Silicon Graphics International (SGI)[10]. Dal 12 Settembre 2012, il gruppo ESI annunciò l'acquisizione di OpenCFD Ltd. e del marchio OpenFOAM da SGI[11].
Nel 2014, Welle e Greenshields lasciano il gruppo ESI, e fondano CFD Direct Ltd,[12], creando la fork di OpenFOAM della OpenFOAM Foundation.
La figura seguente presenta un riassunto dello sviluppo cronologico delle tre diverse varianti di OpenFOAM, con le frecce indicanti la direzione del trasferimento di funzionalità tra le diverse versioni. In particolare:
OpenFOAM si confronta con successo con le funzionalità dei maggiori pacchetti software CFD commerciali. Esso si basa sulla scelta degli utenti di utility di pre e post-processing di terze parti, e viene fornito come:
un plugin (paraFoam) per la visualizzazione dei dati finiti e mesh in ParaView.
ampia varietà di convertitori delle griglie tridimensionali permettendo l'importazione da una serie di importanti pacchetti commerciali
un mesher automatico di esaedri per creare le griglie poligonali per le configurazioni in ingegneria.
OpenFOAM è stato concepito come piattaforma per la meccanica dei continui ma è ideale per creare simulazioni in vari ambiti della fisica. La libreria di base di OpenFOAM è quella su cui si basano le capacità di base del codice:
Operazioni su tensori e campi
Discretizzazione di equazioni alle derivate parziali
Metodi a singolo e multiplo sistema di riferimento
Le capacità in dotazione alla libreria sono poi utilizzate per sviluppare le applicazioni. Le applicazioni sono scritte utilizzando la sintassi di alto livello introdotta da OpenFOAM, che cerca di riprodurre la notazione matematica convenzionale. Due categorie di applicazioni esistono:
Solver: risolvono uno specifico problema di meccanica del continuo, effettuando i calcoli necessari
Utility: usate per preparare la mesh, preparare il caso simulativo, e processare i risultati.
Ogni applicazione provvede diverse capacità: ad esempio l'applicazione chiamata blockMesh permette di generare una mesh esaedrica dall'input dell'utente, mentre l'applicazione icoFoam risolve le equazioni di Navier-Stokes per un flusso incomprimibile laminare.
Infine, un set di pacchetti di terze parti sono utilizzati per provvedere funzionalità quali la parallelizzazione e il post processing grafico.
Generazione della mesh: creano la griglia computazionale a partire da un file di input (blockMesh) o a partire da una file che rappresenti la geometria d'interesse, che viene meshata con una griglia a dominanza esaedrica (snappyHexMesh).
Conversione della mesh: convertono griglie generate con altri meshatori in mesh compatibili con OpenFOAM
Manipolazione della mesh: permettono di effettuare operazioni specifiche sulla mesh, come raffinamento locale, definizione di regioni, ed altre.
Utility di parallelizzazione: Permettono di decomporre, ricostruire o ridistribuire il caso per permettere la simulazione in parallelo
Pre-processing: utility per preparare le simulazioni
Post-processing: utility per processare i risultati.
Utility di manipolazione delle superfici: per preparare le geometrie da utilizzare per il setup dei casi
Oltre ai solvers standard, una delle funzionalità che distinguono OpenFOAM è la sua relativa facilità di creazione soluzioni solvers customizzate. OpenFOAM consente all'utente di utilizzare la sintassi che assomigliano molto alle equazioni alle derivate parziali in fase di soluzione.
L'utente di OpenFOAM può creare oggetti personalizzati, come condizioni al contorno o modelli di turbolenza, che funzionano con il resto della libreria, senza la necessità di modificare o ricompilare il codice sorgente esistente. OpenFOAM raggiunge questo obiettivo combinando costruttori virtuali con l'uso di classi base semplici come interfacce. Ciò da ad OpenFOAM una buona espandibilità.
FreeFOAM è un fork della suite OpenFOAM. È orientata verso la liberazione di OpenFOAM dal suo sistema di dipendenze, rendendola più portabile e più facile da installare[32]. Il progetto segue da vicino la release ufficiale e non include ulteriori funzionalità. CMake è utilizzato come compilatore.