Calorine专题

Calorine弹性常数与声子

平衡Si夹持/松弛离子弹性、54原子有限位移力常数和实际色散。

更新于 2026-10-28约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载本专题结构、势文件、真实参考数据和全部Python脚本。以下命令在解压目录执行;CPU计算使用已分配的CPU资源,GPU通过Slurm分配。原始结果放在 reference/,复跑结果写入当前目录。

1 先准备平衡结构#

弹性和声子使用包内先做零外压晶胞优化的Si结构;平衡Si8体积162.353548 ų,最大残余应力约3.52E-10 eV/ų。将预应力结构直接作为平衡结构,会改变弹性解释。

python cpu_workflows.py
ls equilibrium.xyz elastic.npz phonopy.yaml
python plot.py

2 夹持离子与松弛离子弹性#

from ase.io import read
from calorine.calculators import CPUNEP
from calorine.tools import get_elastic_stiffness_tensor
atoms = read('equilibrium.xyz')
atoms.calc = CPUNEP('si-nep.txt')
C_fixed = get_elastic_stiffness_tensor(atoms, clamped=True,
                                       epsilon=1e-3)
C_relax = get_elastic_stiffness_tensor(atoms, clamped=False,
                                       epsilon=1e-3)
print(C_fixed)
print(C_relax)

返回值已经是GPa,不能再除一次ASE的GPa。clamped=True指应变后内部原子保持分数坐标;False允许每个变形结构的内部坐标松弛,晶胞仍由该次应变确定。

分量 夹持离子/GPa 松弛离子/GPa
C11 139.5201 139.5199
C12 68.6782 68.6782
C44 89.3229 60.7808

剪切响应的差别来自内部原子弛豫。本例应变幅度1E-3;研究精度需至少比较几组幅度和更严格的内部松弛。

平衡Si的夹持与松弛离子弹性张量

3 用Calorine生成Phonopy力常数#

import numpy as np
from ase.build import bulk
from calorine.calculators import CPUNEP
from calorine.tools import get_force_constants
atoms = bulk('Si', 'diamond', a=162.35354772209914**(1/3))
ph = get_force_constants(
    atoms, CPUNEP('si-nep.txt'), np.diag([3,3,3]),
    kwargs_generate_displacements={'distance':0.01})
ph.symmetrize_force_constants()
ph.save('phonopy.yaml', settings={'force_constants':True})
result = ph.run_qpoints([[0,0,0],[0.5,0,0.5]])
print(ph.qpoints.frequencies)

3×3×3原胞超胞共54个Si,晶体对称性将本例独立位移压缩到1个。实际Γ点光学频率14.326164 THz;声学零模约2E-7 THz数量级。图中沿Γ–X–L–Γ读取真实力常数,未用手画曲线替代计算。

Si54超胞实际有限位移声子色散

4 替换结构时检查什么#

确认原胞、超胞矩阵、周期边界与模型一致;低对称结构通常需要更多位移。实质负频应检查结构是否稳定、超胞尺寸及位移幅度,不能统一删除或取绝对值。NEP声子反映模型能量面的二阶导数,必须评估模型在目标结构与形变附近的可靠性。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗