Nivel 1: IntroducciónAmbas·Independiente de versiónTiempo estimado: 15 min

¿Qué es OpenFOAM y cómo funciona?

OpenFOAM (Open Field Operation and Manipulation) no es una aplicación monolítica con interfaz gráfica, sino un conjunto masivo de librerías en C++ orientadas a objetos diseñadas para la mecánica de medios continuos.

En esta lección:Filosofía Open SourceMétodo de Volúmenes Finitos (FVM)Estructura modular en C++Diferencia con solvers comerciales
Campos de flujo y volúmenes finitos en OpenFOAM

¿Qué es OpenFOAM?

OpenFOAM (Open Field Operation and Manipulation) es el software libre y de código abierto líder a nivel mundial para mecánica de fluidos computacional (CFD) y mecánica del continuo.

A diferencia de los códigos comerciales tradicionales (como Ansys Fluent o STAR-CCM+), OpenFOAM no es un único ejecutable con una interfaz gráfica (GUI) integrada, sino una vasta colección de librerías en C++ con más de un millón de líneas de código diseñadas para manipular campos tensoriales y resolver ecuaciones en derivadas parciales discretizadas mediante el Método de Volúmenes Finitos (FVM).


1. ¿Cómo está estructurado OpenFOAM?

OpenFOAM se compone fundamentalmente de tres pilares arquitectónicos:

  1. Librerías principales (OpenFOAM core)*: Clases en C++ para operaciones vectoriales y tensoriales, manejo de mallas polihédricas arbitrarias (fvMesh), esquemas de discretización espacial y temporal, y algoritmos de resolución matricial (GAMG, PCG, PBiCGStab).
  2. Solvers: Programas ejecutables especializados para distintas físicas. Por ejemplo:
  • simpleFoam: Flujo incompresible, turbulento, estacionario (algoritmo SIMPLE).
  • pimpleFoam: Flujo incompresible, transitorio (algoritmo PIMPLE).
  • interFoam: Flujo bifásico inmiscible con captura de interfaz (método VOF).
  • buoyantSimpleFoam: Flujo con flotabilidad y transferencia de calor por convección natural/mixta.
  • rhoSimpleFoam: Flujo compresible con variaciones térmicas y termodinámica de gas ideal.
  1. Utilities (Utilidades de soporte): Herramientas de línea de comandos para:
  • Mallado (blockMesh, snappyHexMesh, checkMesh).
  • Preprocesado (setFields, mapFields, decomposePar).
  • Postprocesado (foamToVTK, reconstructPar, y functionObjects en tiempo de ejecución).

2. La sintaxis matemática de alto nivel en C++

Uno de los mayores logros de diseño de OpenFOAM es su capacidad para escribir ecuaciones diferenciales en C++ de una forma casi idéntica a la notación matemática continua.

Por ejemplo, la ecuación de Navier-Stokes para flujo incompresible:

$$\frac{\partial \mathbf{U}}{\partial t} + \nabla \cdot (\mathbf{U}\mathbf{U}) - \nabla \cdot (\nu \nabla \mathbf{U}) = -\frac{1}{\rho}\nabla p$$

Se traduce en el código fuente de OpenFOAM como:

cpp
1
2
3
4
5
6
7
8
solve ( fvm::ddt(U) + fvm::div(phi, U) - fvm::laplacian(nu, U) == - fvc::grad(p) );
  • El namespace `fvm` (finite volume method) genera contribuciones implícitas a la matriz del sistema lineal $[A][x] = [b]$.
  • El namespace `fvc` (finite volume calculus) calcula términos explícitos evaluados con los valores del paso temporal o iteración anterior.

3. Ventajas e inconvenientes frente a herramientas comerciales

AspectoOpenFOAMSoftware Comercial (Fluent, STAR-CCM+)
Coste de LicenciaTotalmente gratuito y de código abierto (GPL)Decenas de miles de euros anuales por núcleo
Escalabilidad HPCIlimitada: puedes correr en 10.000 núcleos sin coste extraLimitada por licencias por núcleo (HPC packs)
PersonalizaciónAcceso al 100% del código fuente en C++Limitado a macros o User Defined Functions (UDF)
Curva de AprendizajeEmpinada (uso de terminal, diccionarios de texto)Más accesible mediante interfaz gráfica de usuario
AutomatizaciónNativa mediante scripts de Bash y PythonRequiere APIs propietarias o scripts de GUI