Critic2 分子标架转换与结构去重
两个非共线分子的格式转换、四个结构的reduce筛选,以及输入标签和真实能量的区别。
阅读本篇目录
下载输入、原生输出、80关键词表和配图,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd critic2-language-examples
bash results.sh
bash plot.sh
使用 critic2/1.4(内部1.4.155),GCC/GFortran13.3、OpenMP、LAPACK3.12.1/BLAS。新操作只用1线程,不需要GPU;数据复用以前的水晶体和NEP振动结果,没有新增DFT。
1. 先分清本例的两项操作#
makemolsnc把NEIGHCRYS风格的fort.21片段转成分子标架文件;trick reduce按体积、输入标签和粉末衍射相似度筛候选结构。它们都不计算新的电子能量。
本包fort.21是我们自建的格式测试数据,包含两个非共线水分子,不是实际运行DMACRYS生成的结果。原子位置只用于验证分组和标架选择。
cat inputs/molecular-frames/in.cri
cat data/own-fort.21
sbatch job.slurm molecular-frames
输入只有一行:
makemolsnc ../data/own-fort.21 molecular-frames.mols
Slurm脚本在独立work目录中运行。随包参考输出为:
MOLX 2
X LINE O1 H1 1
Y PLANE O1 H1 1 H2 1
X LINE O2 H3 1
Y PLANE O2 H3 1 H4 1
ENDS
X方向沿O–H,另一个不共线的H确定平面。安装版这个转换入口需要每个分子能找到三个非共线原子,不能直接用于只有两原子或严格线性的分子。
2. 为结构去重准备列表#
本例从既有14 Å立方水晶体构造四个几何控制。第二个与第一个相同,第三个几何相同但筛选标签不同,第四个把晶胞边长改为14.1 Å。
cat inputs/structure-dedup/structures.list
cat inputs/structure-dedup/in.cri
sbatch job.slurm structure-dedup
列表如下,第二列是人为赋予的筛选标签,单位按这个源码入口的kcal/mol约定。这些数值不是本次计算的DFT能量或焓。
../data/water-a.cif 0.0
../data/water-copy.cif 0.01
../data/water-high-energy.cif 1.0
../data/water-volume.cif 0.0
输入:
trick reduce structures.list
trick reduce属于该版本源码中的辅助入口,阈值固定在实现里,使用前保留版本;普通结构比较也可选结构比较教程中的公开入口。
3. 实际哪些结构被保留#
程序要求三个条件同时满足才去重:每分子体积差小于0.1 ų、标签转换后的差小于0.01 eV、粉末图差指标小于0.07。不能只看两个CIF文件名是否不同。
| 输入 | 实际决定 | 原因 |
|---|---|---|
| water-a | 保留 | 参考结构 |
| water-copy | 去重 | 相同几何,标签差0.01 kcal/mol≈0.00043364 eV |
| water-high-energy | 保留 | 标签差1 kcal/mol≈0.0433641 eV超过阈值 |
| water-volume | 保留 | 每分子体积差超过阈值 |
grep -E 'PRUNED|KEPT|Structures' reference-results/structure-dedup/out.cro
grep -E 'PRUNED|KEPT|Structures' work/structure-dedup/out.cro
最终输出 1/3/4,依次表示去重、写出/保留、总数。屏幕列表中的V和H为源码采用的内部体积与原输入标签显示;不要把它们直接当成ų和eV混算。

这只是控制例子,保留结构不等于热力学稳定;改变晶胞也不代表已做结构优化。真实候选筛选应使用一致方法计算的有效能量/焓,并确认源码的单位和分子计数定义。
4. 核对振动别名和数据类型#
cat inputs/vibration-alias/in.cri
sbatch job.slurm vibration-alias
crystal ../data/unit.vasp
vibration load ../data/qpoints.yaml
vibration print summary
单数 vibration与复数 vibrations进入同一功能,本次真实读到4个q点、每点6个频率。只有频率YAML时,输出仍明确写“Second-order force constants NOT available”;不能因为成功加载频率,就认为已经读入完整FC2。后续计算见振动文件与格式。