pymatgen方向模量与声速
用完整柔度求方向杨氏模量,区分纵向刚度,并从Christoffel矩阵计算连续介质声速。
阅读本篇目录
多晶Hill杨氏模量只有一个平均值,单晶沿不同方向拉伸时通常不同。本篇使用弹性张量教程中的实际硅数据,继续提取方向杨氏模量、方向泊松比和声速。
1. 准备已完成的张量分析#
下载同一份弹性数据与绘图包,进入 pymatgen-elastic,在分配的CPU作业内运行:
bash run.sh
软件与原始应力数据沿用前篇。若已有 results/,可以直接读取方向表:
cat results/directions.csv
其中 Young_GPa 是自由横向收缩条件下的方向杨氏模量,longitudinal_stiffness_GPa 是Cₙₙₙₙ,三个 acoustic 列为该传播方向按速度排序的连续介质分支。
2. 不要把方向刚度当作杨氏模量#
在本环境中,directional_elastic_mod(n) 计算Cₙₙₙₙ。方向杨氏模量为E(n)=1/Sₙₙₙₙ,要用柔度张量S。两者的横向边界条件不同,不能只凭函数名字替换。
import numpy as np
from pymatgen.analysis.elasticity.elastic import ElasticTensor
fields = np.load("results/full-fields.npz")
elastic = ElasticTensor.from_voigt(fields["relaxed_C_GPa"])
n = np.array([1., 0., 0.])
E = 1 / elastic.compliance_tensor.einsum_sequence([n] * 4)
M = elastic.directional_elastic_mod(n)
print("Young / GPa:", E, "longitudinal stiffness / GPa:", M)
print("Poisson [100]/[010]:", elastic.directional_poisson_ratio(n, [0, 1, 0]))
弛豫离子Si的E[100]约122.47 GPa,而C₁₁约153.15 GPa,数值确实不同;E[110]约155.92 GPa。方向泊松比需要同时给拉伸方向n和与其正交的横向m,不是只输入一个方向。
3. 看各向异性和连续介质声速#

左图为xy面内方向杨氏模量。右图使用该方向Christoffel矩阵的三个本征值λ,按 v=sqrt(λ×10⁹/ρ) 得到声速;ρ来自同一实际结构的质量和体积。方向分支按速度排序,交叉或简并处不代表已经追踪同一极化。
trans_v(structure) 与 long_v(structure) 则使用Hill平均模量,给多晶各向同性近似。本例弛豫离子结果约为 5201 m/s、8662 m/s,弹性Debye温度约 626.4 K。这些不等于某条指定方向的全部分支,也不能替代声子色散或热导计算。
4. 重画与使用自己的数据#
/public/toolkit/miniconda3/envs/pymatgen-2026.9.24/bin/python -B analyze.py
图在 plots/,角度扫描数据在 results/young-polar.csv。原始参考图另放 reference-plots/,便于对照。
当你旋转张量坐标时,传播方向、应变和应力也要一致旋转,不能只换矩阵某几行。脚本给出了整体旋转下的方向量核对;零外压的正定性只说明均匀小应变稳定,不能据此排除声子不稳定或相分解。二维材料还需考虑真空高度和N/m单位,不能直接套三维声速/弹性Debye模型。官方模块说明可用于查阅接口;实际物理定义请结合本版本和边界条件判断。