====== Overview of OpenFOAM ====== * OpenFOAM stands for Open Source Field Operation and Manipulation. * OpenFOAM is mainly a C++ library used to solve partial differential equations (PDEs), and ordinary differential equations (ODEs). * OpenFOAM is under active development. It is originally developed by Henry Weller and Hvorje Jasak in Imperial College London and released as open source code in 2004. * At the moment, the development of OpenFOAM have been forked into three main development(( More details [[oscae:software:openfoam:variants| here]])): * openfoam.com (OpenCFD Ltd, ESI Group) * openfoam.org (The OpenFOAM Foundation Ltd - Henry Weller) * foam-extend (Wikki Ltd - Prof Hvorje Jasak) * OpenFOAM are packaged with ready-to-use solvers, pre-processing utilities, and post-processing utilities. * OpenFOAM is licensed under the GNU General Public License (GPL). Therefore, it can be freely distributed with the source code, and run on massively parallel computers. * Industries, academia and research labs makes up the large community of OpenFOAM users and contributors. ==== Features ====== Fluid Dynamics/physical modelling features listed in [[https://cfd.direct/openfoam/features/| CFD Direct (openfoam.org)]]: * Turbulence modelling: (Reynolds-Averaged Simulation (RAS), Large-Eddy Simulation (LES) and Detached-Eddy Simulation (DES, DDES, etc). * Thermophysical modelling * Transport/rheology * Multiphase flows * Rotating flows with multiple reference frames (MRF) * Rotating flows with arbitrary mesh interface (AMI) * Dynamic meshes * Compressible/thermal flows * Conjugate heat transfer * Porous media * Lagrangian particle tracking * Reaction kinetics / chemistry ==== OpenFOAM in General CFD Workflow ====== {{ :public:software:openfoam_cfd_workflow_20220305_120819.png?800 |}} ==== Architecture and Numerics ====== * Discretisation based on Finite Volume Method (FVM), with collocated polyhedral unstructured meshes. * Second order accuracy in space and time. Various discretization schemes are available. * Steady and transient solvers are available. * Pressure-velocity coupling via segregated methods (SIMPLE and PISO). Coupled solvers are under active development. * Massive parallelism through domain decomposition. * All components are implemented in library structure to facilitate the development of customised solvers and applications. ==== OpenFOAM vs commercial CFD applications ====== Most capabilities offered by commercial CFD applications are available in OpenFOAM. However, the main differences are: * There is no native GUI in official release. * The users have to execute each solvers and pre- and post-processing utilities via command line interface (CLI), particularly Linux bash shell. * The users have to directly edit case configurations in human-readable plain text format. * While being tedious and prone to errors, these allow: * automation of large number of runs using user-defined shell scripts. * development of 3rd party GUI and workflows tailored for a specific application. * Official documentation may not be complete, but useful resources are available from various online sources contributed by users/developer community. * Complete source code is accessible, allowing customisation of a solver for a specific need. Therefore OpenFOAM is suitable to be used for research and development. * Most importantly, it is free. No restriction on the number of parallel computing processes makes OpenFOAM typically available in large HPC clusters. ==== GUI for OpenFOAM ====== * No official GUI * But many 3rd party GUI available, * [[https://engys.com/products/helyx-os | HELYX-OS ]] * [[https://www.esi-group.com/products/computational-fluid-dynamics/visual-environment-for-openfoam | Desktop application suite from ESI ]] * Web application suite at [[https://www.simscale.com/product/cfd/ | simscale.com]] * See more at [[https://openfoamwiki.net/index.php/GUI]] * It is possible to develop own GUI tailored for a problem of interest, e.g a simple GUI can be quickly written in Python with [[ https://pysimplegui.readthedocs.io/en/latest/ | PySimpleGUI ]] GUI framework + [[ https://openfoamwiki.net/index.php/Contrib/PyFoam | PyFoam ]] utilities ===== Learn ====== * Serious use of OpenFOAM can be a good reason to be exposed with linux-based OS and its CLI shell scripting for those uninitiated * It is always recommended to follow official tutorials that will run through simple cases and demonstrate how OpenFOAM utilities can help including useful tips, e.g., [[https://www.openfoam.com/documentation/tutorial-guide]] * More up-to-date and detailed description can be found in official user-guide, e.g., [[ https://www.openfoam.com/documentation/user-guide ]] * There are also good learning materials from the community * [[ https://openfoamwiki.net/index.php/Main_Page | OpenFOAMWiki ]] * [[ https://www.cfd-online.com/ | CFD Online ]] * [[ http://www.wolfdynamics.com/tutorials.html | Wolf Dynamics ]]. * While they offer paid training, most of their training slides and case files are available for free. Their [[ https://figshare.com/articles/media/OpenFOAM_Introductory_Training/16783657?file=31049242 | 1000+ pages introductory training slides]] can be worth to follow, covering most important aspects of OpenFOAM comprehensively. * Other good resources can be found scattered in the internet. Users have to be careful in judging whether the materials are up-to-date or compatible with their version at hand, and to see if appropriate changes are required * Ultimately, understanding the actual code is the only way to know the exact implementation and behaviour of the software. However, this is usually not required unless for a niche and advanced applications and for precise solution control.