倒空间¶
LatticeGeom 明确保存倒空间几何,并在不存储任何 Hamiltonian 系数的前提下派生相位。
约定¶
原始倒格矢按行存放在 lat.reciprocal_vectors 中,并满足
basis @ reciprocal_vectors.T = 2 pi I。
有限模拟超胞的正、倒格矢分别为 lat.supercell_vectors 与
lat.supercell_reciprocal_vectors。接受 cell= 的方法只允许 "primitive"
或 "supercell",不会自行推断。
坐标变换¶
q = (0.2, 0.3)
k = lat.k_from_coordinates(q, cell="primitive")
restored = lat.reciprocal_coordinates(k, cell="primitive")
输入既可以是单个向量,也可以是批量向量。对嵌入高维空间的低维晶格,
reciprocal_coordinates(..., check_span=True) 会拒绝法向分量,而不是静默投影。
连续网格与有限动量¶
integration_mesh = lat.sample_kmesh(
(80, 80),
cell="primitive",
centered=True,
)
finite_modes = lat.allowed_momenta(centered=True)
sample_kmesh 采样一个倒空间平行多面体,返回展平后的笛卡尔波矢数组,用于连续
积分。allowed_momenta 返回有限周期轴允许的离散原始坐标模式;开放轴只贡献零。
周期像相位¶
默认 sign=-1 时,相位约定为
exp(-i k . T[super_idx])。
phase_by_image = lat.translation_phases(k)
phase_by_bond = phase_by_image[..., lat.bonds.super_idx]
返回数组最后一维对应 lat.supercell_translations,因此可以无 Python 循环处理批量
波矢。
原胞 bond 相位需要显式选择 gauge:
periodic_gauge = lat.unit_bond_phases(k, gauge="cell")
position_gauge = lat.unit_bond_phases(k, gauge="position")
cell 只使用整数 Bravais 平移;position 使用包含子晶格偏移的完整端点向量。
第一 Brillouin 区¶
bz = lat.brillouin_zone(cell="primitive")
inside = bz.contains(integration_mesh)
points = bz.sample((100, 100))
vertices = bz.vertices
一维区域是区间。二维 Wigner--Seitz 区需要 bz 可选依赖,并可嵌入更高维笛卡尔
空间。当前 API 会明确拒绝三维第一 BZ 构造;任意支持维数下仍可使用倒格矢、坐标变换、
网格、允许动量和相位。
BrillouinZone 每次按请求构造,不缓存在 Lattice 上。