. pccompile
#!/bin/bash
export CC=gcc
export CXX=g++
./autogen.sh
./configure --prefix=/home/jrf/tools/valgrind --with-mpicc=mpicc
PETSc和SLEPc安装的每一步完成后,都会给出下一步要做的命令
执行. pccompile
#!/bin/bash
./configure --with-cc=mpicc --with-cxx=mpicxx --with-fc=mpif90 --with-openblas=1 --with-openblas-dir=/home/jrf/tools/openblas --with-valgrind-dir=/home/jrf/tools/valgrind --prefix=/home/jrf/tools/petsc3.15.1
#use default valuse as below
# -with-precision=double with single may acquire better performance and less memory use
# --with-scalar-type=real
# --with-64-bit-indices=0
编译
make all check
执行完这一步,会在软件包所在目录生成头文件和库文件,目录为:
$PETSC_DIR/$PETSC_ARCH/lib
$PETSC_DIR/$PETSC_ARCH/include
若是in-place安装(安装到安装包所在位置,这样有助于使用git 追踪最新版本,重新编译比较方便),则到这里就可以停止了,但若是想out-place安装(安装到其他位置),还需要执行第3步
安装到指定位置
make PETSC_DIR=/home/jrf/package/petsc-3.15.1 PETSC_ARCH=arch-linux-c-debug install
注意,这条命令中的PETSC_ARCH可能会不同,最方便的方法是查看第2步完成后的提示,会直接给出第3步运行需要的命令。
PETSC_DIR 和 PETSC_ARCH
这两个环境变量用于PETSc和SLEPc的多版本安装,作用分别是(1)编译时指定某个版本的安装位置和(2)使用时指定用哪个版本。
a. PETSC_DIR 指定安装根目录
b. PETSC_ARCH 若在同一个根目录中安装多个版本,需要使用该参数指定某个版本安装在根目录的哪个文件夹下。
若指定了PETSC_ARCH参数,在编译完成后,会在安装包根目录生成一个名为$PETSC_ARCH
的文件夹,里面装的就是编译好的petsc程序,包括他的可执行程序、头文件和库文件等。这在需要同时安装多个版本的PETSc(比如说用不同编译器intel、gcc,或不同的MPI函数库)时十分有用,可以在编译的时候定义PETSC_ARCH
为不同的值(如PETSc-intel、PETSc-gcc),编译好后会自动把他们装在安装包根目录下不同的文件夹里,文件夹的名字就是PETSC_ARCH
的值。
编译时若要装在不同的文件夹时,需要加上如下的编译选项:
./configure PETSC_ARCH=linux-gnu ...
在安装完成后,将以下命令写在.bashrc文件中,当有多个版本的时候,若是In-place安装,同一个目录下会有多个PETSc版本,这时候就可以通过指定环境变量PETSC_ARCH
的值来选择使用哪个版本。
export PETSC_DIR=/home/jrf/tools/petsc3.15.1
export PETSC_ARCH=arch-linux-c-debug #仅在in-place安装下需要
在安装SLEPc的时候同样需要指定这两个参数,以确定SLEPc基于哪个版本的PETSc安装。如果in-place安装只有PETSc的一个版本或是out-place安装的PETSc,则无需指定PETSC_ARCH。
in-place和out-place的安装说明
Installation Location: In-place or Out-of-place
使用PETSc 和SLEPc的库编译自己的程序时,在两个库的安装包里任意目录执行如下命令,可以获取编译所需要的链接库、头文件等信息。但是注意,这里面没有SLEPc的任何信息,需要手动添加。
make getlinklibs getincludedirs getcflags getcxxflags getfortranflags getccompiler getfortrancompiler getcxxcompiler
手动添加SLEPc的信息,示例如下
-Wl,-rpath,/home/jslo/software/slepc-3.15.1/linux-gnu-intel/lib -L/home/jslo/software/slepc-3.15.1/linux-gnu-intel/lib -lslepc
-I/home/jslo/software/slepc-3.15.1/linux-gnu-intel/include -I/home/jslo/software/slepc-3.15.1/include
1.configuration 编写如下pccompile文件,并且执行. pccompile
#!/bin/bash
export PETSC_DIR=/home/jrf/tools/petsc3.15.1
./configure --prefix=/home/jrf/tools/slepc3.15.1 #--with-64-bit-indices=0 --with-scalar-type=real --with-precision=double --with-cc=mpiicc --with-cxx=mpiicpc --with-fc=mpiifort --with-blaslapack-dir=/opt/intel/oneapi/mkl/latest/lib/intel64 --with-valgrind-dir=/home/jslo/software/valgrind
#--with-64-bit-indices=1 to use 8 byte integers (long long) for indexing in vectors and matrices. This is only needed when working with over roughly 2 billion unknowns.
make check
出错[jrf@login09 slepc-3.15.1]$ make SLEPC_DIR=/public/home/jrf/tools/slepc3.15.1/gcc7.3.1 PETSC_DIR=/public/home/jrf/tools/petsc3.15.1/gcc7.3.1 PETSC_ARCH="" check
Running test examples to verify correct installation
Using SLEPC_DIR=/public/home/jrf/tools/slepc3.15.1/gcc7.3.1, PETSC_DIR=/public/home/jrf/tools/petsc3.15.1/gcc7.3.1 and PETSC_ARCH=
Possible error running C/C++ src/eps/tests/test10 with 1 MPI process
[1628066969.257585] [login09:102328:0] ucp_context.c:735 UCX WARN network devices 'mlx5_1:1','mlx5_2:1','mlx5_3:1' are not available, please use one or more of: 'enp97s0f0'(tcp), 'enp97s0f1'(tcp), 'ib0'(tcp), 'mlx5_0:1'(ib)
Fiedler vector of a 2-D regular mesh, N=110 (10x11 grid)
Number of requested eigenvalues: 4
All requested eigenvalues computed up to the required tolerance:
7.82110, 7.58462, 7.53702, 7.30054
gmake[3]: *** [makefile:73:testtest10] 错误 1
gmake[2]: *** [makefile:110:check_build] 错误 2
gmake[1]: *** [makefile:106:check] 错误 2
make: *** [GNUmakefile:12:check] 错误 2