-
Lukáš Krupčík authoredLukáš Krupčík authored
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