倒空间

English

LatticeGeom 明确保存倒空间几何,并在不存储任何 Hamiltonian 系数的前提下派生相位。

约定

原始倒格矢按行存放在 lat.reciprocal_vectors 中,并满足

basis @ reciprocal_vectors.T = 2 pi I。

有限模拟超胞的正、倒格矢分别为 lat.supercell_vectorslat.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 上。