如何在超算集群下编译 vasp+vtst
前提
超算集群内vasp的编译一般是不把vtst编译进去,导致某些需要用到vtst辅助计算的小伙伴们发愁,因为vtst不能独立于vasp编译和使用。在参考了多篇原Po的博文后, 小编Grasui在此给大家整理出适用于超算集群的vasp+vtst编译。
首先在集群下登录,最好新建一个文件夹
mkdir vasp
把下载好的vasp和vtst压缩包上传到vasp文件夹下,下载地址如下:
VASP:https://www.vasp.at/
VTST: http://theory.cm.utexas.edu/vtsttools/scripts.html
为了让小伙伴绕过不必要的坑,小编Grasui已经把这两个压缩包准备好啦,中间也遇到不可言说的心酸(坑),快夸夸给我!嘿嘿!
网盘链接分享
提取码:7z4q
***如果小伙伴想尝试亲自下载,由于vasp的5.4.4版本有bug,需要打补丁,别忘了把 patch连同下载和上传;vasp的5.4.1版本则不需要。
Grasui编在这里用vasp.5.4.4为例为教大家编译,是不是迫不及待啦?!
1. 把上传的压缩包解压
tar –zxvf vasp.5.4.4.tar.gz
#用tar -zxvf命令解压
gun zip vtstcode-179.gz
#用gun zip命令解压
cp patch.5.4.4.16052018 ./vasp.5.4.4
#把补丁复制到vasp.5.4.4文件夹内
cd ./vasp.5.4.4
#进入vasp.5.4.4文件夹内
patch -p0 < patch.5.4.4.16052018
#打补丁
cp arch/makefile.include.linux_intel ./makefile.include
#接下来把vtstcode里的文件copy到src/里,copy最好先把chain.F备份
cp src/chain.F src/chain.F-org
cp ../vtstcode-179/* src/
2. 接下来要在一些文件修改和添加
(1)修改src/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)
! LATT_CUR%A,LATT_CUR%B,IO%IU6)
如何替换呢?如果小伙伴可以可视化编辑 main.F
,替换轻松多啦!当然不可视也可以做到替换,命令如下:
vim src/main.F
:/CALL CHAIN_FORCE
#vim下检索命令
a
#vim下可编辑模式,小伙伴就可以替换啦!替换结束后按下esc键退出编辑
:wq
#保存并退出
(2)修改编译配置src/.objects
,在chain.o
前,添加如下内容
bfgs.o dynmat.o instanton.o lbfgs.o sd.o cg.o dimer.o bbm.o \
fire.o lanczos.o neb.o qm.o opt.o \
小伙伴一定要在chain.o前面添加添加命令如下:
vim src/.objects
#由于.objects文件是隐藏的,想可视化编辑的小伙伴就要碰壁啦
:/chain.o
#vim下检索
a
#编辑模式,添加完成后按下esc键退出编辑
:wq
#保存并退出
3. 完成以上操作,基本完成了编译前的铺垫工作,接下来就可以编译啦!
module ava
#查看集群下的所有编译库,主要用到intel、mpi库
module load apps/vasp/intelmpi/5.4.1
#加载编译库
module load mpi/intelmpi/2017.4.239
#加载编译库,缺少任意一个库或者加载不对的库都会出现编译错误
make all
#小伙伴可以去冲杯咖啡,犒劳下自己(嘿嘿),等待大约20min
ls ./bin
#如果显示vasp_gam vasp_ncl vasp_std
,编译大功告成!
结束语
到此,小伙伴就可以提交脚本做计算模拟啦!
注意run.slurm(运行脚本)要修改下srun那一行,加载自己用户下的vasp_std,否则还是会用集群下vasp_std,谨记!
关于运行效率,暂时还未验证,后续会给出数据,嘿嘿!