Fluid Flow

OpenFOAM

Open source computational fluid dynamics (CFD) software

OpenFOAM (Open Field Operation and Manipulation) is a free, open-source CFD software package. It has a large user base across most areas of engineering and science.

Overview

OpenFOAM provides a comprehensive suite of solvers and utilities for complex fluid flow simulations involving chemical reactions, turbulence, heat transfer, and more.

Key Features:

  • Pre-processing utilities (meshing, case setup)
  • Wide range of solvers (incompressible, compressible, multiphase)
  • Turbulence models (RANS, LES, DES)
  • Post-processing and visualization
  • Parallel computing support
  • Extensive validation and verification

Docker Compose Configuration

version: '3.8'

services:
  openfoam:
    image: openfoam/openfoam10-paraview510
    container_name: dxflow-openfoam

    # Working directory
    working_dir: /workspace

    # Volumes
    volumes:
      - ./cases:/workspace/cases
      - ./results:/workspace/results

    # Resource allocation
    deploy:
      resources:
        limits:
          cpus: '16'
          memory: 32G

    # Keep container running
    command: tail -f /dev/null

    # Enable X11 for ParaView (optional)
    environment:
      - DISPLAY=${DISPLAY}

    # Network mode for GUI
    network_mode: host

Usage

Deploy OpenFOAM

# Create directories
mkdir -p cases results

# Deploy container
dxflow compose create --identity openfoam openfoam.yml
dxflow compose start openfoam

Run Cavity Tutorial

# Copy tutorial case
dxflow compose execute openfoam -- \
  cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity cases/

# Enter case directory
cd cases/cavity

# Generate mesh
dxflow compose execute openfoam -- \
  blockMesh -case cases/cavity

# Run solver
dxflow compose execute openfoam -- \
  icoFoam -case cases/cavity

# Post-process
dxflow compose execute openfoam -- \
  postProcess -func graphCell -case cases/cavity

Custom Case Setup

# Create case structure
mkdir -p cases/myCase/{0,constant,system}

# Upload geometry
dxflow fs upload geometry.stl cases/myCase/constant/triSurface/

# Create mesh with snappyHexMesh
dxflow compose execute openfoam -- \
  snappyHexMesh -case cases/myCase

# Check mesh quality
dxflow compose execute openfoam -- \
  checkMesh -case cases/myCase

# Run simulation
dxflow compose execute openfoam -- \
  simpleFoam -case cases/myCase

# Download results
dxflow fs download cases/myCase/results/ results/

Common Solvers

SolverApplicationType
icoFoamLaminar incompressibleTransient
simpleFoamTurbulent incompressibleSteady-state
pimpleFoamTurbulent incompressibleTransient
interFoamTwo-phase flow (VOF)Transient
rhoSimpleFoamCompressible turbulentSteady-state
sonicFoamTransonic/supersonicTransient
buoyantBoussinesqFoamNatural convectionTransient

Case Structure

myCase/
├── 0/              # Initial conditions
│   ├── U           # Velocity field
│   ├── p           # Pressure field
│   └── T           # Temperature field (if applicable)
├── constant/       # Constant properties
│   ├── polyMesh/   # Mesh data
│   ├── turbulenceProperties
│   └── transportProperties
└── system/         # Simulation control
    ├── controlDict # Time control, output
    ├── fvSchemes   # Discretization schemes
    └── fvSolution  # Solution algorithms

Mesh Generation

blockMesh (Structured)

// blockMeshDict example
vertices
(
    (0 0 0)
    (1 0 0)
    (1 1 0)
    (0 1 0)
    (0 0 0.1)
    (1 0 0.1)
    (1 1 0.1)
    (0 1 0.1)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);

boundary
(
    inlet
    {
        type patch;
        faces ((0 4 7 3));
    }
    outlet
    {
        type patch;
        faces ((2 6 5 1));
    }
);

snappyHexMesh (Unstructured)

# Generate background mesh
blockMesh

# Run snappyHexMesh
snappyHexMesh -overwrite

# Check mesh quality
checkMesh

Parallel Processing

# Decompose case for parallel run
decomposePar -case cases/myCase

# Run in parallel (MPI)
mpirun -np 16 simpleFoam -parallel -case cases/myCase

# Reconstruct results
reconstructPar -case cases/myCase

Post-Processing

ParaView Visualization

# Create ParaView file
paraFoam -case cases/myCase -touch

# Open in ParaView (if X11 enabled)
paraview cases/myCase/case.foam

Sample Data

# Sample along line
postProcess -func 'sample' -case cases/myCase

# Calculate forces/coefficients
postProcess -func 'forceCoeffs' -case cases/myCase

# Extract surface data
postProcess -func 'surfaces' -case cases/myCase

System Requirements

Workstation:

  • CPU: 8-16 cores
  • RAM: 16-32GB
  • Storage: 100GB SSD

Server/HPC:

  • CPU: 32-128 cores
  • RAM: 64-256GB
  • Storage: 1TB+ fast storage
  • High-speed interconnect for parallel

Performance Tips

Optimize Solver:

  • Use appropriate solver tolerances
  • Enable preconditioners
  • Adjust under-relaxation factors
  • Monitor residuals

Parallel Scaling:

  • Decompose domain efficiently
  • Balance processor loads
  • Use appropriate MPI settings
  • Test scaling on smaller cases

Mesh Quality:

  • Check mesh quality metrics
  • Refine boundary layers
  • Avoid highly skewed cells
  • Use appropriate cell counts

Troubleshooting

Divergence:

  • Reduce time step or relaxation factors
  • Check boundary conditions
  • Improve mesh quality
  • Verify initial conditions

Slow Convergence:

  • Adjust solver settings
  • Use better initial guess
  • Check for flow recirculation
  • Refine mesh in critical regions

References

Citation

OpenFOAM: The Open Source CFD Toolbox
User Guide, OpenFOAM Foundation
https://www.openfoam.org

Start simulating fluid flows with OpenFOAM's powerful CFD capabilities!