Rocks 采用Ifc编译器,MKL数据库 VASP编译的过程
创建用户:
adduser -g root mu
passwd mu
rocks sync users
rocks sync config
一 . 软件准备
VASP源代码(vasp.5.2.tar.gz和vasp.5.lib.tar.gz),ifc编译器(l_cprof_p_11.1.064.tgz)icc编译器(l_cproc_p_11.1.064.tgz ),openmpi 软件
#su root 进入root用户,
二.ICC编译器安装
先解压l_cproc_p_11.1.064.tgz 得到l_cproc_p_11.1.064文件夹
进入l_cproc_p_11.1.064文件夹找到install.sh文件
执行./install.sh开始安装icc,
-------------------------------------
注意选择: 2. Custom Install (For Advanced Users)
2. Custom Install - specify individual product components to install
在后面的安装选项中选择安装Intel(R) 64的,不安装IA-32 。安装过程中自带 Math Kernel Library 数学库。
并指定安装目录/share/apps/intel/icc
-------------------------------------
安装完毕 ,ICC安装完成
(卸载时 在目录外执行 安装目录/bin/intel64/uninstall_cproc.sh 进行卸载)
此时,mkl位置 /share/apps/intel/icc/mkl
三. Ifc编译器安装
先解压l_cprof_p_11.1.064.tgz 得到l_cprof_p_11.1.064文件夹
进入l_cprof_p_11.1.064文件夹找到install.sh文件
执行./install.sh开始安装ifc,
-------------------------------------
注意选择 2. Custom Install (For Advanced Users)
2. Custom Install - specify individual product components to install
在后面的安装选项中选择安装Intel(R) 64的,不安装IA-32 。不安装 Math Kernel Library 数学库。
并指定安装目录/share/apps/intel/ifc
-------------------------------------
安装完毕 ,ifc安装完成
(卸载时 在目录外执行 安装目录/bin/intel64/uninstall_cprof.sh 进行卸载,uninstall_debugger.sh也可以)
四.设置环境变量将icc和ifort命令加入环境变量,即在/root/.bashrc 和/home/mu/.bashrc 中加入
source /share/apps/intel/ifc/bin/ifortvars.sh intel64
source /share/apps/intel/icc/bin/iccvars.sh intel64
然后 在root用户和mu用户下分别执行source ~/.bashrc 或 bash
which icc 和which ifort 看看能否找到
注意: 已开bash窗口执行后新环境变量才生效
验证ifort是否可以使用,
#which ifort
写一个简单的a.f90
program test
write(*,*) "iello"
pause
end
然后#ifort a.f90 -o test
#./test
五. mkl和fftw安装
mkl在安装icc时已安装,位置 /share/apps/intel/icc/mkl
cd /share/apps/intel/icc/mkl/interfaces/fftw3xf
make libem64t compiler=intel
得到 libfftw3xf_intel.a
这样,mkl和fftw就齐全了
另一种方法:
1)在intel网站下载 l_mkl_p_10.2.3.029.tar.gz
tar –zxvf l_mkl_p_10.2.3.029.tar.gz
进入解压得到的目录 l_mkl_p_10.2.3.029
执行 ./install.sh,安装和卸载与icc等类似。
fftw安装 http://www.fftw.org/
cd /share/apps/fftw-3.2.2
env CC=gcc F77=ifort ./configure --prefix=/share/apps/fftw --enable-mpi
make && make install
六、openmpi的安装
1)下载openmpi,并解压。进入openmpi目录执行:
./configure --prefix=/share/apps/openmpi/ CC=icc CXX=icpc F77=ifort FC=ifort
make
make install
加入环境变量:
在/root/.bashrc 和/home/mu/.bashrc 中加入
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/share/apps/intel/icc/mkl/lib/em64t:/share/apps/openmpi/lib
(不换行)
export PATH=$PATH:/share/apps/openmpi/bin
在root用户和mu用户下分别执行: source ~/.bashrc
另一种方法 :impi的安装及使用
1、 进入源文件所在的目录, ./install.sh 进行安装,
注意选择 1. Install cluster node software on an automounted shared file system
安装时注意选择安装目录 /share/apps/intel/impi
(卸载时目录外执行 相应目录下uninstall.sh 进行卸载)
2、增加环境变量
在/root/.bashrc 和/home/mu/.bashrc 中加入
source /share/apps/intel/impi/bin64/mpivars.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/share/apps/intel/icc/mkl/lib/em64t:/share/apps/intel/impi/lib64
在root用户和mu用户下分别执行: source ~/.bashrc
注意:impi的的并行编译器为mpiifort。
七.vasp 安装
1)su root ,将
vasp.5.2.12.tar.gz
vasp.5.lib.tar.gz
vtstcode.tar.gz
(其中 vtstcode.tar.gz 来自:http://theory.cm.utexas.edu/vtsttools/index.php )
拷贝到 /share/apps/vasp 目录下,并将
vasp.5.2.12.tar.gz
vasp.5.lib.tar.gz
vtstcode.tar.gz
分别解压
并将vtstcode的内容复制到/share/apps/vasp/vasp.5.2下.
chown -Rv mu:root vasp.5.2
chown -Rv mu:root vasp.5.lib
su mu
2)进入vasp.5.lib所在目录
根据自己机子的情况选择合适的makefile
一般选择 makefile.linux_ifc_P4 (即 ifort编译器和intel的cpu)
编辑makfile
18行 CPP = gcc -E -P -C ∗.F> *.f 改为
CPP = icc -E -P -C ∗.F> *.f19行的 FC=ifc 修改为 FC=ifort(也可以是绝对路径)
并添加 CC = icc
make
如果编译通过,说明前面安装的数学库和编译器等都是正确的
3)进入vasp.5.2所在目录
执行 perl mkbdrpro.pl bdr_changes,产生 bdrpro.F
然后将 cp makefile.linux_ifc_P4 makefile,打开 makefile
在84行和85行CPP前加上#注释掉(即将前面的串行配置去掉)
第94行 FFLAGS = -FR -lowercase -assume byterecl 后面加上 -heap-arrays 64 (针对 ifort 10 以上)
第109行 OFLAG=-O2 -ip -ftz 改为 OFLAG=-O3
将130行的BLAS= 加上#注释掉
将133行 LAPACK= ../vasp.5.lib/lapack_double.o前加#注释
将136行 LAPACK= -lmkl_lapack 改为
LAPACK= -L/share/apps/intel/icc/mkl/lib/em64t -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -i-static
将140-142行的LIB= 四行前加#
将154行前FFT3D = fft3dfurth.o fft3dlib.o 前加#
将172行前#去掉,并改成 FC=mpif90
将173行前#去掉,并改成 FCL=$(FC)
将190行到193行 CPP = 前的#去掉,并在192行-DMPI_BLOCK=8000 后面加 \,并将
-DCACHE_SIZE=4000 改为 -DCACHE_SIZE=16000 (仅供参考,可以使用默认)
将213-215行LIB= 前#去掉
将221行 #FFT3D = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o /opt/libs/fftw-3.1.2/lib/libfftw3.a
改为 FFT3D = fftmpi.o fftmpi_map.o fftw3d.o fft3dlib.o /share/apps/intel/icc/mkl/interfaces/fftw3xf/libfftw3xf_intel.a
前面是基本的并行编译配置,
后面加上Bader电荷计算和VTST代码等配置:
1) 找到有 sphpro.o的行(大约在240行)将
steep.o chain.o dyna.o sphpro.o us.o core_rel.o \
改为
steep.o chain.o dyna.o sphpro.o bdrpro.o us.o core_rel.o \2) 大约仍在240行,在steep.o 和chain.o之间加入
dimer.o dynmat.o neb.o lanczos.o instanton.o sd.o cg.o qm.o lbfgs.o bfgs.o fire.o opt.o(注意换行)
3) 在main.F 中 将 CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
LATT_CUR%A,LATT_CUR%B,IO%IU6)
替换为:
CALL CHAIN_FORCE(T_INFO%NIONS,DYN%POSION,TOTEN,TIFOR, &
TSIF,LATT_CUR%A,LATT_CUR%B,IO%IU6)
保存退出。
然后 make 得到 vasp ,并 mv vasp vaspmpi
make clean
make makeparam ,得到 makeparam
make clean
修改makefile 的190行
CPP = $(CPP_) -DMPI -DHOST=\"LinuxIFC\" -DIFC \
-DCACHE_SIZE=16000 -DPGF90 -Davoidalloc -DNGZhalf \
-DMPI_BLOCK=8000 \
-DRPROMU_DGEMV -DRACCMU_DGEMV
去掉-DNGZhalf
make,并 mv vasp vaspsoc
将vaspmpi, makeparam和vaspsoc拷贝到 /share/apps/mybin下,并执行 source ~/.bashrc
注意:基本sge提交脚本见另一篇博文《Vasp sge提交的基本脚本》,当提交多节点任务时注意INCAR中NPAR设置,否则会报错。
八 增加其他用户
/usr/sbin/adduser -g root han
passwd han
rocks sync users
rocks sync config
在 /home/han/.bashrc 内添加
source /share/apps/intel/ifc/bin/ifortvars.sh intel64
source /share/apps/intel/icc/bin/iccvars.sh intel64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/share/apps/intel/icc/mkl/lib/em64t:/share/apps/openmpi/lib
(不换行)
export PATH=$PATH:/share/apps/openmpi/bin
然后
source /home/han/.bashrc
搞定收工!!!!
===============
后记:
1)LAPACK 与BLAS库也可以使用其它的,如在Rocks集群上quantum-espresso(pwscf)安装中使用的LAPACK 与BLAS库,相应设置:
BLAS= -L/share/apps/lapack-3.3.0 -lblas
LAPACK= -llapack
或者 BLAS采用Kazushige Goto's BLAS,LAPACK采用lapack_double.o 的编译得到vasp,据说计算速度最快。
2)fftw库也可以使用MKL自带的,注意 FFT3D = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o/opt/libs/fftw-3.1.2/lib/libfftw3.a中的路径与文件名(一般为mkl安装路径/interfaces/fftw3xf/libfftw3xf_intel.a)。