Atomsk结构分析与芯壳偶极
从RDF、质量密度和局部应变到芯壳偶极,使用实际小模型解释输出。
阅读本篇目录
下载本组输入、脚本、参考输出与高清图。解压后使用新的工作目录;examples保存各例输入,reference保存实际结果。
1 先准备模型,再选操作#
Atomsk 0.13.1用于生成、变换和分析原子结构,不执行电子结构或能量优化。当前构建使用GFortran 13.3、OpenMP、LAPACK/BLAS 3.12.1;这里的小模型使用单线程,配套检查/绘图使用已有ASE和NumPy环境。Atomsk本身运行在CPU上。
module purge
module load atomsk/0.13.1 gpumdkit/1.5.8
atomsk --create fcc 4.05 Al -duplicate 2 2 2 base.cfg
得到32原子FCC Al,晶胞三边均为8.1 Å、体积531.441 ų。这里的晶格常数用于教学;换成自己的材料时,应使用与势函数或泛函一致的晶格参数。
直接运行单个下载实例:
python run.py option_shift
输出在work/option_shift。脚本拒绝覆盖已有目录;再次计算请复制一份新的资料包。批量运行所有示例:
sbatch run.sbatch all
这个批处理使用现有P100队列中的CPU资源,并不表示Atomsk有GPU加速。提交前可按自己获配分区调整SBATCH头部。不要把建模输出当成已经弛豫的结构。
2 RDF和质量密度#
atomsk --rdf base.cfg 4 0.1 -wrap
atomsk --density base.cfg mass 1d x 0.6 -wrap
atomsk --density base.cfg mass 2d z 0.6 -wrap
-wrap明确使用周期胞内坐标,也避免批处理等待交互回答。FCC Al最近邻距离a/√2=2.863782 Å,RDF的对应峰位落在0.1 Å分箱附近。4 Å半径用于这个8.1 Å小胞的教学;液体/复杂体系要扩大模型并检查统计收敛。
一维密度使用σ=0.6 Å高斯展宽,输出base_mass_density.dat。对周期网格求和积分,得到863.4092352 u,等于32×Atomsk内置Al质量26.9815386 u。二维命令输出另一份密度文件,应在独立目录运行,避免覆盖。
3 局部对称性、形变与Nye张量#
atomsk --local-symmetry base.cfg symmetry.cfg -wrap
atomsk base.cfg -deform x 0.01 strained.cfg
atomsk --nye base.cfg strained.cfg result.cfg -wrap
实际完美FCC的归一化局部中心对称指标为0;它不是OVITO常见的有长度平方单位的原始CSP。
Nye流程产生G、strain、rot及Nye张量文件。下载实例用相同顺序的32个原子,均匀x拉伸1%:G11=0.99009901,strain11=0.00990099,全部Nye分量为0。这里应变采用对称化的I−G定义,不是直接把0.01填进所有“应变”输出;均匀形变没有位错密度梯度。

4 名义电荷的局部偶极#
模型为64离子的NaCl,常规胞参数5.64 Å,2×2×2扩胞。准备charges.txt:
charge
Na 1
Cl -1
atomsk --edm nacl.cfg Cl 6 -properties charges.txt -wrap
每个Na寻找6个Cl近邻,输出局部偶极、范数及全胞电极化。这里使用名义点电荷;不能代替VASP的Berry相极化或Born有效电荷。周期晶胞的全胞点电荷极化还依赖极化分支和坐标包裹方式。
5 芯壳模型#
helpers之外的examples/mode_epola含shells.gin和shellcharges.txt。Cl核电荷+1、壳−2,Na刚性离子+1;Cl壳人为沿+x移动0.01 Å:
charge
Na 1
Cl 1 -2
atomsk --electronic-polarization shells.gin -properties shellcharges.txt
按本功能定义,Cl的x分量为−0.015 e·Å,Na为0。它是给定芯壳位移的偶极,不是自洽求出的电子响应;输入中没有壳弹簧势或能量最小化。

6 提取数据与画图#
python plots.py
图由CFG附加列和原始密度/RDF文件绘制。读取CFG时可用ASE查看列名:
from ase.io import read
a = read('result_G.cfg')
print(a.arrays.keys())
print(a.arrays['G_11'])