编者加:请阅读前先查阅刘锦程博士以下教程
http://blog.wangruixing.cn/2019/04/22/adndp/
http://blog.wangruixing.cn/2019/04/22/nbo/
![2fe5f724fd30cb6f6e30a866e2e3b0d3.png](https://i-blog.csdnimg.cn/blog_migrate/613478f61650c6afcb7f81adb52d4b9e.jpeg)
https://github.com/Chengcheng-Xiao/Periodic_NBO/tree/master/projection_VASP/VASP_patch
按照正常的逻辑,下载VASP对应版本的补丁文件,放在VASP的安装包中,用类似于:
patch -p0 < proj_VASP_5.4.patch
执行该命令即可修改VASP源代码,在将下载的projection_output.F放在VASP安装包中src/文件夹下,重新make编译生成新的vasp_std二进制文件,即可增加VASP与SSAdNDP的输出接口文件wavefunction.dat文件。
那么对于VASP6.1.1,没有相应的补丁文件,或在执行patch -p0 < proj_VASP_5.4.patch失败,无法成功打补丁,怎么办呢?
不要慌,静下心来打开proj_VASP_5.4.patch看看,你会发现打补丁实际上只是对VASP下的src/.object和src/main.F两个文件做修改罢了。
![feae6a73a701963ec1e5cf87b226880f.png](https://i-blog.csdnimg.cn/blog_migrate/f43656883e40bbe04547e893c620e52c.jpeg)
仔细留意一下绿色圈出来的东西,也就是前面带“+”的字符串,就是你需要找到对应原文件的原字符串,然后加上SSAdNDP的字符串即可(有了方法实施起来就简单了)。
1、首先修改src/.object文件(注意object前面有个“.”代表隐藏文件,不要漏写)
vi src/.object打开这个文件,找到dmatrix.o字符,然后在其下方加入projection_output.o
![18d233b3a9c692c9b1d80a8289d5e25d.png](https://i-blog.csdnimg.cn/blog_migrate/c0a75c33e3d9286fa838f85ebc9bdf43.jpeg)
注意点:首先在src/.object文件应该能发现两处dmatrix.o,前面是关于编译CPU版本的部分,后边是GPU,如果不放心就在两处都加上;其次会发现其后方字符不是vasp5.4.patch中的elphon.o字符,而是phonon.o,不用管,可能是VASP6加的新文件;
2、再修改src/main.F文件
同样的原理,照着patch文件修改main.F文件。
第一处,用vi src/main.F打开并找到src/main.F中的关键字USE main_gpu,在其后方加入USE projection_output
![c42d54aea53bf300699ff751dc6c6e75.png](https://i-blog.csdnimg.cn/blog_migrate/ae33ab695927c5eecc53d8045fea0f3f.jpeg)
第二处找到INTEGER ::LDIMP,LMDIMP,LTRUNC=3,后面加入相应的关键字:
![e641d379d23fc42be608ec698fef6f92.png](https://i-blog.csdnimg.cn/blog_migrate/be57a191654d941fe0cb44fdde12709e.jpeg)
第三处找到
CALLREDIS_PW_OVER_BANDS(WDES, W)
ENDIF
ENDIFwrtwave
添加patch中的关键字:
![948e2a091aa9b8244dd926b8b9ba470f.png](https://i-blog.csdnimg.cn/blog_migrate/2b7dc517126caf235af69502a8d3a0fd.jpeg)
总结:
1. 可以看到很多需要添加的字符之后的关键字和vasp5.4.patch中的字符并不一致,这是很正常的,因为VASP6修改了源码,增加了些许功能。通常去搜索需要添加字符之前的关键字,然后把SSAdNDP需要的字符放在这些关键字之后就可以了;
2. 如何用vi编辑器搜索关键字,自行百度,不论用任何方式,确定其位置就行;
3. 不要把patch文件中需要添加字符前的“+”粘贴进去了。“!”需要复制过去,表示注释这一行;
4. 此修改没有intel编译器的版本限制,通常2013之后的版本都可以。原则上需要在未修改的基础上能够编成功,确保没有问题,再去修改代码增加SSAdNDP的功能;
5. 很多文件静下心来,打开看一看,对一对,就知道思路了。
更多软件编译方法和教程,请参考:
https://app.cailiaoren.com/view/series/detail?id=168&vid=1492&from=timeline
编者加:请阅读前先查阅刘锦程博士以下教程
http://blog.wangruixing.cn/2019/04/22/adndp/
http://blog.wangruixing.cn/2019/04/22/nbo/
![2fe5f724fd30cb6f6e30a866e2e3b0d3.png](https://i-blog.csdnimg.cn/blog_migrate/613478f61650c6afcb7f81adb52d4b9e.jpeg)
按照正常的逻辑,下载VASP对应版本的补丁文件,放在VASP的安装包中,用类似于:
patch -p0 < proj_VASP_5.4.patch
执行该命令即可修改VASP源代码,在将下载的projection_output.F放在VASP安装包中src/文件夹下,重新make编译生成新的vasp_std二进制文件,即可增加VASP与SSAdNDP的输出接口文件wavefunction.dat文件。
那么对于VASP6.1.1,没有相应的补丁文件,或在执行patch -p0 < proj_VASP_5.4.patch失败,无法成功打补丁,怎么办呢?
不要慌,静下心来打开proj_VASP_5.4.patch看看,你会发现打补丁实际上只是对VASP下的src/.object和src/main.F两个文件做修改罢了。
仔细留意一下绿色圈出来的东西,也就是前面带“+”的字符串,就是你需要找到对应原文件的原字符串,然后加上SSAdNDP的字符串即可(有了方法实施起来就简单了)。
1、首先修改src/.object文件(注意object前面有个“.”代表隐藏文件,不要漏写)
vi src/.object打开这个文件,找到dmatrix.o字符,然后在其下方加入projection_output.o
注意点:首先在src/.object文件应该能发现两处dmatrix.o,前面是关于编译CPU版本的部分,后边是GPU,如果不放心就在两处都加上;其次会发现其后方字符不是vasp5.4.patch中的elphon.o字符,而是phonon.o,不用管,可能是VASP6加的新文件;
2、再修改src/main.F文件
同样的原理,照着patch文件修改main.F文件。
第一处,用vi src/main.F打开并找到src/main.F中的关键字USE main_gpu,在其后方加入USE projection_output
![c42d54aea53bf300699ff751dc6c6e75.png](https://i-blog.csdnimg.cn/blog_migrate/ae33ab695927c5eecc53d8045fea0f3f.jpeg)
第二处找到INTEGER ::LDIMP,LMDIMP,LTRUNC=3,后面加入相应的关键字:
CALLREDIS_PW_OVER_BANDS(WDES, W) ENDIF ENDIFwrtwave
添加patch中的关键字:
总结:
1. 可以看到很多需要添加的字符之后的关键字和vasp5.4.patch中的字符并不一致,这是很正常的,因为VASP6修改了源码,增加了些许功能。通常去搜索需要添加字符之前的关键字,然后把SSAdNDP需要的字符放在这些关键字之后就可以了; 2. 如何用vi编辑器搜索关键字,自行百度,不论用任何方式,确定其位置就行; 3. 不要把patch文件中需要添加字符前的“+”粘贴进去了。“!”需要复制过去,表示注释这一行; 4. 此修改没有intel编译器的版本限制,通常2013之后的版本都可以。原则上需要在未修改的基础上能够编成功,确保没有问题,再去修改代码增加SSAdNDP的功能;5. 很多文件静下心来,打开看一看,对一对,就知道思路了。
更多软件编译方法和教程,请参考:
https://app.cailiaoren.com/view/series/detail?id=168&vid=1492&from=timeline