OpenFOAM (Open Source Field Operation and Manipulation) softverski je paket u C++ za razvoj prilagođenih numeričkih solvera i pred/post procesnih alata za rješavanje problema u mehanici kontinuuma, uključujući računalni dinamiku fluida. OpenFOAM je distribuiran kao slobodan softver otvorenog koda pod licencom GNU General Public License.
OpenFOAM (izvorno, FOAM) stvorio je Henry Weller 80-ih godina dvadesetog stoljeća na Imperial College, London, u svrhu razvijanja moćnije i fleksibilnije simulacijske platforme od tadašnje standardne, FORTRAN. Zbog svoje modularnosti i objektno orijentiranih značajki kao programski jezik izabran je C++. Godine 2004. Henry Weller, Chris Greenshields i Mattijs Janssens osnivaju OpenCFD Ltd kako bi razvili i distribuirali OpenFOAM.[1] 8.kolovoza 2011. OpenCFD kupila je tvrtka Silicon Graphics International (SGI).[2] Istovremeno, autorsko pravo OpenFOAM-a prebačeno je na OpenFOAM Foundation, novoosnovanu, neprofitnu organizaciju koja upravlja OpenFOAM-om i distribuira ga široj javnosti. 12.rujna 2012. ESI Group objavljuje da kupuje OpenCFD Ltd od SGI-a.[3] Weller i Greenshields 2014. napuštaju ESI Group i nastavljaju razvoj i upravljanje OpenFOAM-om preko OpenFOAM Foundation, na CFD Direct-u.[4] CFD Direct nastavio je razvoj distribucije poznat kao OpenFOAM, dok ESI Group sada samostalno razvija OpenFOAM-plus.
Sintaksa
Jedna od istaknutih značajki OpenFOAM-a jest njegova sintaksa za tenzorske operacije i parcijalne diferencijalne jednadžbe koja sliči jednadžbama koje se rješavaju. Na primjer,[5] jednadžbu:
Ova sintaksa, postignuta korištenjem objektno orijentiranog programiranja i preopterećenih operatora, omogućuje korisnicima stvaranje prilagođenih rješenja s relativnom lakoćom. Međutim, prilagodba koda postaje izazovnija s produbljivanjem u OpenFOAM biblioteku, zbog nedostatka dokumentacije i teške uporabe metaprogramiranja.
Fleksibilnost rada
Korisnici mogu izraditi prilagođene objekte, kao što su rubni uvjeti ili modeli turbulencije, koji će raditi bez potrebe za izmjenom postojećeg izvornog koda. OpenFOAM postiže to kombiniranjem virtualnih konstruktora uz korištenje pojednostavljenih osnovnih klasa kao sučelja. Rezultat je dobra fleksibilnost rada OpenFOAM-a.
OpenFOAM je konstituiran od velike standardne biblioteke koja nudi osnovne sposobnosti koda:
Tenzorske operacije
Diskretizacija parcijalnih diferencijalnih jednadžbi pomoću sintakse čitljive ljudima
Mogućnosti koje pruža biblioteka koriste se za razvoj aplikacija. Aplikacije su zapisane pomoću sintakse, razvijene od strane OpenFOAM-a, koja ima cilj reproducirati konvencionalnu matematičku notaciju. Postoje dvije kategorije aplikacija:
Solvers: izvode stvarni izračun za rješavanje specifičnog problema mehanike kontinuuma
Utilities: koriste se za pripremu mreže, postavljanje simulacijskog slučaja, te obradu rezultata
Svaka aplikacija pruža specifične mogućnosti: na primjer, aplikacija zvana blockMesh koristi se za generiranje mreža iz ulazne datoteke koju je dao korisnik, dok druga aplikacija pod nazivom icoFoam rješava Navier-Stokesove jednadžbe za nestlačivo laminarno strujanje.
Osim standardnih solvera, OpenFOAM sintaksa omogućuje jednostavno kreiranje prilagođenih solvera.
OpenFOAM alati podjeljeni su u sljedeće grupe:
alati za rad s mežama
generiranje mreža: generiraju računalne rešetke počevši od ulazne datoteke (blockMesh) ili iz generičke geometrije navedene kao STL datoteka, koja je automatski povezana s hex-dominantnim rešetkama (snappyHexMesh)
pretvorba mreže: oni pretvaraju rešetke generirane drugim alatom u OpenFOAM format
manipulacija mrežom: obavljaju specifične operacije na mreži, kao što su lokalno usavršavanje, definiranje područja i druge
usluge paralelne obrade: oni pružaju alate za rastavljanje, rekonstrukciju i ponovnu distribuciju računalnog slučaja za obavljanje paralelnih izračuna
pred-procesni alati: alati za pripremu simulacijskih slučajeva
post-procesni alati: alati za obradu rezultata simulacijskih slučajeva, uključujući dodatak za sučelje OpenFOAM i ParaView
termodinamički procesi
Kako bi se mogli riješiti sustavi parcijalnih diferencijalnih jednadžbi, u OpenFOAM-u primjenjuju se sljedeće sheme diskretizacije koje su implementirane u C ++ programsku biblioteku:
vodič za programere nije dovoljno detaljan zbog čega je učenje dugotrajno kada je potrebno napisati novi program ili dodati funkcionalnost
OpenFOAM+[21] je verzija koju je dodatno razvio ESI Group, a proizlazi iz verzije 3.0.x koju je razvio OpenFOAM Foundation
Extend-Project sa svojom vezijom „foam-extend-3.1“ temelji se na verziji OpenFOAM-1.6 i sadrži dodatne funkcije poput „Radial Basis Function“,[22] „General Grid Interface (GGI)“,„Finite-Flächen-Methode (Finite Area Method, FAM)“ ili „Block Coupled Matrix Solver“.
FreeFOAM[23] ne pruža dodatnu funkcionalnost u odnosu na OpenFOAM, ali pokušava olakšati pokretanje na drugim operacijskim sustavima primjenjujući CMake umjesto OpenFOAM-ovog vlastitog „wmake“ (Weller make). Prebacivanje FreeFOAM-a na CMake primijenio je programer Extend-Project-a kako bi omogućio prebacivanje na Microsoft Windows.
caelus-CML[24] je OpenFOAM podružnica i opisuje se kao "Computational Mechanics Library" koja ukazuje na širok raspon primjena na području CAE.
SwiftBloc[25] i SwiftSna[26] su dvije Python-plug-in skripte za Blender koje olakšavaju stvaranje konfiguracijski datoteka blockMeshDict i snappyHexMeshDict
HELYX-O[27] je grafičko korisničko sučelje za rad s programom automatskog umrežavanja snappyHexMesh
SimScale[28] je simulacijski softver temeljen na oblaku koji integrira OpenFOAM i ostale solvere.
SimFlow[29] je GUI za OpenFOAM. RapideCFD varijanta istog proizvođača također nudi rješavanje jednadžbi na bazi GPU-a.
iconCFD[30] je još jedna komercijalna verzija OpenFOAM-a s grafičkim sučeljem