octopus13并行版安装

16 阅读2分钟

Octopus (octopus-code.org)

准备C编译器和Fortran编译器

Octopus (octopus-code.org)官方的编译支持文档,已经过时且官方暂未更新,考虑到兼容性,这里选择gcc 13.2.0 和 gfortran 13.2.0 。

image.png

其他依赖包:

image.png

关于make、automake、m4、libtool的介绍

在 Linux 系统中,makeautomake 是用于自动化编译程序的工具,它们相互合作以简化源码的编译和安装过程。

m4 是一个非常灵活的宏处理器,通常被用来作为 autoconf 自动生成 configure 脚本的一部分。

libtool 是一个脚本,旨在统一各种 Unix-like 系统上的共享库(dynamic library)支持。

他们之间的关系如下:

  • autoconf: 使用 m4 宏处理器生成可移植的 shell 脚本 configure
  • automake: 提供了更高级的自动化工具,将 Makefile.am 文件转换成适合 autoconfMakefile.in 文件。
  • make: 解析 Makefile,执行编译指令构建程序。
  • libtool: 处理编译过程中共享库和静态库的生成和使用。

必须的数学依赖库

  • BLAS
  • LAPACK
  • GSL
  • FFTW3
  • LibXC

BLAS编译安装

  • 下载解压

下载BLAS3.12.0

image.png

  • 修改编译

解压后进入,修改make.inc

FC  = gfortran -m64 
FFLAGS = -O3 -ffree-line-length-none
FFLAGS_DRV = $(FFLAGS)
FFLAGS_NOOPT =
LOADER = gfortran
LOADOPTS =

image.png

make命令进行编译

  • 生成文件放入指定位置

将结果blas_LINUX.a 拷贝到<basedir>文件夹内的lib文件夹(没有就创建), 并重命名为libblas.a

ln4:~$ cp BLAS-3.12.0/blas_LINUX.a app/lib/

image.png

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 =

image.png

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

image.png

  • 配置编译安装

<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 image.png

autoreconf -i

image.png 然后再次尝试执行 ./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 并行版

  • 下载解压

下载FFTW Download Page

image.png

  • 配置编译安装

<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 安装

Octopus (octopus-code.org)

  • 解压进入文件夹

  • 定义几个临时的环境变量,用来写配置脚本

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

image.png

添加到临时环境变量

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.
**********************************************************************