alamode 编译安装教程
# alamode编译安装教程
# 简介
ALAMODE是一个开源软件,用于分析固体的晶格非谐性和晶格导热系数。通过使用外部DFT软件包,如VASP和Quantum ESPRESSO,您可以使用ALAMODE直接提取谐波和非简谐力常数。利用计算出的非简谐力常数,你还可以根据第一原理估算晶格热导率、声子线宽和其他非谐声子性质。
官网文档:https://alamode.readthedocs.io/en/latest/ (opens new window)
下载地址:https://sourceforge.net/projects/alamode/ (opens new window)
安装说明:https://alamode.readthedocs.io/en/latest/install.html (opens new window)
# 安装
# 配置编译环境
编译环境需要:
- 编译器
- MPI编译器
- cmake命令
- MKL库
我们在TH-HPC
集群使用如下编译环境:
# 使用module命令加载相关模块(以Intel Compiler 2016为例)
module add cmake/3.12.0-gcc4.8
module add Intel_compiler/16.0.3
module add MKL/16.0.3
module add MPI/Intel/IMPI/5.1.3.210
# 进入用户跟目录!!!( 后面的一些目录配置,默认在用户根目录下完成的 )
cd ~
2
3
4
5
6
7
8
提示
不同系统加载编译环境方式不同,请根据系统用户手册加载相关编译环境。也可以用GNU Compiler等编译器。
# 安装依赖库
# boost
不需要编译库,只需要配置头文件的软连接。
# boost
# 前往https://www.boost.org/users/history/version_1_64_0.html
# 下载boost_1_64_0.tar.bz2
# 拷贝到用户根目录
tar xvf boost_1_64_0.tar.bz2
mkdir include; cd include
ln -s ../boost_1_64_0/boost .
cd ..
2
3
4
5
6
7
8
9
# eigen
不需要编译库,只需要配置头文件的软连接
# eigen
# 前往https://gitlab.com/libeigen/eigen/-/archive/3.3.3/eigen-3.3.3.tar.bz2
# 下载eigen-3.3.3.tar.bz2
# 拷贝到用户根目录
tar xvf eigen-3.3.3.tar.bz2
cd include
ln -s ../eigen-3.3.3/Eigen .
cd ..
2
3
4
5
6
7
8
9
# spglib
这个库需要编译安装,并配置环境变量。后续需要用到相关头文件和库进行编译链接。
# spglib
# 前往https://github.com/spglib/spglib/tags
# 下载spglib-1.16.0.tar.gz
# 拷贝到用户根目录
tar zxvf spglib-1.16.0.tar.gz
cd spglib-1.16.0
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX="" ..
make
make DESTDIR=$HOME/software/spglib-1.16.0 install
export SPGLIB_ROOT=$HOME/software/spglib-1.16.0
2
3
4
5
6
7
8
9
10
11
注意
设置了安装目录为:$HOME/software/spglib-1.16.0,用户可以自行选择安装目录,随意即可,注意设置相同安装目录为SPGLIB_ROOT
即可。
# 安装ALAMODE
官网说明提示,安装alamode软件需要安装三个部分:
- alm
- anphon
- tools
下面依次安装相关部分。
# 解压缩
# alamode
# 前往https://sourceforge.net/projects/alamode/
# 下载alamode-1.1.0.tar.gz
# 拷贝到用户跟目录
tar zxvf alamode-1.1.0.tar.gz
cd alamode-1.1.0
2
3
4
5
6
# alm
稍微修改一下Makefile文件,编译即可生成alm
文件。
cd alm/
cp Makefile.linux Makefile
2
修改Makefile文件,说明如下:
- 默认使用
CXX=icpc
,这是 Intel Compiler 编译 C++ 程序的编译器命令。 - 请将
-L$(SPGLIB_ROOT)/lib
改为-L$(SPGLIB_ROOT)/lib64
。其中SPGLIB_ROOT
刚才在安装spglib时候已经设置过,改为lib64
是因为我们下载的最新spglib库的库目录文件夹不是lib
而是lib64
。
然后,执行make
命令即可:
make -j # 并行编译
说明:
-j
是并行编译,即使用当前环境中的所有CPU核心一起编译,可以加快编译速度。
# anphon
基本步骤与编译alm
相似,修改Makefile文件后编译即可。
cd ../anphon/
cp Makefile.linux Makefile
2
修改Makefile文件,说明如下:
我们选择使用Intel的IMPI作为MPI编译器,使用icpc命令作为C++编译器,因此需要将
mpicxx
改为mpiicpc
。如果是其他版本的MPI编译器,通常命令就是mpicxx
无需更改。#MPICXX = mpicxx MPICXX = mpiicpc
1
2编译过程发现需要 fftw 库的头文件,我们选择 Intel Compiler 中的 MKL 库提供的 fftw 库的接口,在
INCLUDE
中添加路径即可,如下:#INCLUDE = -I../include INCLUDE = -I../include -I$(HOME)/include -I$(MKLROOT)/include/fftw
1
2
然后,执行make
命令即可:
make -j # 并行编译
# tools
基本步骤与编译alm
相似,修改Makefile文件后编译即可。
cd ../tools/
2
修改Makefile文件,说明如下:
我们继续使用
icpc
命令作为编译器,因此修改 Makefile 文件参数,如下:#Intel compiler CXX = icpc # OSX (gcc) #CXX = g++-8
1
2
3
4
5
然后,执行make
命令即可:
make -j # 并行编译
# 配置环境
安装完成后,可以配置环境,方便下次使用:
export PATH=$HOME/alamode-1.1.0/alm:$PATH
export PATH=$HOME/alamode-1.1.0/anphon:$PATH
export PATH=$HOME/alamode-1.1.0/tools:$PATH
export LD_LIBRARY_PATH=$HOME/install/spglib-1.16.0/lib64:$LD_LIBRARY_PATH
2
3
4
# 简易脚本安装
通过以上过程,即可编译好alamode软件,我们将所有相关命令写成make-alamode.sh
脚本,用户需要将相关压缩包和该脚本放在同一目录下(不一定是用户根目录,脚本中有调整目录的参数),然后适当修改编译脚本(如编译器加载的命令基本一肯定需求修改),再然后执行source make-alamode.sh
即可编译成功。脚本内容如下:
#!/bin/bash -e
# file: make-alamode.sh
echo "Script for alamode install."
IMPI=yes # 'yes' to use mpiicpc
# ----------------
# Need Change!!!
# ----------------
# cmake / icpc / mpi
module add cmake/3.12.0-gcc4.8
module add Intel_compiler/16.0.3
module add MKL/16.0.3
module add MPI/Intel/IMPI/5.1.3.210
# ----------------
# get current directory
export CMD=`pwd`
# ----------------
# boost
# ----------------
# wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.bz2
tar xvf boost_1_64_0.tar.bz2
mkdir include;
cd include
ln -s ../boost_1_64_0/boost .
cd ..
# ----------------
# eigen
# ----------------
# wget https://gitlab.com/libeigen/eigen/-/archive/3.3.3/eigen-3.3.3.tar.bz2
tar xvf eigen-3.3.3.tar.bz2
cd include
ln -s ../eigen-3.3.3/Eigen .
cd ..
# ----------------
# spglib
# ----------------
# wget https://codeload.github.com/spglib/spglib/tar.gz/v1.16.0
tar zxvf spglib-1.16.0.tar.gz
cd spglib-1.16.0
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX="" ..
make
make DESTDIR=$CMD/install/spglib-1.16.0 install
export SPGLIB_ROOT=$CMD/install/spglib-1.16.0
cd ../..
# ---------------------
# alamode
# ---------------------
# wget https://sourceforge.net/projects/alamode/files/alamode-1.1.0.tar.gz/download
tar zxvf alamode-1.1.0.tar.gz
cd alamode-1.1.0
# ====================
# # alm
# ====================
# wget https://sourceforge.net/projects/alamode/files/alamode-1.1.0.tar.gz/download
cd alm/
cp Makefile.linux Makefile
# change parameters
sed -i "s%\$(HOME)%$CMD%" Makefile # change 'include' directory
sed -i "s/lib/lib64/" Makefile # change 'spglib/lib' directory
# compile
make -j
# ====================
# # anphon
# ====================
cd ../anphon/
cp Makefile.linux Makefile
# change parameters
if [[ $IMPI == 'yes' ]];then
sed -i "s/mpicxx/mpiicpc/" Makefile
fi
sed -i "s/-openmp/-qopenmp/" Makefile
sed -i "s%INCLUDE =%INCLUDE = -I$CMD/include -I\$(MKLROOT)/include/fftw%" Makefile # fftw include
# compile
make -j
# ====================
# # tools
# ====================
cd ../tools/
# change parameters
sed -i "s/#CXX = icpc/CXX = icpc/" Makefile # change compiler
sed -i "s/CXX = g++-8/#CXX = g++-8/" Makefile
sed -i "s%\$(HOME)%$CMD%" Makefile # change 'include' directory
# compile
make -j
cd ../..
# ----------------
# env
# ----------------
echo
echo "You should add the following lines to use alamode in any path:"
echo
echo " export PATH=$CMD/alamode-1.1.0/alm:\$PATH"
echo " export PATH=$CMD/alamode-1.1.0/anphon:\$PATH"
echo " export PATH=$CMD/alamode-1.1.0/tools:\$PATH"
echo " export LD_LIBRARY_PATH=$SPGLIB_ROOT/lib64:\$LD_LIBRARY_PATH"
echo
echo "Please add the compiler envrionment too."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117