|
|
本帖最后由 Graphite 于 2024-7-3 15:59 编辑
现版本LAMMPS用reaxff最省事方案是单核单线程(LAMMPS和kokkos自身机制问题,不多讨论),一个程序最小循环中,主要完成以下3种任务:
1、纯CPU的neighbor search,频率高了很耗时
2、GPU为主的受力计算、动力学走步
3、纯CPU的各类文件输出、reax/c/bonds、reax/c/species,一般耗时
由于单核单线程情况下CPU性能孱弱,性能调优的重点在于:
1、neighbor search频率稍慢,半径(其实是相对于control file里面的键级计算半径的延展搬家)稍短——这里我们简称neigh设置激进,反之为保守。激进在于”原子对周围环境感知降低”。
2、任务1和任务3的频率尽可能同步,比如N步一次neighbor search,2N步一次reax/c/species,10N步一次文件输出。
关于精度和反应性问题:
1、主要影响因素是时间积分步长,通俗的说步子太大了,容易瞬时不平衡、lose atom
2、neigh性能激进时,会有一定影响,如果neigh频率大于100步,可能造成”原子对周围环境感知不足“,抑制反应性,影响精度;但如果小于10步以下、或半径过长,也没什么必要。
我修改了下in文件,在autodl租的v100上跑了5 ps,用了三分半钟,大概47步/秒,2 ns/day,考虑到密度比较高,速度还是可以的。运行指令是lmp -in test_1.in -k on g 1 -sf kk -pk kokkos neigh half newton on,用的单核单进程单线程,GPU负载75%左右。
根本问题是时间积分步长到1.0 fs,太长了,迫使必须用非常保守的策略做neigh以避免lose atom。然而,即使1.0 fs勉勉强强能跑,得到的结果也会比较”破碎“、精度差——步子太大了。
修改了时间积分步长为0.5 fs——因为温度不高所以先设了0.5 fs(其实也不是很精细,有要求或温度高得下到0.25 fs以下)
修改了neigh半径到2.0,neigh频率到100——步长降下来、温度不高,neigh设置可以更加激进。
修改了各类输出频率到100,reax/c/species为100 5 500。
当然,这个只是性能调优,neigh相关的设置毕竟涉及到”原子对周围环境的感知“,和reaxff的反应性、模拟的结果有一定关系,并且和时间步长相互影响(时间步长稍短时,可以稍激进)所以还需要自己权衡。
neigh频率10-100步是一个不错的区间,太快了CPU调用太频繁。neigh半径方面,只要模拟不lose atom,稍微有点余量即可,neigh频率越快,半径可以越短。control file里面的bond半径一般默认值足够。
文件输出频率看需求权衡,主要是bonds.out、lammpstrj之类文本文件体积容易动辄几个G。
简而言之,上中下三策:
1、激进策略:温度不高/本身反应性不强/模拟已经大差不差开始堆时间,步长0.25-0.5,neigh频率50-100,半径1.5-2.0
2、温和策略:步长0.2-0.25,neigh频率20-50,半径2.0-2.5
3、保守策略:温度很高/反应性强/不平衡性强/初始结构不太好稍微跑会儿放松下,步长0.1,neigh频率10、半径>=3.0
如果保守策略也跑不了,那90%概率是初始结构不好、力场不适配、条件偏极端(>3000K、外力冲击),一般来说3000 K或10 km/s MSST冲击使含能材料爆炸,保守策略也是能正确跑的。
test_20240703.7z
(726.59 KB, 下载次数 Times of downloads: 95)
|
评分 Rate
-
查看全部评分 View all ratings
|