外观
PETSc 科学计算库安装与配置
最近在 Ubuntu 上重新整理了一遍 PETSc 的安装流程,顺手记一份可复用的笔记。官方文档当然更完整,但第一次配环境时,真正麻烦的往往不是“有没有文档”,而是“该装哪些依赖、configure 该怎么配、装完之后怎么确认能不能用”。这篇文章就按我自己的实际安装过程来写。
在 Ubuntu 上可以通过包管理器 apt 安装 PETSc,但通常版本比较旧,也没有第三方库。PETSc 是科学计算的集大成者,可以用它来管理许多第三方科学计算库(mumps, hypre等),所以更推荐从源码安装。
PETSc 官网在这里:https://petsc.org/。
我的环境
这次安装使用的环境是:
- Ubuntu 24.04 LTS
- GCC 13.3.0
- Python 3.12.3
- OpenMPI
- 安装位置:
/opt/petsc
如果你的系统版本不同,命令未必一字不差,但整体流程是类似的。
先把基础依赖装好
PETSc 自己不算难装,真正决定安装体验的是依赖是否齐全。基础工具直接用 apt 管理:
sudo apt update
sudo apt install -y build-essential gfortran cmake
sudo apt install -y libopenmpi-dev openmpi-bin
sudo apt install -y python3 python3-dev
sudo apt install -y git wget这里面 MPI、Fortran 编译器和 Python 基本都少不了。很多外部库会在 configure 阶段顺手拉下来编译,所以这些底层工具最好一开始就准备好。
BLAS/LAPACK:推荐 OpenBLAS
PETSc 依赖 BLAS/LAPACK。我单独装了一份 OpenBLAS,路径在 /opt/OpenBLAS。
cd ~/software
git clone https://github.com/OpenMathLib/OpenBLAS.git
cd OpenBLAS
make -j$(nproc)
sudo make PREFIX=/opt/OpenBLAS install
echo '/opt/OpenBLAS/lib' | sudo tee /etc/ld.so.conf.d/openblas.conf
sudo ldconfig如果你已经有可用的 BLAS/LAPACK,也可以直接让 PETSc 指向现成路径;我这里只是记录一套比较干净、可控的装法。
下载 PETSc
我一般直接跟踪 release 分支:
cd ~/software
git clone -b release https://gitlab.com/petsc/petsc.git petsc
cd petsc如果更在意可复现,也可以在官网下载具体版本:
tar -xzf petsc-3.23.0.tar.gz
cd petsc-3.23.0我实际使用的配置
下面这组参数是我这次装机时用的配置:
./configure \
--prefix=/opt/petsc \
--with-blaslapack-dir=/opt/OpenBLAS \
--download-superlu_dist \
--download-mumps \
--download-hypre \
--download-metis \
--download-parmetis \
--download-scalapack \
--download-hdf5 \
--with-gmsh=1这套配置的思路很简单:核心数值库自己指定,常用外部求解器和并行相关组件让 PETSc 自己下载。这样做的好处是省事,坏处是 configure 和编译阶段会更久一些。
如果只是想先确认环境能不能跑起来,其实也不用一次把所有外部库都带上。先装出一个最小可用版本,后面再按需要补 HYPRE、MUMPS、HDF5,排错通常会轻松很多。但还是推荐用 --download-xxx 的方式,让 PETSc 自己管理这些库的版本和编译选项,能避免很多兼容性问题,这些 PETSc 自己安装的第三方库在 arch-linux-c-debug/externalpackages/ 目录下。
这些选项大概是干什么的
最常用、也最值得记住的,其实就是下面几个:
--prefix=/opt/petsc:指定最终安装位置。--with-blaslapack-dir=/opt/OpenBLAS:告诉 PETSc 去哪里找 BLAS/LAPACK。--download-hypre:代数多重网格相关能力,迭代求解时很常见。--download-mumps、--download-superlu_dist:直接求解器。--download-metis、--download-parmetis:网格划分和并行分区。--download-hdf5:后处理和数据输出。--with-gmsh=1:需要读.msh网格文件时比较省事。
如果你已经明确知道系统 MPI 的位置,也可以直接指定:
./configure \
--prefix=/opt/petsc \
--with-mpi-dir=/usr \
--with-blaslapack-dir=/opt/OpenBLAS \
--download-hypre编译、测试、安装
configure 成功以后,终端最后会给出一条明确的 make 命令。按它提示的 PETSC_DIR 和 PETSC_ARCH 去编译就行。
例如:
make PETSC_DIR=/home/wugs/software/petsc PETSC_ARCH=arch-linux-c-debug all编译完成后,可以顺手跑一下检查:
make PETSC_DIR=/home/wugs/software/petsc PETSC_ARCH=arch-linux-c-debug check没问题再安装:
sudo make PETSC_DIR=/home/wugs/software/petsc PETSC_ARCH=arch-linux-c-debug install如果外部库比较多,这一步通常要等一阵子,属于正常现象。
环境变量
安装到 /opt/petsc 之后,我这里在 ~/.bashrc 里只保留了最基本的两个变量:
export PETSC_DIR=/opt/petsc
export PETSC_ARCH=""然后重新加载:
source ~/.bashrc这里 PETSC_ARCH 设为空,是因为已经执行过 make install,后续更多是把它当成一个标准安装目录来用,而不是继续在源码树里直接编译。
装完之后怎么确认没问题
我一般先做一个很朴素的检查:相关配置文件在不在。
ls ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc/conf/petscvariables
ls ${PETSC_DIR}/lib/petsc/conf/variables
ls ${PETSC_DIR}/lib/petsc/conf/rules前一条命令里 ${PETSC_ARCH} 是空字符串,所以第一行实际会展开成 ${PETSC_DIR}/lib/petsc/conf/petscvariables。写成这种形式只是为了和源码树里的目录结构对应起来看。
然后再试最基本的示例程序编译和运行。这些例子在 PETSc 的源码树里都有,路径大概是 src/ksp/ksp/tutorials。例如:
make ex1
./ex1 -ksp_monitor
make ex2
mpirun -np 4 ./ex2 -ksp_monitor只要串行和 MPI 的例子都能正常跑起来,后面写自己的程序通常就不会再卡在安装层面。
版权所有
版权归属:Guisong Wu