ASE结构维度识别:从0D到3D
用真实Cu、石墨烯、碳链和水分子输入运行原生RDA,读取评分区间、连通分量与周期边界。
阅读本篇目录
判断结构是分子、链、层还是三维网络,不能只数POSCAR里有几个晶格矢量。本篇用ASE3.29.0原生RDA工具,实际处理Cu体相、石墨烯、碳链和水分子,展示如何读结构、运行、提取区间与连通分量。
这些是明确给定的几何模型,不是新DFT或实验维度测量。三种周期模型都输入三维周期边界;石墨烯与碳链的低维特征来自键网络在大真空中的连通,而不是简单把PBC标志设成2维或1维。
1. 下载,先运行现成参考#
下载结构维度与晶胞优化完整实操包,新目录解压:
python3 -m zipfile -e ase-dimensionality-cell-pressure-wave309-*.zip .
cd ase-dimensionality-cell-pressure-wave309
bash preview.sh
bash run.sh
两条脚本只读取已有完整数据并画三张图,不重新进行晶胞优化。数据在results/,图在plots/;再次运行请使用新解压目录。

图按原子实际范围显示,以看清连通;完整晶胞和坐标保留在输入中。碳链仅为展示重复三个原胞,原始输入仍为两个C。
2. 四个模型怎样建立#
from ase import Atoms
from ase.build import bulk, graphene, molecule
cu = bulk('Cu', 'fcc', a=3.6, cubic=True) * (2, 2, 2)
sheet = graphene(a=2.46, size=(2, 2, 1), vacuum=10)
sheet.pbc = True
chain = Atoms('C2',
positions=[[10, 10, 0], [10, 10, 1.3]],
cell=[20, 20, 2.6], pbc=True)
water = molecule('H2O')
water.center(vacuum=10)
water.pbc = False
Cu有32个原子,石墨烯8个,碳链2个,水3个。水是孤立有限分子,使用非周期边界;不要仅因为文件里有一个真空盒,就把它当成周期水晶体。
3. 对自己的结构直接调用RDA#
module purge
module load ase/3.29.0
新建dimension.py:
from ase.io import read
from ase.geometry.dimensionality import analyze_dimensionality
atoms = read('native-reference/graphene/structure.extxyz')
intervals = analyze_dimensionality(atoms, method='RDA')
for item in intervals:
print(item.dimtype, item.score, item.a, item.b, item.h)
print('Highest score:', intervals[0].dimtype)
print('Component IDs:', intervals[0].components)
python dimension.py
换成自己的结构时修改read()中的路径,并先核对晶胞与PBC。输入文件若漏掉正确晶胞,近邻镜像与维度也可能改变。
4. 区间和评分是什么意思#
RDA用原子间距相对于共价半径之和的比例考察键连接,随着比例范围改变分析连通网络。a和b是对应比例区间;h给出0D、1D、2D、3D分量的数量;components为每个原子的连通分量编号。
评分不是材料属于某种维度的概率,也不是稳定性或导电率。 相同维度的区间合并后,总评分归一;混合结构也可能出现01D、1D+3D等类型。方法与接口见ASE维度分析教程。
5. 本次实际结果#
| 输入 | 原子数 | 最高评分类型 | 原生评分 |
|---|---|---|---|
| bulk-Cu | 32 | 3D | 1.000000000 |
| graphene | 8 | 2D | 0.999847805 |
| C-chain | 2 | 1D | 0.999847805 |
| water | 3 | 0D | 1.000000000 |

全部区间、完整每原子连通分量和维度字典保存在DIMENSIONS.json。无上界区间在JSON中写成upper: null并标记upper_unbounded: true,表示无限上界,不表示缺测。
cat results/DIMENSIONS.json
python read_native_tools.py native-reference --output my-read
ls my-read
当前版本在某些带大真空间隔的周期分子输入上,近邻扩展可能不能形成所需终止区间;孤立分子应按真实有限边界使用pbc=False。不要为了获得一个想要的分类而随意改变材料本身的周期性。
6. 晶胞优化是另一个问题#
维度识别只分析已有几何,不替你找到平衡晶格。需要同时调整原子与晶胞、添加外压、检查力和应力时,继续看ASE晶胞与原子联合优化。资料包也提供sbatch run.slurm从头运行四个维度模型和两个小铜晶胞,ASE/EMT使用CPU路径,不提供GPU加速结论。