OpenFOAM

a Free, Open Source CFD Software Package

Introduction

OpenFOAM is a free, open source CFD software package developed by OpenCFD Ltd at ESI Group and distributed by the OpenFOAM Foundation . It has a large user base across most areas of engineering and science, from both commercial and academic organisations.

Homepage: http://www.openfoam.com/

Installed Version

Currently, several version compiled by GCC/ICC compilers in single/double precision with several version of openmpi are available on Anselm.

For example syntax of available OpenFOAM module is:

\<openfoam\/2.2.1-icc-openmpi1.6.5-DP>

this means openfoam version 2.2.1 compiled by ICC compiler with openmpi1.6.5 in double precision.

Naming convection of the installed versions is following:

openfoam\<VERSION>-\<COMPILER>\<openmpiVERSION>-\<PRECISION>

  • \<VERSION> - version of openfoam
  • \<COMPILER> - version of used compiler
  • \<openmpiVERSION> - version of used openmpi/impi
  • \<PRECISION> - DP/SP – double/single precision

Available OpenFOAM Modules

To check available modules use

$ ml av

In /opt/modules/modulefiles/engineering you can see installed engineering softwares:

    ------------------------------------ /opt/modules/modulefiles/engineering -------------------------------------------------------------
    ansys/14.5.x               matlab/R2013a-COM                                openfoam/2.2.1-icc-impi4.1.1.036-DP
    comsol/43b-COM             matlab/R2013a-EDU                                openfoam/2.2.1-icc-openmpi1.6.5-DP
    comsol/43b-EDU             openfoam/2.2.1-gcc481-openmpi1.6.5-DP            paraview/4.0.1-gcc481-bullxmpi1.2.4.1-osmesa10.0
    lsdyna/7.x.x               openfoam/2.2.1-gcc481-openmpi1.6.5-SP

For information how to use modules please look here.

Getting Started

To create OpenFOAM environment on ANSELM give the commands:

$ ml openfoam/2.2.1-icc-openmpi1.6.5-DP
$ source $FOAM_BASHRC

Note

Please load correct module with your requirements “compiler - GCC/ICC, precision - DP/SP”.

Create a project directory within the $HOME/OpenFOAM directory named \<USER>-\<OFversion> and create a directory named run within it, e.g. by typing:

$ mkdir -p $FOAM_RUN

Project directory is now available by typing:

$ cd /home/<USER>/OpenFOAM/<USER>-<OFversion>/run

\<OFversion> - for example \<2.2.1>

or

$ cd $FOAM_RUN

Copy the tutorial examples directory in the OpenFOAM distribution to the run directory:

$ cp -r $FOAM_TUTORIALS $FOAM_RUN

Now you can run the first case for example incompressible laminar flow in a cavity.

Running Serial Applications

Create a Bash script test.sh

#!/bin/bash
module load openfoam/2.2.1-icc-openmpi1.6.5-DP
source $FOAM_BASHRC

# source to run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions

cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity

runApplication blockMesh
runApplication icoFoam

Job submission (example for Anselm):

$ qsub -A OPEN-0-0 -q qprod -l select=1:ncpus=16,walltime=03:00:00 test.sh

For information about job submission please look here.

Running Applications in Parallel

Run the second case for example external incompressible turbulent flow - case - motorBike.

First we must run serial application bockMesh and decomposePar for preparation of parallel computation.

Note

Create a Bash scrip test.sh:

#!/bin/bash
module load openfoam/2.2.1-icc-openmpi1.6.5-DP
source $FOAM_BASHRC

# source to run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions

cd $FOAM_RUN/tutorials/incompressible/simpleFoam/motorBike

runApplication blockMesh
runApplication decomposePar

Job submission

$ qsub -A OPEN-0-0 -q qprod -l select=1:ncpus=16,walltime=03:00:00 test.sh

This job create simple block mesh and domain decomposition. Check your decomposition, and submit parallel computation:

Note

Create a PBS script testParallel.pbs:

#!/bin/bash
#PBS -N motorBike
#PBS -l select=2:ncpus=16
#PBS -l walltime=01:00:00
#PBS -q qprod
#PBS -A OPEN-0-0

module load openfoam/2.2.1-icc-openmpi1.6.5-DP
source $FOAM_BASHRC

cd $FOAM_RUN/tutorials/incompressible/simpleFoam/motorBike

nproc = 32

mpirun -hostfile ${PBS_NODEFILE} -np $nproc snappyHexMesh -overwrite -parallel | tee snappyHexMesh.log

mpirun -hostfile ${PBS_NODEFILE} -np $nproc potentialFoam -noFunctionObject-writep -parallel | tee potentialFoam.log

mpirun -hostfile ${PBS_NODEFILE} -np $nproc simpleFoam -parallel | tee simpleFoam.log

nproc – number of subdomains

Job submission

$ qsub testParallel.pbs

Compile Your Own Solver

Initialize OpenFOAM environment before compiling your solver

$ ml openfoam/2.2.1-icc-openmpi1.6.5-DP
$ source $FOAM_BASHRC
$ cd $FOAM_RUN/

Create directory applications/solvers in user directory

$ mkdir -p applications/solvers
$ cd applications/solvers

Copy icoFoam solver’s source files

$ cp -r $FOAM_SOLVERS/incompressible/icoFoam/ My_icoFoam
$ cd My_icoFoam

Rename icoFoam.C to My_icoFOAM.C

$ mv icoFoam.C My_icoFoam.C

Edit files file in Make directory:

    icoFoam.C
    EXE = $(FOAM_APPBIN)/icoFoam

and change to:

    My_icoFoam.C
    EXE = $(FOAM_USER_APPBIN)/My_icoFoam

In directory My_icoFoam give the compilation command:

$ wmake