openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8
openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8/Ubuntu
openfoam.org/download/source/compiling-openfoam
Several packages are required by the installation. Most of them should already
exist in a standard installation but, for example, rpm
does not.
sudo apt install git-core build-essential cmake curl
sudo apt install mpi-default-bin mpi-default-dev openmpi-bin libopenmpi-dev
sudo apt install qt5-default qttools5-dev libqt5x11extras5-dev
sudo apt install gawk flex bison gnuplot libreadline-dev libncurses-dev \
libboost-dev libboost-system-dev libboost-thread-dev zlib1g-dev libxt-dev
sudo apt install libcgal-dev libscotch-dev libptscotch-dev
sudo apt install python python-dev python3 python3-dev
sudo apt install paraview libvtk6-dev
sudo apt install binutils-dev libiberty-dev graphviz
sudo apt install time
## Optional
sudo apt install python3-mshr python3-pygalmesh python-vtk6
sudo apt install libqt5webkit5-dev libqt5opengl5-dev python-qtpy
First one must define the OpenFOAM root folder where the installation
will be performed. This path will be stored in shell variable OFDIR
.
Note that the user must have write permissions to that directory.
The following commands will create a root folder for OpenFOAM in
/opt/OpenFOAM
and will change its ownership to that of the user
performing the installation (which may be changed after OpenFOAM is
installed).
OFDIR=/opt/OpenFOAM
sudo mkdir -p $OFDIR
sudo chown -R $USER:$(id -gn $USER) $OFDIR
Download the OpenFOAM source code
cd $OFDIR
git clone https://github.com/OpenFOAM/OpenFOAM-8.git OpenFOAM-8
cd OpenFOAM-8
git log --decorate --graph > README_gitlog.md
OFVersionDate=$(git log -1 --format="%at" | xargs -I{} date -d @{} +%Y%m%d)
echo $OFVersionDate > README_gitversion.md
cd -
git clone https://github.com/OpenFOAM/ThirdParty-8.git ThirdParty-8
cd ThirdParty-8
git log --decorate --graph > README_gitlog.md
TPVersionDate=$(git log -1 --format="%at" | xargs -I{} date -d @{} +%Y%m%d)
echo $TPVersionDate > README_gitversion.md
cd -
Change installation path in etc/bashrc
. Comment lines with FOAM_INST_DIR=
and add FOAM_INST_DIR=/opt/$WM_PROJECT
:
cd $OFDIR
sed \
-e 's/^[[:space:]]*\(export FOAM_INST_DIR=\)/#\t\1/g' \
-e '0,/^#[[:space:]]*export FOAM_INST_DIR=.*/ s/^#\([[:space:]]*export FOAM_INST_DIR=\)/\1/' \
-e '0,/^#[[:space:]]*export FOAM_INST_DIR=.*/ s/^#\([[:space:]]*export FOAM_INST_DIR=\)/\1\/opt\/\$WM_PROJECT\n&/' \
-e '/^if .*WM_PROJECT_DIR/,/^fi/ s/^\(.*\)/#\1/' \
-e '/^if .*WM_THIRD_PARTY_DIR/,/^fi/ s/^\(.*\)/#\1/' \
-i.bak $OFDIR/OpenFOAM-8/etc/bashrc
source ${OFDIR}/OpenFOAM-8/etc/bashrc
Check installation paths, namely:
FOAM_INST_DIR
should point to$OFDIR
WM_PROJECT_INST_DIR
should point to$OFDIR
WM_PROJECT_DIR
should point to$OFDIR/OpenFOAM-8
WM_THIRD_PARTY_DIR
should point to$OFDIR/ThirdParty-8
alias foam
echo $FOAM_INST_DIR
echo $WM_PROJECT_INST_DIR
echo $WM_PROJECT_DIR
echo $WM_THIRD_PARTY_DIR
Start with the example file prefs.sh
which is part of OpenFOAM.
cp $WM_PROJECT_DIR/etc/config.sh/example/prefs.sh $WM_PROJECT_DIR/etc/
Optional: use system compiler
echo "export WM_COMPILER_DIR=$(dirname $(dirname $(which gcc)))" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: use system OpenMPI
echo "export WM_MPLIB=SYSTEMOPENMPI" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_DIR=$(dirname $(dirname $(which mpicc)))" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_BIN_DIR=$(dirname $(which mpicc))" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_LIB_DIR=\"\$(\$OPENMPI_BIN_DIR/mpicc --showme:libdirs)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_INCLUDE_DIR=\"\$(\$OPENMPI_BIN_DIR/mpicc --showme:incdirs)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_COMPILE_FLAGS=\"\$(\$OPENMPI_BIN_DIR/mpicc --showme:compile)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export OPENMPI_LINK_FLAGS=\"\$(\$OPENMPI_BIN_DIR/mpicc --showme:link)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: FOAMY HEX MESH
echo "export FOAMY_HEX_MESH=yes" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: use system-installed paraview (much faster installation):
echo "export PARAVIEW_SYSTEM=1" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export PARAVIEW_DIR=$(dirname $(dirname $(which paraview)))" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export PARAVIEW_BIN_DIR=$(dirname $(which paraview))" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: set environmental variable for Qt to compile ParaView (one may add these even if the ParaView used is the one from the system)
echo "export QT_SELECT=qt5" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export QT_DIR=$(dirname $(dirname $(which qmake)))" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export QT_BIN_DIR=$(dirname $(which qmake))" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: use system Python installation
echo "export PYTHON_SYSTEM=1" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export PYTHON_DIR=$(dirname $(dirname $(which python)))" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export PYTHON_BIN_DIR=$(dirname $(which python))" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: set python includes and libraries for swak4foam
echo "export SWAK_PYTHON2_INCLUDE=\"\$(python-config --cflags)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
echo "export SWAK_PYTHON2_LINK=\"\$(python-config --ldflags)\"" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: 64-bit integer support to allow for 9E+18 cells instead of 2E+9
echo "export WM_LABEL_SIZE=64" >> $WM_PROJECT_DIR/etc/prefs.sh
Optional: set environment to compile Cuda solvers
export CUDA_ARCH=sm_30
echo "export CUDA_ARCH=sm_30" >> $WM_PROJECT_DIR/etc/prefs.sh
unalias of8
cat <<EOF > $OFDIR/of8_envars.sh
#!/bin/bash
#
# openfoamwiki.net/index.php/Installation/Working_with_the_Shell
# openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8
# openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8/Ubuntu
#
OFDIR=$(echo $OFDIR)
[ -v BASH_ALIASES[of8] ] && unalias of8
function of8 {
. \$OFDIR/OpenFOAM-8/etc/bashrc
export FOAM_USER_SRC=\$WM_PROJECT_USER_DIR/src
}
of8
echo -e "
OpenFOAM environment variables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OFDIR = \$OFDIR
WM_PROJECT_INST_DIR = \$WM_PROJECT_INST_DIR
WM_PROJECT_DIR = \$WM_PROJECT_DIR
WM_THIRD_PARTY_DIR = \$WM_THIRD_PARTY_DIR
FOAM_TUTORIALS = \$FOAM_TUTORIALS
FOAM_USER_APPBIN = \$FOAM_USER_APPBIN
FOAM_USER_LIBBIN = \$FOAM_USER_LIBBIN
FOAM_USER_SRC = \$FOAM_USER_SRC
FOAM_RUN = \$FOAM_RUN
OpenFOAM aliases
~~~~~~~~~~~~~~~~
\$(type of8)
\$(alias foam)
\$(alias run)
\$(alias app)
\$(alias sol)
\$(alias tut)
\$(alias util)
"
EOF
Make of8_envars.sh
script executable and source it.
chmod +x $OFDIR/of8_envars.sh
. $OFDIR/of8_envars.sh
. $OFDIR/of8_envars.sh
cd $WM_THIRD_PARTY_DIR
./Allwmake 2>&1 | tee -a log.Allwmake1
grep --color=auto -i error $WM_THIRD_PARTY_DIR/log.Allwmake1
. $OFDIR/of8_envars.sh
wmRefresh
cd $WM_THIRD_PARTY_DIR
wget http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
tar -xvf metis-5.1.0.tar.gz
./Allwmake 2>&1 | tee -a log.Allwmake2
This assumes the computer has 4 cores available, thus the compilation is made
using those cores (through the -j4
option). Though the compilation commands
work with any number of cores, it is more efficient to request a number not
higher than the available cores in the machine.
. $OFDIR/of8_envars.sh
wmRefresh
cd $WM_PROJECT_DIR
./Allwmake -j2 2>&1 | tee -a log.Allwmake1
./Allwmake 2>&1 | tee -a log.Allwmake2
Compilation errors may be checked with
grep --color=auto -i error $WM_PROJECT_DIR/log.Allwmake2
. $OFDIR/of8_envars.sh
wmRefresh
cd $WM_THIRD_PARTY_DIR
#wget https://portal.nersc.gov/svn/visit/trunk/third_party/libccmio-2.6.1.tar.gz -O libccmio-2.6.1.tar.gz
wget http://downloads.sourceforge.net/project/foam-extend/ThirdParty/libccmio-2.6.1.tar.gz -O libccmio-2.6.1.tar.gz
tar -xvf libccmio-2.6.1.tar.gz
./AllwmakeLibccmio 2>&1 | tee -a log.AllwmakeLibccmio1
wmRefresh
cd $WM_PROJECT_DIR
./Allwmake 2>&1 | tee -a log.Allwmake3
Compilation errors may be checked with
grep --color=auto -i error $WM_PROJECT_DIR/log.Allwmake3
The following commands will add the necessary functions to the of8_envars.sh
environmental variables script, in order to use OpenFOAM with the
system-installed ParaView.
cat <<EOF >> $OFDIR/of8_envars.sh
## ParaView: use system version
alias paraFoam="paraFoam -builtin"
function paraFoamGenCaseFile {
caseFile="\$(basename \$(pwd)).foam"
touch \$caseFile
#paraview \$caseFile
}
echo -e "
paraFoam using system-installed paraview
~~~~~~~~~
\$(alias paraFoam)
"
EOF
Assuming the machine has 4 cores (option -j4
).
. $OFDIR/of8_envars.sh
wmRefresh
cd $WM_THIRD_PARTY_DIR
./makeParaView -python -mpi -python-lib /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 2>&1 | tee -a log.makeParaView1
cd $WM_PROJECT_DIR
./Allwmake -j4 2>&1 | tee -a log.Allwmake4
cd $FOAM_UTILITIES/postProcessing/graphics/PVReaders
./Allwclean
./Allwmake 2>&1 | tee -a log.Allwmake1
Compilation errors may be checked with
grep --color=auto -i error $WM_PROJECT_DIR/log.Allwmake4
grep --color=auto -i error $FOAM_UTILITIES/postProcessing/graphics/PVReaders/log.Allwmake1
WARNING: Errors are expected while compiling, e.g.,
swak4Foam-0.4.0/Libraries/swakStateMachine/PluginFunctions/isStateFunctionPlugin.C
due to a missing dependency FaFieldValueExpressionDriver.H
.
This is easily solved by recompiling swak4foam
.
First load the OpenFOAM environmental variables by sourcing of8_envars.sh
and
assure mercurial software management tool is installed, as this is required to
obtain the latest version of swak4foam
:
. $OFDIR/of8_envars.sh
sudo apt-get install mercurial
After, download swak4foam
into the third-party software path
cd $WM_THIRD_PARTY_DIR/
hg clone http://hg.code.sf.net/p/openfoam-extend/swak4Foam -u develop
cd swak4Foam
hg log --graph --branch . > README_hglog.md
SFVersionDate=$(hg log --limit 1 --branch . --template "{date|hgdate}" | cut -d" " -f 1 | xargs -I{} date -d @{} +%Y%m%d)
echo $SFVersionDate > README_hgversion.md
#rm -rf .hg*
cd -
#mv swak4Foam "swak4Foam-dev-${SFVersionDate}"
#ln -sf "swak4Foam-dev-${SFVersionDate}" swak4Foam
Set python includes and libraries for swak4foam
echo "# swak4Foam configuration" > $WM_THIRD_PARTY_DIR/swak4Foam/swakConfiguration
echo "export SWAK_PYTHON2_INCLUDE=\"$(python-config --cflags)\"" >> $WM_THIRD_PARTY_DIR/swak4Foam/swakConfiguration
echo "export SWAK_PYTHON2_LINK=\"$(python-config --ldflags)\"" >> $WM_THIRD_PARTY_DIR/swak4Foam/swakConfiguration
echo "export SWAK_USER_PLUGINS=\$WM_THIRD_PARTY_DIR/swak4Foam/Examples/UserPlugins/swakTestFunctionPlugins" >> $WM_THIRD_PARTY_DIR/swak4Foam/swakConfiguration
Compile swak4foam
and recompile OpenFOAM
cd swak4Foam
./maintainanceScripts/compileRequirements.sh
export PATH=$WM_THIRD_PARTY_DIR/swak4Foam/privateRequirements/bin:$PATH
./Allwmake 2>&1 | tee -a log.Allwmake1
./Allwmake 2>&1 | tee -a log.Allwmake2
cd $WM_PROJECT_DIR
./Allwmake 2>&1 | tee -a log.Allwmake4
Compilation errors may be checked with
grep --color=auto -i error $WM_PROJECT_DIR/log.Allwmake4
grep --color=auto -i error $WM_THIRD_PARTY_DIR/swak4Foam/log.Allwmake2
cat <<EOF >> $OFDIR/of8_envars.sh
## Swak4Foam
SWAK4FOAM_SRC=\$WM_THIRD_PARTY_DIR/swak4Foam/Libraries
export SWAK4FOAM_SRC
echo -e "
Swak4Foam
~~~~~~~~~
SWAK4FOAM_SRC = \$SWAK4FOAM_SRC
"
EOF
For details check:
- OpenFOAMwiki page:
http://openfoamwiki.net/index.php/Contrib/PyFoam#Downloads
- pyFoam python page:
http://pypi.org/project/PyFoam/#files
. $OFDIR/of8_envars.sh
cd $WM_THIRD_PARTY_DIR/
#PYFOAM_VERSION=0.6.11
PYFOAM_VERSION=2020.05
hg clone http://hg.code.sf.net/p/openfoam-extend/PyFoam PyFoam
cd PyFoam
hg archive -t tbz2 -r v${PYFOAM_VERSION} ../PyFoam-${PYFOAM_VERSION}.tar.bz2
cd -
rm -rf PyFoam
tar -xvf PyFoam-${PYFOAM_VERSION}.tar.bz2
ln -sf "PyFoam-${PYFOAM_VERSION}" PyFoam
export PYFOAM_DIR=$WM_THIRD_PARTY_DIR/PyFoam
if [ -z $PYTHONPATH ]; then
export PYTHONPATH=$PYFOAM_DIR/lib/python2.7/site-packages
else
export PYTHONPATH=$PYFOAM_DIR/lib/python2.7/site-packages:$PYTHONPATH
fi
mkdir -p $PYFOAM_DIR/lib/python2.7/site-packages
cd $PYFOAM_DIR
python setup.py install --prefix=$PYFOAM_DIR
cat <<EOF >> $OFDIR/of8_envars.sh
## PyFoam
export PYFOAM_DIR=\$WM_THIRD_PARTY_DIR/PyFoam
function PF {
export PATH=\$PYFOAM_DIR/bin:\$PATH
export PYTHONPATH=\$PYFOAM_DIR/lib/python2.7/site-packages:\$PYTHONPATH
export PYTHONPATH=\$PYTHONPATH:\$(dirname \$(find /usr/lib -name "vtkCommonCorePython*.so") | xargs | sed -e 's/ */:/g')
export PYTHONPATH=\$PYTHONPATH:\$(python -c "import sys; print(':'.join(sys.path))")
}
PF
echo -e "
pyFoam installation
~~~~~~~~~~~~~~~~~~~
PYFOAM_DIR = \$PYFOAM_DIR
\$(which pyFoamVersion.py)
"
EOF
. $OFDIR/of8_envars.sh
cd $FOAM_INST_DIR
pyFoamVersion.py
OpenFOAM has several executables which are not needed for general use
of a Linux system. Hence, before starting any OpenFOAM calculation,
the installation may be activated by sourcing the of8_envars.sh
script,
. /opt/OpenFOAM/of8_envars.sh
which loads the several environmental variables required to run OpenFOAM and its tools.
First certify that the several user areas are created:
mkdir -p $FOAM_RUN
mkdir -p $FOAM_USER_APPBIN
mkdir -p $FOAM_USER_LIBBIN
mkdir -p $FOAM_USER_SRC
Afterwards perform simple checks:
foamInfo simpleFoam
foamInfo
Commands to run the pitzDaily
tutorial in your personal user OpenFOAM folder:
. /opt/OpenFOAM/of8_envars.sh
run
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily ./
cd pitzDaily
blockMesh
simpleFoam
paraFoam