|
| 1 | +#!/usr/bin/bash |
| 2 | + |
| 3 | +set -euo pipefail |
| 4 | +IFS=$'\n\t' |
| 5 | + |
| 6 | +mkdir -p tmp |
| 7 | +export TMP="$(realpath tmp)" |
| 8 | +export TEMP="$TMP" |
| 9 | +export TMPDIR="$TMP" |
| 10 | + |
| 11 | +INSTALL_ROOT="/discofs/$(whoami)" |
| 12 | +INSTALL_OPT="${INSTALL_ROOT}/opt/software" |
| 13 | + |
| 14 | +INSTALL_PETSC_COMPILER="intel" |
| 15 | +INSTALL_PETSC_MPI="mpich" |
| 16 | +INSTALL_PETSC_HDF5_FORCE_MODULE="" |
| 17 | +INSTALL_PETSC_HDF5_VERSION="1.13" |
| 18 | +INSTALL_PETSC_OPT="opt" # "opt" or "dbg" or "fast" |
| 19 | +INSTALL_PETSC_VERSION_MAJOR="3" |
| 20 | +INSTALL_PETSC_VERSION_MINOR="19.4" |
| 21 | +INSTALL_PETSC_VERSION="${INSTALL_PETSC_VERSION_MAJOR}.${INSTALL_PETSC_VERSION_MINOR}" |
| 22 | +INSTALL_PETSC_TAG="v${INSTALL_PETSC_VERSION}" |
| 23 | + |
| 24 | +INSTALL_PETSC_HDF5_MODULENAME="${INSTALL_PETSC_HDF5_FORCE_MODULE:-hdf5/1/${INSTALL_PETSC_HDF5_VERSION}/latest-${INSTALL_PETSC_COMPILER}-${INSTALL_PETSC_MPI}}" |
| 25 | +echo "Using $INSTALL_PETSC_HDF5_MODULENAME as base." |
| 26 | + |
| 27 | +if [[ ${INSTALL_PETSC_COMPILER} =~ "intel" ]]; then |
| 28 | + |
| 29 | + mpiicc &>/dev/null && INSTALL_MPICC='mpiicc' || INSTALL_MPICC='mpicc' |
| 30 | + mpiicpc &>/dev/null && INSTALL_MPICXX='mpiicpc' || INSTALL_MPICXX='mpicxx' |
| 31 | + mpiifort &>/dev/null && INSTALL_MPIF90='mpiifort' || INSTALL_MPIF90='mpif90' |
| 32 | +else |
| 33 | + INSTALL_MPICC='mpicc' |
| 34 | + INSTALL_MPICXX='mpicxx' |
| 35 | + INSTALL_MPIF90='mpif90' |
| 36 | +fi |
| 37 | + |
| 38 | +if [[ ${INSTALL_PETSC_MPI} =~ "mpich" ]]; then |
| 39 | + if [[ ${INSTALL_PETSC_COMPILER} =~ "intel" ]]; then |
| 40 | + export MPICH_CC="icc" |
| 41 | + export MPICH_CXX="icpc" |
| 42 | + export MPICH_FC="ifort" |
| 43 | + fi |
| 44 | +fi |
| 45 | + |
| 46 | +if [[ ${INSTALL_PETSC_OPT} == "fast" ]]; then |
| 47 | + INSTALL_CFLAGS='-Ofast -DNDEBUG' |
| 48 | + INSTALL_CXXFLAGS="${INSTALL_CFLAGS}" |
| 49 | + INSTALL_FFLAGS="${INSTALL_CFLAGS}" |
| 50 | + INSTALL_PETSC_WITH_DEBUGGING='no' |
| 51 | +elif [[ ${INSTALL_PETSC_OPT} == "opt" ]]; then |
| 52 | + INSTALL_CFLAGS='-O3 -DNDEBUG' |
| 53 | + INSTALL_CXXFLAGS="${INSTALL_CFLAGS}" |
| 54 | + INSTALL_FFLAGS="${INSTALL_CFLAGS}" |
| 55 | + INSTALL_PETSC_WITH_DEBUGGING='no' |
| 56 | +else |
| 57 | + INSTALL_PETSC_OPT='dbg' |
| 58 | + INSTALL_CFLAGS='-g -O0' |
| 59 | + INSTALL_CXXFLAGS="${INSTALL_CFLAGS}" |
| 60 | + INSTALL_FFLAGS="${INSTALL_CFLAGS}" |
| 61 | + INSTALL_PETSC_WITH_DEBUGGING='yes' |
| 62 | +fi |
| 63 | + |
| 64 | +if [[ ${INSTALL_PETSC_OPT} != "dbg" ]]; then |
| 65 | + if [[ ${INSTALL_PETSC_COMPILER} =~ "intel" ]]; then |
| 66 | + INSTALL_CFLAGS="${INSTALL_CFLAGS} -march=core-avx2 -mtune=core-avx2" |
| 67 | + INSTALL_CXXFLAGS="${INSTALL_CXXFLAGS} -march=core-avx2 -mtune=core-avx2" |
| 68 | + INSTALL_FFLAGS="${INSTALL_FFLAGS} -march=core-avx2 -mtune=core-avx2" |
| 69 | + elif [[ ${INSTALL_PETSC_COMPILER} =~ "aocc" ]]; then |
| 70 | + INSTALL_CFLAGS="${INSTALL_CFLAGS} -march=znver2" |
| 71 | + INSTALL_CXXFLAGS="${INSTALL_CXXFLAGS} -march=znver2" |
| 72 | + INSTALL_FFLAGS="${INSTALL_FFLAGS} -march=znver2" |
| 73 | + else |
| 74 | + INSTALL_CFLAGS="${INSTALL_CFLAGS} -march=znver2 -mtune=native" |
| 75 | + INSTALL_CXXFLAGS="${INSTALL_CXXFLAGS} -march=znver2 -mtune=native" |
| 76 | + INSTALL_FFLAGS="${INSTALL_FFLAGS} -march=znver2 -mtune=native" |
| 77 | + fi |
| 78 | +fi |
| 79 | + |
| 80 | +if [[ ${INSTALL_PETSC_COMPILER} =~ "intel" ]]; then |
| 81 | + INSTALL_CFLAGS="-diag-disable=10441 ${INSTALL_CFLAGS}" |
| 82 | + INSTALL_CXXFLAGS="-diag-disable=10441 ${INSTALL_CXXFLAGS}" |
| 83 | +fi |
| 84 | + |
| 85 | +module purge |
| 86 | +module load $INSTALL_PETSC_HDF5_MODULENAME |
| 87 | + |
| 88 | +IFS=$' \n\t' |
| 89 | +echo "Calling the selected compilers" |
| 90 | +echo " ${INSTALL_MPICC} ${INSTALL_CFLAGS} --version" |
| 91 | +${INSTALL_MPICC} ${INSTALL_CFLAGS} --version |
| 92 | +echo |
| 93 | +echo " ${INSTALL_MPICXX} ${INSTALL_CXXFLAGS} --version" |
| 94 | +${INSTALL_MPICXX} ${INSTALL_CXXFLAGS} --version |
| 95 | +echo |
| 96 | +echo " ${INSTALL_MPIF90} ${INSTALL_FFLAGS} --version" |
| 97 | +${INSTALL_MPIF90} ${INSTALL_FFLAGS} -diag-disable=10006 --version |
| 98 | +echo |
| 99 | +IFS=$'\n\t' |
| 100 | + |
| 101 | +export PETSC_ARCH="${INSTALL_PETSC_COMPILER}-${INSTALL_PETSC_MPI}-${INSTALL_PETSC_OPT}" |
| 102 | +PETSC_PREFIX="petsc/${INSTALL_PETSC_VERSION_MAJOR}/${INSTALL_PETSC_VERSION}/${PETSC_ARCH}" |
| 103 | +INSTALL_PETSC_FULL_PREFIX="${INSTALL_OPT}/${PETSC_PREFIX}" |
| 104 | +mkdir -p "$INSTALL_PETSC_FULL_PREFIX" |
| 105 | + |
| 106 | +PETSC_CLONE_DIR="${TMPDIR}/petsc-${INSTALL_PETSC_TAG}" |
| 107 | +rm -rf ${PETSC_CLONE_DIR} |
| 108 | +git clone -b "${INSTALL_PETSC_TAG}" --depth=1 https://gitlab.com/petsc/petsc.git "${PETSC_CLONE_DIR}" || true |
| 109 | +pushd "${PETSC_CLONE_DIR}" |
| 110 | +./configure \ |
| 111 | + --prefix="$INSTALL_PETSC_FULL_PREFIX" \ |
| 112 | + --with-debugging=${INSTALL_PETSC_WITH_DEBUGGING} \ |
| 113 | + --with-batch \ |
| 114 | + --with-cc="${INSTALL_MPICC}" \ |
| 115 | + --with-cxx="${INSTALL_MPICXX}" \ |
| 116 | + --with-fc="${INSTALL_MPIF90}" \ |
| 117 | + COPTFLAGS=${INSTALL_CFLAGS} \ |
| 118 | + CXXOPTFLAGS=${INSTALL_CXXFLAGS} \ |
| 119 | + FOPTFLAGS=${INSTALL_FFLAGS} \ |
| 120 | + --download-sowing=yes \ |
| 121 | + --download-fblaslapack=yes \ |
| 122 | + --download-hypre=yes |
| 123 | + |
| 124 | +make |
| 125 | +make install |
| 126 | +popd |
| 127 | + |
| 128 | +MODULE_INSTALL_ROOT="${INSTALL_OPT}/modulefiles" |
| 129 | +MODULEFILE_PATH="${MODULE_INSTALL_ROOT}/${PETSC_PREFIX}" |
| 130 | +MODULEFILE_DIR="$(dirname ${MODULE_INSTALL_ROOT}/${PETSC_PREFIX})" |
| 131 | +mkdir -p "$MODULEFILE_DIR" |
| 132 | + |
| 133 | +cat > "$MODULEFILE_PATH" <<EOF |
| 134 | +#%Module 1.0 |
| 135 | +
|
| 136 | +module load $INSTALL_PETSC_HDF5_MODULENAME |
| 137 | +
|
| 138 | +set prefix $INSTALL_PETSC_FULL_PREFIX |
| 139 | +
|
| 140 | +prepend-path PATH \$prefix/bin |
| 141 | +prepend-path LD_LIBRARY_PATH \$prefix/lib |
| 142 | +prepend-path LD_RUN_PATH \$prefix/lib |
| 143 | +prepend-path PKG_CONFIG_PATH \$prefix/lib/pkgconfig |
| 144 | +
|
| 145 | +prepend-path --delim " " CFLAGS "-I\$prefix/include" |
| 146 | +prepend-path --delim " " CXXFLAGS "-I\$prefix/include" |
| 147 | +prepend-path --delim " " FCFLAGS "-I\$prefix/include" |
| 148 | +prepend-path --delim " " LDFLAGS "-L\$prefix/lib" |
| 149 | +EOF |
| 150 | + |
| 151 | +echo "PETSc should have been installed." |
| 152 | +echo " Module files are provided with this installation." |
| 153 | +echo " Running the following commands should put PETSc in your PATH:" |
| 154 | +echo |
| 155 | +echo ' export MODULEPATH="'"${MODULE_INSTALL_ROOT}"'${MODULEPATH:+:$MODULEPATH}"' |
| 156 | +echo ' module load petsc' |
| 157 | +echo |
| 158 | +echo ' The first line may be added to your ~/.bash_profile if it works.' |
| 159 | +echo |
0 commit comments