博文

构建NEP与LAMMPS的接口,并且使用NEP势结合phonolammps画声子谱

 首先,我们根据https://github.com/brucefan1983/NEP_CPU这个教程安装好NEP_CPU,同时编译的时候需要make no-all ,然后再make yes.....soon 上面那一步比较简单,后面的安装才是折磨的开始,因为一开始使用nep势跑lammps优化挺成功,结果到了phonolammps扩胞就无法识别nep势了,我猜测是phonolammps接口接到dp的lmp去了,然后我重新安装了python,创建一个新的和完整lammps的接口,注意这里python安装3.6的,因为太新的集群的openssl版本太老用不了。用pip3安装phonolammps后,后面应该没啥大问题了,在八号节点上使用phonolammps会报错找不到libcuda.so.1,连接到七号节点就成功了

ETlab集群安装lammps历程

 首先,我们要安装cuda11.5,如何安装在上一个博文提到过。 然后我们根据这里的教程https://blog.csdn.net/weixin_43205202/article/details/88261607 同时注意,需要全程链接到GPU节点上安装! 同时自己安装好fftw,openmpi使用集群的mpi(关键) 编辑lammpsGPU模块,这一步很关键,修改CUDAhome,然后改成SM_86,安装好后用 ./nvc_get_devices测试是否成功。 然后后面就是make了,这个问题不大,很容易就能装好。

将deepmd的数据集转换成GPUMD的数据集并训练(包含GPUMD的安装)

图片
  首先安装GPUMD需要自己装一个CUDA,这里我安装了CUDA11.5,同时安装过程中需要注意只安装toolkit就可以了,其他的不需要安装,注意在options修改安装路径,之后再GPUMD/src目录下修改makefile(主要修改sm-86就行),修改完直接make就能安装好。 首先在github找到 deep2nep.py的脚本,将dp的数据集按照例子要求存放,然后 python nep2xyz.py deepmd 完成将会得到train.in,但是训练需要将它分成训练集和测试机,这里我们需要用到樊老师的split_train.cpp脚本,输入命令g++ -std=c++11 -O3 split_train.cpp,会得到a.out文件,然后输入命令./a.out test_size(test_size需要自己设置),最后还需要使用nep2xyz.py脚本,分别将训练集和测试集转换一下,就可以训练nep了!

NEMD设置热浴,将nvt修改成langevin需要注意的事项(热流都为正数的问题处理)

图片
  上图是NEMD计算使用NVT进行热浴的设置,需要注意的是在进行fix nve时,需要排除固定的部分和热源热汇部分,不然会导致热流都为正数 而使用langevin热浴时,需要将fix nve这一步将所有原子包括进去,即fix all,同时在设置langevin热浴计算时需要加上随机seed以及tally yes,详情在上图中可以了解

LAMMPS运行过程中发现结构跑散的问题

图片
 在使用EMD跑热导率的时候,dump文件的轨迹非常离谱,gif图如下: 跑完发现结构散架了,经过调查发现在NVT弛豫的时候结构就散架了,然后检查LOG文件发现: 设置的温度为300K但是这里温度却突然跳到了9000多开,这应该就是结构散架的可能原因, 在这里把热浴的参数修改一下,把1修改成0.1或0.005就可以了, 但是这里修改了之后确实发现log中温度能够较好的保持在300K左右 但是通过dump轨迹文件发现,结构还是散掉了,难道就是构造的势函数出问题了吗?? 我不禁陷入怀疑,寄了啊😭 但是我转念一想,可能是自己哪里设置错了,我想到了势函数的原子顺序是非常重要不能反顺序的,然后我想到自己data文件的原子顺序和构造势函数的时候原子顺序不一样,然后我修改了一下data文件,再跑了一遍发现好像成了😤

AIMD过程中设置温度为300,但是跑完第一步却发现T=0?

图片
  这个问题是由于POSCAR后面有很多000,这些是由于结构优化产生的,我们在跑AIMD的时候需要将这些删掉,删掉之后温度就能正常设置了

二维材料无法收敛的问题 NELMDL的设置

图片
 在计算二维材料单点能计算的时候发现120个电子步后仍无法手链,一番请教老师过后,发现可以尝试修改NELMDL这个参数 有关NELMDL参数的解释 一开始尝试NELMDL=-12和-18,并没帮助收敛(其中-18在108个电子步才收敛),这里说在vasp6以上版本使用ALGO=all和NELMDL=1会帮助很快收敛,然后我尝试修改这两个参数,发现确实可以帮助收敛,40个电子步就可以快速收敛了 (而且只花费了2600s,不到一小时) ,但是我仔细查阅ALGO=all这个参数发现 这个算法似乎对于绝缘体比较好用,但是不知道能否用于半导体,持着谨慎的态度又讲ALGO改回了Normal,发现也能够收敛,不过需要50步左右的电子步,所以我们还是选择这个参数会比较保险一点。