Critic2 周期密度与傅里叶网格
检查真实NaCl电子总数,比较插值、FFT导数和守恒重采样。
阅读本篇目录
下载本篇配套操作包,解压后进入包目录。包中有23个Critic2短例子、输入、原始结果与7张高清图。它复用Critic2第一次计算中的真实水二聚体波函数和集群已有NaCl密度,不重新进行DFT。
1. 先检查已有密度#
bash run.sh 8
grep -n 'SUM\|INTEGRAL\|MIN\|MAX\|MEAN\|COUNT' work/grid-statistics/out.cro
crystal ../../data/NaCl.cube
load ../../data/NaCl.cube
reference 1
sum 1
min 1
max 1
mean 1
count 1 0.01
count 1 0.1
NaCl密度来自集群已有VASP实算:PBE、550eV、EDIFF=1E−6、Γ中心7×7×7 k网格、64³ FFT。原胞含Cl与Na各一个,使用价电子密度;期望电子数为Cl7+Na1=8。这里的标量CUBE已经转换成e/bohr³,不是原始CHGCAR的体积缩放数值。
| 结果 | 实际值 |
|---|---|
| 密度积分 | 7.9999998231 e |
| 网格最小值 | −0.001445427383 e/bohr³ |
| 网格最大值 | 0.2590240048 e/bohr³ |
| 网格平均值 | 0.02560523699 e/bohr³ |
| ρ>0.01的网格点数 | 95660 |
| ρ>0.1的网格点数 | 19828 |
sum输出元素和与物理积分,两者不同;积分需要乘网格体积元。有限平面波网格的少量负值按实际结果保留,本例没有裁零或强制归一化。
2. 插值方式会改变任意点的取值#
bash run.sh 9
grep -n 'Field value' work/grid-settings/out.cro
crystal ../../data/NaCl.cube
load ../../data/NaCl.cube
reference 1
setfield 1 nearest
point 0.123 0.234 0.345
setfield 1 trilinear
point 0.123 0.234 0.345
setfield 1 trispline
point 0.123 0.234 0.345
setfield 1 tricubic
point 0.123 0.234 0.345
list
晶体输入中这个点采用分数坐标。最近点、三线性、三次样条、tricubic分别得到0.002542190774、0.002576243111、0.002572918295、0.002573028926 e/bohr³。它们是同一有限网格的不同重建方式,不是四次不同DFT。
3. 周期FFT导数#
bash run.sh 10
ls work/grid-fft
crystal ../../data/NaCl.cube
load ../../data/NaCl.cube
reference 1
load as fft lap 1
load as fft gx 1
load as fft gy 1
load as fft gz 1
reference 2
precisecube
cube grid file fft-lap.cube
reference 3
cube grid file fft-gx.cube
reference 4
cube grid file fft-gy.cube
reference 5
cube grid file fft-gz.cube
FFT操作要求网格覆盖完整周期晶胞。程序按照真实三斜晶胞的倒易矢量求导,不可直接假设三个网格方向就是直角坐标x、y、z。本例的四张导数网格均保持64³,周期导数的全胞积分接近0。
4. 需要缩减网格时#
本包采用配套周期傅里叶工具保留原始零频分量,再由Critic2读取。运行一个独立转换:
bash grid.sh 32
cat new-grid.json
head -n 8 new-grid.cube
默认读取 data/NaCl.cube,生成新的 new-grid.cube,已有输出时要求换新文件名。换成自己的完整周期CUBE时:
bash grid.sh 32 my-density.cube my-density-32.cube
该工具使用SciPy周期傅里叶重采样,处理偶数网格的Nyquist分量,不裁零、不根据目标电荷重新缩放。64³和32³的实际积分都是7.9999998231 e。包内编号11读取已生成的32³文件:
bash run.sh 11
grep -n 'INTEGRAL' work/grid-resample/out.cro
crystal ../../data/NaCl.cube
load ../../data/NaCl-resampled.cube
reference 1
precisecube
cube grid file resampled.cube
sum 1

原始64³和傅里叶32³的实际z=0密度切片,保持电子总数但细节分辨率不同。
本版本原生 LOAD AS RESAMPLE 不作为本例的密度缩减入口。换用任何重采样方法后,都要检查体积、单位、电子总数和所需物性;积分守恒本身不保证Bader电荷或核附近细节已经收敛。原子盆积分参考网格与积分检查。
提取数据与重新画图#
只想看配套结果,先在新解压目录执行:
bash analyze.sh
ls analysis-reference
ls figures-reference
该命令从 reference/work/ 提取数据,并生成全部7张图。若要重做后处理,在另一份新解压目录执行:
bash list.sh
bash run-all.sh
ls work analysis figures
顺序是准备真实密度 → 生成周期傅里叶网格 → 运行23个Critic2输入 → 提取表格 → 画图。结果写入 runtime-data/、work/、analysis/、figures/;已有结果目录时使用新解压目录,避免混用。只运行单个编号后,不要对不完整的 work/ 调用整包分析。
重算应使用账户分配的CPU资源。包内 run.slurm 按CPU分区整节点56核规则准备,可用 sbatch run.slurm 提交;教学流程实际单线程,申请56核不表示做过并行性能测试。CPU资源暂不可分配时,先使用已有结果提取与画图。
本例程序是 critic2/1.4,固定提交内部版本1.4.155;GCC/GFortran13.3、双精度/OpenMP,LAPACK3.12.1、Readline8.2、NLopt2.10.0、Libxc7.0.0及Libcint标签6.1.2。辅助脚本使用集群已有ASE3.29.0、NumPy、SciPy和Matplotlib环境,脚本已选定解释器。没有GUI、tblite或libxtb接口要求。
返回Critic2专题。写法依据:固定版本源码、官方命令参考、图形与采样手册、结构工具手册。在线手册面向发展版本,实际输入采用本集群固定版本已运行的写法。