openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-8/Ubuntuopenfoam.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-qtpyFirst 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) $OFDIRDownload 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/bashrcCheck installation paths, namely:
FOAM_INST_DIRshould point to$OFDIRWM_PROJECT_INST_DIRshould point to$OFDIRWM_PROJECT_DIRshould point to$OFDIR/OpenFOAM-8WM_THIRD_PARTY_DIRshould point to$OFDIR/ThirdParty-8
alias foam
echo $FOAM_INST_DIR
echo $WM_PROJECT_INST_DIR
echo $WM_PROJECT_DIR
echo $WM_THIRD_PARTY_DIRStart 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.shOptional: 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.shOptional: FOAMY HEX MESH
echo "export FOAMY_HEX_MESH=yes" >> $WM_PROJECT_DIR/etc/prefs.shOptional: 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.shOptional: 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.shOptional: 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.shOptional: 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.shOptional: 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.shOptional: set environment to compile Cuda solvers
export CUDA_ARCH=sm_30
echo "export CUDA_ARCH=sm_30" >> $WM_PROJECT_DIR/etc/prefs.shunalias 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)
"
EOFMake 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.Allwmake2This 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.Allwmake2Compilation 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.Allwmake3Compilation errors may be checked with
grep --color=auto -i error $WM_PROJECT_DIR/log.Allwmake3The 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)
"
EOFAssuming 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.Allwmake1Compilation 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.Allwmake1WARNING: 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 mercurialAfter, 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}" swak4FoamSet 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/swakConfigurationCompile 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.Allwmake4Compilation 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.Allwmake2cat <<EOF >> $OFDIR/of8_envars.sh
## Swak4Foam
SWAK4FOAM_SRC=\$WM_THIRD_PARTY_DIR/swak4Foam/Libraries
export SWAK4FOAM_SRC
echo -e "
Swak4Foam
~~~~~~~~~
SWAK4FOAM_SRC = \$SWAK4FOAM_SRC
"
EOFFor 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_DIRcat <<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.pyOpenFOAM 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.shwhich 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_SRCAfterwards perform simple checks:
foamInfo simpleFoam
foamInfoCommands 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