## base directory (change if you want the everything in a different directory) BASEDIR="`pwd`" PYTHONMODULE="python/3.9.0" PYTHONVER="3.9" #alternative python module: # PYTHONMODULE="intel/python/2018.0.1" # PYTHONVER="3.6" ## generate basic directory structure # cd $BASEDIR # mkdir -p src build packages modules ## register local modules directory # echo "MODULEPATH=\"\$MODULEPATH:${BASEDIR}/modules\"" >> ~/.bashrc ## fetch ngsolve sources # cd $BASEDIR # git clone https://github.com/NGSolve/ngsolve src/ngsolve # cd src/ngsolve # git submodule update --init --recursive # cd $BASEDIR ##generate BUILDTYPE tag from type, date, branch and commit: TYPE=mpi TAG=`cd ${BASEDIR}/src/ngsolve && git describe --tags` BRANCH=`cd ${BASEDIR}/src/ngsolve && git rev-parse --abbrev-ref HEAD` DATE=`date +%Y-%m-%d` BUILDTYPE=${DATE}-${TYPE}-${BRANCH}-${TAG} ##load modules module load openmpi/4.0.5 module load ${PYTHONMODULE} module load gcc/9.3.0 module load intel-parallel-studio/cluster.2020.4 module load cmake ##install mpi4py and petsc # pip install mpi4py petsc petsc4py rm -rf $BASEDIR/packages/ngsolve/${BUILDTYPE} mkdir -p $BASEDIR/packages/ngsolve mkdir -p $BASEDIR/packages/ngsolve/${BUILDTYPE} mkdir -p $BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/ mkdir -p $BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER} mkdir -p $BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages export PYTHONPATH="${PYTHONPATH}:$BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages" export C_INCLUDE_PATH="${C_INCLUDE_PATH}:$BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages/petsc/include" export LIBRARY_PATH="${LIBRARY_PATH}:$BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages/petsc/lib" export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$BASEDIR/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages/petsc/lib" # schrustengs (for `from schrustengs import patchvtk`): pip install --verbose -t ${BASEDIR}/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages/ mpi4py petsc petsc4py git+https://github.com/schruste/schrustengs ##generate build dir mkdir -p $BASEDIR/build/ngsolve cd $BASEDIR/build/ngsolve rm -rf ${BUILDTYPE} mkdir ${BUILDTYPE} cd ${BUILDTYPE} export PYTHONPATH="${PYTHONPATH}:${BASEDIR}/packages/ngsolve/${BUILDTYPE}/lib/python${PYTHONVER}/site-packages" ##configure the build CC=gcc CXX=g++ \ cmake \ -DUSE_GUI=ON \ -DUSE_UMFPACK=ON \ -DUSE_MUMPS=ON \ -DUSE_HYPRE=ON \ -DUSE_MPI=ON \ -DCMAKE_BUILD_TYPE=RELEASE \ -DCMAKE_CXX_FLAGS="-ffast-math" \ -DCMAKE_INSTALL_PREFIX=${BASEDIR}/packages/ngsolve/${BUILDTYPE} \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_C_COMPILER=gcc \ -DUSE_MKL=ON -DMKL_ROOT=${MKLROOT} \ -DMKL_SDL=OFF \ -DUSE_NATIVE_ARCH=ON \ ${BASEDIR}/src/ngsolve/ ##build and install make -j18 make install cd .. ##register as new module: mkdir -p ${BASEDIR}/modules/ngsolve echo "#%Module1.0################################################# -*- tcl -*- # # GWDG Cluster gwdu10X proc ModulesHelp { } { puts stderr "\tSets up environment for NGSolve" } module-whatis "NGSolve" prereq gcc/9.3.0 prereq ${PYTHONMODULE} prereq intel-parallel-studio/cluster.2020.4 prereq openmpi/4.0.5 conflict ngsolve set base ${BASEDIR}/packages/ngsolve/${BUILDTYPE} setenv NETGEN_DIR \$base/bin setenv NGSCXX_DIR \$base/bin prepend-path PATH \$base/bin prepend-path INCLUDE_PATH \$base/include prepend-path LD_LIBRARY_PATH \$base/lib prepend-path LD_LIBRARY_PATH \$base/lib/python${PYTHONVER}/site-packages/petsc/lib prepend-path LD_PRELOAD ${MKLROOT}/lib/intel64/libmkl_core.so prepend-path LD_PRELOAD ${MKLROOT}/lib/intel64/libmkl_sequential.so append-path PYTHONPATH \$base/lib/python${PYTHONVER}/site-packages" > ${BASEDIR}/modules/ngsolve/${BUILDTYPE} rm -f ${BASEDIR}/modules/ngsolve/${TYPE} rm -f ${BASEDIR}/modules/ngsolve/${TYPE}-${BRANCH} ln -s ${BASEDIR}/modules/ngsolve/${BUILDTYPE} ${BASEDIR}/modules/ngsolve/${TYPE} ln -s ${BASEDIR}/modules/ngsolve/${BUILDTYPE} ${BASEDIR}/modules/ngsolve/${TYPE}-${BRANCH}