Merge branch 'openfoam' into 'master'
Openfoam expression This adds an OpenFOAM nix expression. It * provides binary wrappers that automatically source the *etc/bashrc* script before running, and * provides *-mpi wrappers that automatically call the correct mpirun with `-n <num>` set by the partition. It has been tested on goblin in both MPI and non-MPI mode on the [damBreak example](http://cfd.direct/openfoam/user-guide/damBreak). See merge request !1
This commit is contained in:
77
openfoam.nix
Normal file
77
openfoam.nix
Normal file
@@ -0,0 +1,77 @@
|
||||
with import <nixpkgs> {};
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "4.0";
|
||||
name = "openfoam-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/OpenFOAM/OpenFOAM-4.x/archive/version-${version}.tar.gz";
|
||||
sha256 = "0mslymq1szprzlp18j92zl30zfz9bj9r4psxa6ys99qw0ff85vx8";
|
||||
};
|
||||
|
||||
# a lot of assumptions about being under a directory named OpenFOAM-${version}
|
||||
postUnpack = ''
|
||||
echo "resettting sourceRoot to ''${sourceRoot/-4.x-version/}"
|
||||
mv "$sourceRoot" "''${sourceRoot/-4.x-version/}"
|
||||
sourceRoot="''${sourceRoot/-4.x-version/}"
|
||||
'';
|
||||
|
||||
# one of the following would bake in the rpath, but sourcing etc/bashrc file updates LD_LIBRARY_PATH
|
||||
# NIX_LDFLAGS="-rpath $out/platform/$WM_OPTIONS/lib $NIX_LDFLAGS"
|
||||
# NIX_LDFLAGS="${NIX_LDFLAGS/"$out/lib$WM_ARCH_OPTION"/"$out/platform/$WM_OPTIONS/lib"}"
|
||||
configurePhase = ''
|
||||
sed -ie 's|FOAM_INST_DIR=$HOME/$WM_PROJECT.*|FOAM_INST_DIR='"$out"/lib/OpenFOAM-${version}'|' etc/bashrc
|
||||
sed -ie 's|BOOST_ARCH_PATH=.*$|BOOST_ARCH_PATH=${boost}|' etc/config.sh/CGAL
|
||||
sed -ie 's|CGAL_ARCH_PATH=.*$|CGAL_ARCH_PATH=${cgal}|' etc/config.sh/CGAL
|
||||
sed -ie 's|METIS_ARCH_PATH=.*$|METIS_ARCH_PATH=${metis}|' etc/config.sh/metis
|
||||
sed -ie 's|SCOTCH_ARCH_PATH=.*$|SCOTCH_ARCH_PATH=${scotch}|' etc/config.sh/scotch
|
||||
source "$PWD/etc/bashrc"
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
export WM_NCOMPPROCS="''${NIX_BUILD_CORES}"
|
||||
./Allwmake
|
||||
'';
|
||||
|
||||
# stick etc, bin, and platforms under lib/OpenFOAM-${version}
|
||||
# fill bin proper up with wrappers that source etc/bashrc for everything in platform/$WM_OPTIONS/bin
|
||||
# add -mpi suffixed versions that calls proper mpirun for those with libPstream.so depencies too
|
||||
installPhase = ''
|
||||
echo "copying etc, bin, and platforms directories to $out/lib/OpenFOAM-${version}"
|
||||
mkdir -p "$out/lib/OpenFOAM-${version}"
|
||||
cp -at "$out/lib/OpenFOAM-${version}" etc bin platforms
|
||||
echo "creating a bin of wrapped binaries from $out/lib/OpenFOAM-${version}/platforms/$WM_OPTIONS/bin"
|
||||
for program in "$out/lib/OpenFOAM-${version}/platforms/$WM_OPTIONS/bin/"*; do
|
||||
makeWrapper "$program" "$out/bin/''${program##*/}" \
|
||||
--run "source \"$out/lib/OpenFOAM-${version}/etc/bashrc\""
|
||||
if readelf -d "$program" | fgrep -q libPstream.so; then
|
||||
makeWrapper "${openmpi}/bin/mpirun" "$out/bin/''${program##*/}-mpi" \
|
||||
--run "[ -r processor0 ] || { echo \"Case is not currently decomposed, see decomposePar documentation\"; exit 1; }" \
|
||||
--run "extraFlagsArray+=(-n \"\$(ls -d processor* | wc -l)\" \"$out/bin/''${program##*/}\" -parallel)" \
|
||||
--run "source \"$out/lib/OpenFOAM-${version}/etc/bashrc\""
|
||||
fi
|
||||
done
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
makeWrapper
|
||||
flex
|
||||
bison
|
||||
zlib
|
||||
boost
|
||||
openmpi
|
||||
readline
|
||||
gperftools
|
||||
cgal
|
||||
metis
|
||||
scotch
|
||||
mpfr
|
||||
];
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = http://www.openfoam.com;
|
||||
description = "Free open-source CFD software";
|
||||
platforms = platforms.linux;
|
||||
license = licenses.gpl3;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user