diff --git a/.gitignore b/.gitignore index f4a1f942299..ec399cf0525 100644 --- a/.gitignore +++ b/.gitignore @@ -424,3 +424,8 @@ pkg.gitcommit # Jupyter Notebook Checkpoints .ipynb_checkpoints + +.idea/ +cmake-build-debug/ +install*/ +build*/ diff --git a/config/defaults.cmake b/config/defaults.cmake index 517051a6f3a..94f3b70d626 100644 --- a/config/defaults.cmake +++ b/config/defaults.cmake @@ -175,9 +175,14 @@ set(Threads_LIB_VARS CMAKE_THREAD_LIBS_INIT) # The ScaLAPACK library, required by STRUMPACK set(ScaLAPACK_DIR "${MFEM_DIR}/../scalapack-2.0.2/lib/cmake/scalapack-2.0.2" CACHE PATH "Path to the configuration file scalapack-config.cmake") -set(ScaLAPACK_TARGET_NAMES scalapack) +#set(ScaLAPACK_TARGET_NAMES scalapack) +message("======> ScaLAPACK_TARGET_NAMES: ${ScaLAPACK_TARGET_NAMES}, in defaults.cmake") # set(ScaLAPACK_TARGET_FORCE) # set(ScaLAPACK_IMPORT_CONFIG DEBUG) +set(ScaLAPACK_FOUND "" CACHE BOOL "") # https://github.com/mfem/mfem/issues/3558 +set(ScaLAPACK_INCLUDE_DIRS "") +set(ScaLAPACK_LIBRARIES "") +message("------> scalapack info: ${ScaLAPACK_DIR}, ${ScaLAPACK_FOUND}, ${ScaLAPACK_INCLUDE_DIRS}, ${ScaLAPACK_LIBRARIES}") set(Ginkgo_DIR "${MFEM_DIR}/../ginkgo" CACHE PATH "Path to the Ginkgo library.") diff --git a/install_4.4.sh b/install_4.4.sh new file mode 100755 index 00000000000..8f5aa44fc7e --- /dev/null +++ b/install_4.4.sh @@ -0,0 +1,112 @@ +#!/bin/bash +#set -x +# 在脚本所在当前路径下运行此脚本即可编译、安装mfem-4.4。如果已经安装,自动退出。 +# 本脚本会在当前路径下建立build目录和安装目录,build路径为./cmake-build-debug, install路径为./install + +# 所有安装包的顶层目录 +TOPDIR="/home/fanronghong/env4pkgs" + +# 系统及硬件信息 +systype=$(uname -s) +cputype=$(uname -m | sed "s/\\ /_/g") +cpucount=$(nproc --all) +echo "${systype}, ${cputype}, ${cpucount}" + +SHELL_PATH_NAME="$(realpath "$0")" # 本脚本所在的路径及名称 +SHELL_NAME="${SHELL_PATH_NAME##*/}" # 本脚本名称 +SHELL_PATH="${SHELL_PATH_NAME%/*}" # 本脚本路径 +CURDIR=$SHELL_PATH + + +MPIDIR="${TOPDIR}/mpich/install" +cmake="${TOPDIR}/cmake/install/bin/cmake" +ctest="${TOPDIR}/cmake/install/bin/ctest" +HYPRE_DIR="${TOPDIR}/hypre/install" +METIS_DIR="${TOPDIR}/metis/install" +PARMETIS_DIR="${TOPDIR}/parmetis/install" +SUPERLU_DIST_DIR="${TOPDIR}/superlu_dist/install" +MUMPS_DIR="${TOPDIR}/mumps/install" +ScaLAPACK_DIR="${TOPDIR}/scalapack/scalapack-2.0.2" +BlasLapack_Lib="-L${TOPDIR}/lapack/install/lib -lblas -llapack" +PETSC_DIR="${TOPDIR}/petsc/petsc-3.15.0" +PETSC_ARCH=arch-linux-c-debug + + +BUILDDIR="${CURDIR}/cmake-build-debug" +INSTALLDIR="${CURDIR}/install" +if [ "$(ls -A ${INSTALLDIR} | wc -l)" -ne 0 ]; then #判断安装目录是否为空(包括include/, lib/, share/等) + echo "mfem 4.4 already installed at: ${INSTALLDIR}" + exit 0 +fi +# 删除build目录重建 +rm -rf ${BUILDDIR} ${INSTALLDIR} +mkdir ${BUILDDIR} + +cd ${BUILDDIR} || exit 1 + +## 动态库(有问题) +#${cmake} ${CURDIR} \ +# -DCMAKE_BUILD_TYPE=DEBUG \ +# -DBUILD_SHARED_LIBS=ON \ +# -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} \ +# -DMFEM_USE_MPI=ON -DMPIEXEC_EXECUTABLE=${MPIDIR}/bin/mpiexec -DMPICXX=${MPIDIR}/bin/mpicxx \ +# -DMFEM_ENABLE_TESTING=ON -DMFEM_ENABLE_EXAMPLES=ON -DMFEM_ENABLE_MINIAPPS=ON \ +# -DMFEM_USE_LAPACK=ON -DLAPACK_LIBRARIES=${TOPDIR}/lapack/install/lib/liblapack.a -DBLAS_LIBRARIES=${TOPDIR}/lapack/install/lib/libblas.a \ +# -DHYPRE_DIR=${HYPRE_DIR} \ +# -DMETIS_DIR=${METIS_DIR} \ +# -DParMETIS_DIR=${PARMETIS_DIR} \ +# -DMFEM_USE_SUPERLU=ON -DMFEM_USE_SUPERLU5=OFF -DSuperLUDist_DIR=${SUPERLU_DIST_DIR} \ +# -DScaLAPACK_FOUND=TRUE -DScaLAPACK_DIR=${ScaLAPACK_DIR} -DScaLAPACK_LIBRARIES=${ScaLAPACK_DIR}/libscalapack.a \ +# -DMFEM_USE_MUMPS=ON -DMUMPS_DIR=${MUMPS_DIR} \ +# -DMFEM_USE_PETSC=ON -DPETSC_DIR=${PETSC_DIR} -DPETSC_ARCH=arch-linux-c-debug \ +# || exit 1 + +# 静态库 +${cmake} ${CURDIR} \ + -DCMAKE_BUILD_TYPE=DEBUG \ + -DCMAKE_INSTALL_PREFIX=${INSTALLDIR} \ + -DMFEM_USE_MPI=ON -DMPIEXEC_EXECUTABLE=${MPIDIR}/bin/mpiexec -DMPICXX=${MPIDIR}/bin/mpicxx \ + -DMFEM_ENABLE_TESTING=ON -DMFEM_ENABLE_EXAMPLES=ON -DMFEM_ENABLE_MINIAPPS=ON \ + -DHYPRE_DIR=${HYPRE_DIR} \ + -DMETIS_DIR=${METIS_DIR} \ + -DParMETIS_DIR=${PARMETIS_DIR} \ + -DScaLAPACK_FOUND=TRUE -DScaLAPACK_DIR=${ScaLAPACK_DIR} -DScaLAPACK_LIBRARIES=${ScaLAPACK_DIR}/libscalapack.a \ + -DMFEM_USE_MUMPS=ON -DMUMPS_DIR=${MUMPS_DIR} \ + -DMFEM_USE_PETSC=ON -DPETSC_DIR=${PETSC_DIR} -DPETSC_ARCH=arch-linux-c-debug \ + || exit 1 + +# -DMFEM_USE_MUMPS=ON -DMUMPS_DIR=${MUMPS_DIR} \ +# -DScaLAPACK_DIR={ScaLAPACK_DIR} -DScaLAPACK_FOUND=TRUE -DScaLAPACK_INCLUDE_DIRS="" -DScaLAPACK_LIBRARIES="{ScaLAPACK_DIR}/libscalapack.a" -DScaLAPACK_TARGET_NAMES="scalapack" \ + +# 上面的 -D<variable> 参数都可以在 ./config/defaults.cmake 中的 option(...) 或者 set(...) 找到默认值. +# 怎么使用自己安装的MPI而不是系统的MPI? MPIEXEC_EXECUTABLE 指定了自己安装的mpi的路径下面的mpiexec, 由这个可执行文件的路径可以推断出MPI的安装路径: 通过 find_package(MPI REQUIRED). 具体可以参考cmake的安装路径下面的share/cmake-3.17/Modules中的FindMPI.cmake +# 为啥使用hypre只需 -DHYPRE_DIR=${HYPRE_DIR}(metis也是), 而使用mumps需要 -DMFEM_USE_MUMPS=ON -DMUMPS_DIR=${MUMPS_DIR} ? 请查看 ./config/defaults.cmake. +# mumps需要scalapack, 而scalapack需要在defaults.cmake中指定scalapack-config.cmake的路径. 但是安装完scalapack之后没有这个文件!!! + + +echo "============================================" +echo "Configure done. Continue compile: yes or no?" +echo "============================================" +read compile +if [ $compile = no ] ; then + exit 0 +fi + +make -j ${cpucount} + +# 编译examples +cd ${BUILDDIR}/examples || exit 1 +make -j ${cpucount} +# 编译unittest +cd ${BUILDDIR}/tests || exit 1 +make -j ${cpucount} +# 编译miniapps +cd ${BUILDDIR}/miniapps || exit 1 +make -j ${cpucount} +# 编译完上述3个目录下的测试算例之后,下面进行测试 +cd ${BUILDDIR} || exit 1 +${ctest} -E "superlu" # 跳过测试算例名称中含有superlu字符串的算例,太慢了。 + +## 不需要安装 +#mkdir ${INSTALLDIR} +#make install