准备C编译器和Fortran编译器
Octopus (octopus-code.org)官方的编译支持文档,已经过时且官方暂未更新,考虑到兼容性,这里选择gcc 13.2.0 和 gfortran 13.2.0 。
其他依赖包:
关于make、automake、m4、libtool的介绍
在 Linux 系统中,make 和 automake 是用于自动化编译程序的工具,它们相互合作以简化源码的编译和安装过程。
m4 是一个非常灵活的宏处理器,通常被用来作为 autoconf 自动生成 configure
脚本的一部分。
libtool 是一个脚本,旨在统一各种 Unix-like 系统上的共享库(dynamic library)支持。
他们之间的关系如下:
- autoconf: 使用
m4
宏处理器生成可移植的 shell 脚本configure
。 - automake: 提供了更高级的自动化工具,将
Makefile.am
文件转换成适合autoconf
的Makefile.in
文件。 - make: 解析
Makefile
,执行编译指令构建程序。 - libtool: 处理编译过程中共享库和静态库的生成和使用。
必须的数学依赖库
- BLAS
- LAPACK
- GSL
- FFTW3
- LibXC
BLAS编译安装
- 下载解压
- 修改编译
解压后进入,修改make.inc
FC = gfortran -m64
FFLAGS = -O3 -ffree-line-length-none
FFLAGS_DRV = $(FFLAGS)
FFLAGS_NOOPT =
LOADER = gfortran
LOADOPTS =
用make命令进行编译
- 生成文件放入指定位置
将结果blas_LINUX.a 拷贝到<basedir>文件夹内的lib文件夹(没有就创建), 并重命名为libblas.a
ln4:~$ cp BLAS-3.12.0/blas_LINUX.a app/lib/
LAPACK
- 下载解压
下载LAPACK — Linear Algebra PACKage (netlib.org)
解压进入文件夹
- 修改编译
ln4:~$ cd lapack-3.12.0/
ln4:lapack-3.12.0$ cp make.inc.example make.inc
ln4:lapack-3.12.0$ vim make.inc
FC = gfortran -m64
FFLAGS = -O3 -ffree-line-length-none
FFLAGS_DRV = $(FFLAGS)
FFLAGS_NOOPT =
LOADER = gfortran
LOADOPTS =
用make lib命令进行编译
- 生成文件放入指定位置
将生成的liblapack.a复制到lib文件夹。
如果生成的是lapack_LINUX.a,则重命名为liblapack.a再放入lib目录下
ln4:lapack-3.12.0$ cp liblapack.a ~/app/lib/
GSL
- 下载解压
下载GSL - GNU Scientific Library - GNU Project - Free Software Foundation
- 配置编译安装
<basedir>改成自己的路径,比如~/app/
./configure CC="gcc -m64" --prefix=<basedir> --disable-shared --enable-static
make && make install
LibXC
官方要求:
Requires libxc version 5 or later (libxc 5.2.3 recommended)
- 下载解压
下载Libxc - a library of exchange-correlation functionals for density-functional theory
tar xf libxc-6.2.2.tar.bz2 && cd libxc-6.2.2/
- 配置编译安装 <basedir>改成自己的路径,比如~/app/
./configure --prefix=<basedir> CC="gcc -m64" CFLAGS="-O3 -march=native" FC="gfortran -m64" FCFLAGS="-O3 -ffree-line-length-none"
生成configure文件
出错,找不到./configure
autoreconf -i
然后再次尝试执行 ./configure 那一串命令,无误进入下一步
make && make install
OpenMPI
安装FFTW前置条件,有的话就不用安装了
下载Open MPI: Version 4.1 (open-mpi.org)
- 下载解压配置安装
./configure --prefix=basedir CC="gcc -m64" CFLAGS="-O3 -march=native" F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none"
make && make install
FFTW 3 并行版
- 下载解压
- 配置编译安装
<basedir>改成自己的路径,比如~/app/
./configure --prefix=<basedir> CC="gcc -m64" CFLAGS="-O3 -march=native" \
F77="gfortran -m64" F77FLAGS="-O3 -ffree-line-length-none" \
--enable-mpi --enable-openmp --enable-threads \
--enable-shared --enable-static
make && make install
Octopus 安装
-
解压进入文件夹
-
定义几个临时的环境变量,用来写配置脚本
export LIBS_BLAS=<basedir>/lib/libblas.a
export LIBS_LAPACK=<basedir>/lib/liblapack.a
export LIBS_FFT=<basedir>/lib/libfftw3.a
- 配置脚本, 使用mpi版本的c和fortran编译器来编译:
autoreconf -i
5个<basedir>
记得改成自己的路径
./configure CC="mpicc -m64" CFLAGS="-O3 -march=native" FC="mpifort -m64" \ FCFLAGS="-O3 -ffree-line-length-none" --prefix=<basedir> \ --with-gsl-prefix=<basedir> --with-libxc-prefix=<basedir> --with-fftw-prefix=<basedir> \ --with-blas=<basedir> --enable-mpi --enable-openmp
- 如果提示找不到BLAS库,可修改这部分
--with-blas="-L<basedir>/lib -lblas"
- 编译安装
make && make install
添加到临时环境变量
export PATH=$PATH:<basedir>/bin/
添加到环境变量
echo export PATH="$PATH:<basedir>/bin/" >> ~/.bashrc
source ~/.bashrc
测试
新建一空文件夹并进入,建立一个文件,命名为 inp ,并将其内容编辑为:
CalculationMode = gs
%Coordinates
'H' | 0 | 0 | 0
%
Spacing = 0.25 * angstrom
Radius = 4.0 * angstrom
注:文件只能命名为 inp, octopus 只识别这个输入文件名
接下来试运行:
octopus &> output
即可运行octopus, &>
意为将输出结果重定向到新建的 output 文件中。
若只运行:
octopus
则输出会在屏幕上实时显示。
- 并行测试:
mpirun -np 2 octopus
出现如下信息表示成功
************************** Parallelization ***************************
Info: Octopus will run in *parallel*
Number of processes : 2
Number of threads per process : 1
Info: Number of nodes in ParDomains group: 2 ( 17077)
Info: Octopus will waste at least 0.01% of computer time.
**********************************************************************