OpenFOAM is a notoriously difficult piece of software to compile, install and run. OpenCFD (the authors of OpenFOAM) have chosen to require the use of recent versions of gcc that are not available on most stable enterprise-class systems (ie Red Hat Enterprise Linux). To make things worse, until recently, OpenCFD also bundled a large number of libraries and helper applications (like VTK and ParaView) with the OpenFOAM source instead of using libraries and tools that are already on the system. Fortunately, OpenCFD has now moved the extra tools to a separate tarball, and the wizards at Gentoo have managed to create an ebuild for OpenFOAM. This is why I run Gentoo on my desktop workstation!
The Official Ebuilds
The OpenFOAM ebuilds in the Portage tree aren’t useful, for the following reasons:
- The executable binary files are not installed! A bug has been filed.
- Source code is not installed, so you can’t build any applications using OpenFOAM unless you install the source manually. Find the OpenFOAM tarball in /usr/src/distfiles, copy it to temporary location, and unpack it. Move or copy the src directory to /usr/lib64/OpenFOAM/OpenFOAM-2.1.1. The default permissions on src are strange; use
chmod -R o+rx src
to make sure that all users can read the source files. - OpenFOAM uses a lot of environment variables to locate its source files, libraries, tools, etc. These are supposed to be automatically set up by sourcing the script
/usr/lib64/OpenFOAM/OpenFOAM-2.1.1/etc
Unfortunately, the environment variables in this script will have to be customized for your installation, and changes to this script will be overwritten when you upgrade OpenFOAM. This needs a better solution.
My New OpenFOAM ebuild
I have written an improved OpenFOAM ebuild for Gentoo Linux and posted it on Bugzilla. One user has already tried my patch and confirmed that it fixed the problem reported in that bug! I list the entire ebuild below for your reference:
# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/sci-libs/openfoam/openfoam-2.1.1.ebuild,v 1.1 2012/06/19 02:21:17 patrick Exp $ EAPI="2" inherit eutils versionator multilib toolchain-funcs MY_PN="OpenFOAM" MY_PV=$(get_version_component_range 1-2) MY_P="${MY_PN}-${PV}" DESCRIPTION="Open Field Operation and Manipulation - CFD Simulation Toolbox" HOMEPAGE="http://www.openfoam.org" SRC_URI="http://downloads.sourceforge.net/project/foam/foam/${PV}/${MY_P}.tgz" LICENSE="GPL-2" SLOT="2.1" KEYWORDS="~amd64 ~x86" IUSE="doc examples" DEPEND="!=sci-libs/openfoam-bin-${MY_PV}* !=sci-libs/openfoam-kernel-${MY_PV}* !=sci-libs/openfoam-meta-${MY_PV}* !=sci-libs/openfoam-solvers-${MY_PV}* !=sci-libs/openfoam-utilities-${MY_PV}* !=sci-libs/openfoam-wmake-${MY_PV}* sci-libs/parmetis sci-libs/parmgridgen sci-libs/scotch || ( >sci-visualization/paraview-3.0 sci-visualization/opendx ) virtual/mpi" RDEPEND="${DEPEND}" S=${WORKDIR}/${MY_P} INSDIR="/usr/$(get_libdir)/${MY_PN}/${MY_P}" pkg_setup() { # just to be sure the right profile is selected (gcc-config) if ! version_is_at_least 4.3 $(gcc-version) ; then die "${PN} requires >=sys-devel/gcc-4.3 to compile." fi elog elog "In order to use ${MY_PN} you should add the following line to ~/.bashrc :" elog elog "alias startOF$(delete_all_version_separators ${MY_PV})='source ${INSDIR}/etc/bashrc'" elog elog "And everytime you want to use OpenFOAM you have to execute startOF$(delete_all_version_separators ${MY_PV})" ewarn ewarn "FoamX is deprecated since ${MY_PN}-1.5! " ewarn } src_configure() { if has_version sys-cluster/mpich2 ; then export WM_MPLIB=MPICH elif has_version sys-cluster/openmpi ; then export WM_MPLIB=OPENMPI else die "You need one of the following mpi implementations: openmpi or mpich2" fi sed -i -e "s|WM_MPLIB:=OPENMPI|WM_MPLIB:="${WM_MPLIB}"|" etc/bashrc sed -i -e "s|setenv WM_MPLIB OPENMPI|setenv WM_MPLIB "${WM_MPLIB}"|" etc/cshrc } src_compile() { WM_NCOMPPROCS=`echo $MAKEOPTS | sed 's/-j([0-9][0-9]*)/1/'` if [ -n "$WM_NCOMPPROCS" ] ; then export WM_NCOMPPROCS else export WM_NCOMPPROCS=1 fi elog "Building on $WM_NCOMPPROCS cores" export FOAM_INST_DIR=${WORKDIR} source etc/bashrc find wmake -name dirToString | xargs rm -rf find wmake -name wmkdep | xargs rm -rf ./Allwmake || die "could not build" } src_test() { cd bin ./foamInstallationTest } src_install() { insinto ${INSDIR} doins -r etc use examples && doins -r tutorials doins -r src insopts -m0755 doins -r bin applications platforms wmake dodoc README.html doc/Guides-a4/*.pdf if use doc ; then dohtml -r doc/Doxygen fi }
It’s not perfect, but it’s definitely an improvement over the official ebuild. If you get a chance to try it, please post a comment on Bugzilla to encourage a Gentoo developer to incorporate it.
FreeFOAM
The problems I mentioned above (and many others) are well-known. FreeFOAM is a fork of OpenFOAM that aims to simplify installation and make OpenFOAM run on more platforms. It uses Python instead of Bash scripts (Windows doesn’t have Bash), CMake instead of Wmake and generally makes the installation more modular. This project is a great idea, and I plan to try it out when I find some time.
OpenFoam is design to be hard to use. The author’s fund the development of the software by providing consulting services. The problems you experience are by design!