计算化学公社
标题: 正确使用超算中心,5分钟搞定vasp5.4.4编译 [打印本页]
作者Author: 啦啦黑还黑 时间: 2018-10-16 13:30
标题: 正确使用超算中心,5分钟搞定vasp5.4.4编译
今天就来讲讲VASP的编译
首先直接上视频:https://www.bilibili.com/video/av33956717/
欢迎加入理论计算化学研习社(QQ群:905699144),线上课程用到的资料都会在群里共享。
曾经,第一性原理编译是个世界性难题,无数刚入计算科学的朋友都倒在了编译程序的路上。
好在随着计算机系统管理的发展和程序的发展,编译VASP变得越来越简单。直到vasp5.4版本以后,编译vasp已经基本是傻瓜式的了,只要把intelmkl 和mpi库加载的路径改一下,很快就能编译好。所以,我讲编译vasp也变得简单的多,希望初学者不要倒在编译程序的门口。
网路充斥着非常多的vasp编译教程,由于老版本和新版差别比较大,使用不同的库和参数编译出来有可能性能差异也比较大。我这里建议的时针对2018年10月最新的vasp5.4.4,和最新intel2018的编译方法。也请之后学习此教程的朋友们注意新最版的vasp可能和我现在讲的方法不太一样。
问:编译VASP倒是在干什么?
答:把vasp.at上的vasp代码变成可执行文件。
问:vasp编译用什么版本?
答:一律用5.4.4
问:在每个机器上的编译方法一样吗?
答:取决于系统环境。如果您用的天河2号,或者中科院超算云,或者并行科技的机时,那么恭喜,您的VASP安装过程将会非常简单,makefile.include不用做任何修改就能编译出性能优秀的VASP原版执行文件,整个操作的过程只要大约5分钟。因为我用的就是超算云和并行科技的机时,所以今天我就演示在中科院超算云上的安装过程。
问:如果想要给VASP添加其他功能,是否要重新编译?
答:是的,但是如果一开始就把自己需要的功能就加进去,就可以一劳永逸了,这里我们编译的时候把constr_cell_relax.F,vaspsol,ssnbo和VTST都加进去,暂时我们用到的就这三个功能。
编译原版VASP5.4.4步骤:3步走
下载正版VASP5.4.4和patch.5.4.4.16052018文件。Patch文件修补现有bug的文件,最好在编译之前运行。
(2)把vasp.5.4.4.tar.gz和patch.5.4.4.16052018这两个文件上传到~/apps/文件夹下。
(3)登陆服务器
cd~/apps
tar –zxvfvasp.5.4.4.tar.gz
gunzippatch.5.4.4.16052018.gz
cp patch.5.4.4.16052018 ./vasp.5.4.4
cd./vasp.5.4.4
patch-p0 < patch.5.4.4.16052018
cparch/makefile.include.linux_intel ./makefile.include
moduleava #(查看intel mkl和mpi库,使用超算中心上最新版本的intel mkl和mpi库)
moduleload intel/18.0.2-fast
moduleload mpi/intel/18.0.2-fast
echo$MKLROOT #(查看intelmkl库)
makeall
冲杯咖啡,稍等一刻钟,搞定
ls./bin #如果显示vasp_gam vasp_ncl vasp_std则编译成功
VASP原版几点注意事项:
(1)这里我们没有调用MPI和fftw库,是因为我们都是用的intel自带的MPI和fftw库。
(2)intel版本必须在2015(含)以上,否则会出现奇怪的错误,版本越高越好。
(3)如果使用intel2018的库可以把OFLAG设置成O3 同时针对机器CPU和vasp代码优化,再添加浮点稳定参数可使vasp效率进一步提升至少10%。这里为了稳定和操作简单化,我们就不调整这个参数了。这个内容会在线下课程里
(4) makefile.include里的参数我就不一一介绍了, 直接用默认的就好。
(5)我们编译使用的是intel动态库,在提交的使用同样需要加载一样的动态库,操作十分简单:moduleload intel/18.0.2-fast,module load mpi/intel/18.0.2-fast
(6)如果不使用动态库,需要自己手动在makefile.include里设置$MKLROOT和intel mpi的路径,
比如:MKLROOT = /public1/soft/intel/2015/composer_xe_2015.6.233/mkl
同时在提交任务的时候需要加载同样的库路径,这样就稍微有点麻烦。直接用动态库编译最好。
测试:
就用我们第四节课使用的例子来测试我们刚编译好的VASP。
slurm提交脚本:
#!/bin/bash
#SBATCH -N 1
#SBATCH -n 20
#SBATCH -p pg2_64_pool
#SBATCH -J VASP
#SBATCH -t 12:00:00
module load mpi/intel/18.0.2
cd $SLURM_SUBMIT_DIR
srun -n 20/public1/home/pg2738/apps/vasp.5.4.4/bin/vasp_std > LOG
测试:
另外我们还要准备赝势库,这个我们在第四节课已经详细讲过了。
准备好INCAR,POTCAR,KPOINTS,POSCAR就可以运行了。
以后有机会我们再讲怎么编译
VTST,
SSNBO,
VASPsol,
OPTCELL,
Wannier90。
作者Author: sky 时间: 2018-10-16 14:35
可否告知一下浮点稳定参数?谢谢
作者Author: 乐平 时间: 2018-10-16 15:21
挺好的,谢谢。
但是编译步骤里有很明显格式错误,很多空格都漏掉了……
cd ~/apps
tar –zxvfvasp.5.4.4.tar.gz
gunzip patch.5.4.4.16052018.gz
cp patch.5.4.4.16052018 ./vasp.5.4.4
cd ./vasp.5.4.4
patch -p0 < patch.5.4.4.16052018
cp arch/makefile.include.linux_intel ./makefile.include
module ava #(查看intel mkl和mpi库,使用超算中心上最新版本的intel mkl和mpi库)
module load intel/18.0.2-fast
module load mpi/intel/18.0.2-fast
echo $MKLROOT #(查看intelmkl库)
make all
作者Author: sky 时间: 2018-10-16 15:30
要这么说的话还得先unload原来的编译器和库,否则会报错
作者Author: jiangning198511 时间: 2018-10-16 16:40
非常不错的教程,期待后续的安装教程
作者Author: abin 时间: 2018-10-16 20:26
放心。 这玩意没有什么指导意义。
因为,一般的机器上,没有人帮你把需要的东西配置为可用的模块。
没有做此配置,moduleava当然无法使用了。
其实最简单的,应该采用GNU那一套,基本上,yum install XXX
然后直接编译,不会报错的。
vasp wiki写的很清楚的。
作者Author: tcclab 时间: 2019-1-20 02:48
谁来说说如果编译VTST?
谢谢!
作者Author: JasonJ 时间: 2019-2-27 15:11
我也想知道,不知道会不会出视频
作者Author: infe2001 时间: 2019-9-5 20:43
老师,在您帖子中,让我们编译的时候把constr_cell_relax.F,vaspsol,ssnbo和VTST都加进去,但是在后面的步骤中没有看到,是不是这些都包含在patch.5.4.4.16052018中了?
作者Author: 啦啦黑还黑 时间: 2019-9-9 12:49
不是,patch.5.4.4.16052018是修正bug的。
作者Author: abdoman 时间: 2019-9-9 13:40
自己动手,丰衣足食!厉害
作者Author: infe2001 时间: 2019-9-16 20:36
谢谢!
作者Author: 六苯基苯 时间: 2020-3-12 17:52
啊,vtst那个到底怎么用起来啊
作者Author: 咸鱼游啊游 时间: 2020-9-28 19:44
各位老师,请问在中科院“元”超算平台上编译出现这样的错误,如何解决呢?
mkdir build/std ; \
cp src/makefile src/.objects makefile.include build/std ; \
make -C build/std VERSION=std all
mkdir: cannot create directory `build/std': File exists
make[1]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std'
rsync -ru ../../src/lib .
cp makefile.include lib
make -C lib -j1
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make libdmy.a
make[3]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make[3]: `libdmy.a' is up to date.
make[3]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/lib'
rsync -ru ../../src/parser .
cp makefile.include parser
make -C parser -j1
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make libparser.a
make[3]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make[3]: `libparser.a' is up to date.
make[3]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std/parser'
rsync -u ../../src/*.F ../../src/*.inc .
rm -f vasp ; make vasp ; cp vasp ../../bin/vasp_std
make[2]: Entering directory `/home/lihong9/app/vasp.5.4.4/build/std'
mpiifort -free -names lowercase -assume byterecl -w -O2 -I/soft/compiler/intel/composer_xe_2013_sp1.0.080/mkl/include/fftw -c mpi.f90
mpi.F(429): error #6404: This name does not have a type, and must have an explicit type. [MPI_COMM_TYPE_SHARED]
CALL MPI_Comm_split_type(COMM%MPI_COMM,MPI_COMM_TYPE_SHARED,0,MPI_INFO_NULL,COMM_intra%MPI_COMM,ierror)
---------------------------------------------^
mpi.F(570): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(526): error #6457: This derived type name has not been declared. [COMMUNIC]
TYPE(communic) COMM
-----------^
mpi.F(534): error #6404: This name does not have a type, and must have an explicit type. [MPI_SUCCESS]
IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(550): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(559): error #6404: This name does not have a type, and must have an explicit type. [MPI_COMM_WORLD]
call MPI_abort(MPI_comm_world , 1, ierror )
---------------------^
mpi.F(568): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(577): error #6404: This name does not have a type, and must have an explicit type. [MPI_COMM_WORLD]
call MPI_abort(MPI_comm_world , 1, ierror )
---------------------^
mpi.F(596): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(600): error #6457: This derived type name has not been declared. [COMMUNIC]
TYPE(communic) COMM
-----------^
mpi.F(606): error #6404: This name does not have a type, and must have an explicit type. [MPI_INTEGER]
call MPI_send( ivec(1), n, MPI_integer, node-1, 200, &
---------------------------------^
mpi.F(607): error #6404: This name does not have a type, and must have an explicit type. [COMM]
& COMM%MPI_COMM, ierror )
---------------------^
mpi.F(607): error #6460: This is not a field name that is defined in the encompassing structure. [MPI_COMM]
& COMM%MPI_COMM, ierror )
--------------------------^
mpi.F(608): error #6404: This name does not have a type, and must have an explicit type. [MPI_SUCCESS]
IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(604): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association [MPI_STATUS_SIZE]
INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(604): error #6404: This name does not have a type, and must have an explicit type. [MPI_STATUS_SIZE]
INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(622): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(626): error #6457: This derived type name has not been declared. [COMMUNIC]
TYPE(communic) COMM
-----------^
mpi.F(631): error #6404: This name does not have a type, and must have an explicit type. [MPI_INTEGER]
call MPI_recv( ivec(1), n, MPI_integer , node-1, 200, &
---------------------------------^
mpi.F(632): error #6404: This name does not have a type, and must have an explicit type. [COMM]
& COMM%MPI_COMM, status, ierror )
---------------------^
mpi.F(632): error #6460: This is not a field name that is defined in the encompassing structure. [MPI_COMM]
& COMM%MPI_COMM, status, ierror )
--------------------------^
mpi.F(633): error #6404: This name does not have a type, and must have an explicit type. [MPI_SUCCESS]
IF ( ierror /= MPI_success ) &
---------------------^
mpi.F(629): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association [MPI_STATUS_SIZE]
INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(629): error #6404: This name does not have a type, and must have an explicit type. [MPI_STATUS_SIZE]
INTEGER status(MPI_status_size), ierror
---------------------^
mpi.F(647): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MPIMY]
USE mpimy
----------^
mpi.F(651): error #6457: This derived type name has not been declared. [COMMUNIC]
TYPE(communic) COMM
-----------^
mpi.F(653): error #6683: A kind type parameter must be a compile-time constant. [Q]
COMPLEX(q) :: zvec(n)
--------------^
mpi.F(657): error #6404: This name does not have a type, and must have an explicit type. [MPI_DOUBLE_COMPLEX]
call MPI_send( zvec(1), n, MPI_double_complex, node-1, 200, &
---------------------------------^
mpi.F(658): error #6404: This name does not have a type, and must have an explicit type. [COMM]
& COMM%MPI_COMM, ierror )
---------------------^
mpi.F(658): error #6460: This is not a field name that is defined in the encompassing structure. [MPI_COMM]
& COMM%MPI_COMM, ierror )
--------------------------^
mpi.f90(1853): catastrophic error: Too many errors, exiting
compilation aborted for mpi.f90 (code 1)
make[2]: *** [mpi.o] Error 1
make[2]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std'
cp: cannot stat `vasp': No such file or directory
make[1]: *** [all] Error 1
make[1]: Leaving directory `/home/lihong9/app/vasp.5.4.4/build/std'
make: *** [std] Error 2
[lihong9@login7 vasp.5.4.4]$
作者Author: abin 时间: 2020-9-28 23:10
编译器设定问题。
作者Author: 李朋 时间: 2020-12-19 16:32
请问在KNL机器上如何编译vasp呢?
作者Author: XIEZHEN 时间: 2022-8-11 22:48
老师您好,我也遇到了这个问题,想请问您一下能不能详细说一下这个错要怎么改才对,我尝试很久了,一直搞不定,希望您看到的话及时回复
作者Author: XIEZHEN 时间: 2022-8-11 22:49
学长您好,我也遇到了同样的编译器问题,想请问您是怎么解决的,麻烦了,真的已经焦头烂额了
作者Author: abin 时间: 2022-8-12 08:04
支持Intel和AMD处理器。
下载就能用。
加密分享, 需解锁 https://pan.baidu.com/s/1r7PduYXqjn3kpS-ie0H8NQ?pwd=aknc
编译器设定,属于技能问题。
作者Author: zmy 时间: 2022-10-25 11:20
您好,请问您的问题解决了吗,我遇到了同样的问题
作者Author: mxh 时间: 2022-12-25 19:54
刘老师,您好。我在make all的时候遇到了这样的错误gfortran: error: language host not recognized,请老师赐教如何解决!
作者Author: 红烧肉盖饭 时间: 2023-9-21 11:59
您好。请问我在进行到module ava这一步时,没有出现intel开头的文件。具体如图。请问这是怎么回事呢?
欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |