PAOFLOW.pyskeaf.slice_ops#
Construction of 2D energy slices perpendicular to the magnetic-field axis.
Reproduces the per-slice grid construction at the top of sliceext
(skeaf_v1p3p0_r149.F90 lines 3853–3886) and the slice-frame setup at
lines 1249–1264 of the main program.
Geometry#
The slicing frame has axes (x’, y’, z’) with z’ = magnetic-field
direction. In terms of (theta, phi) — both in radians, where phi is
the polar angle from +z and theta the azimuth in the xy-plane — the
H-vector in the BZ frame is
Ĥ = (cos θ sin φ, sin θ sin φ, cos φ).
The Fortran builds the rotation matrix from slicing → BZ frame using
p = sin θ, q = cos θ, s = sin φ, c = cos φ, u = 1 − cos φ
via the explicit form
| p²u + c −p q u q s |
R = | −p q u q²u + c p s |
| −q s −p s c |
so that (p1, p2, p3) = R · (X', Y', Z') with the columns being the
BZ-frame images of the slicing x’, y’, z’ axes.
Supercell sampling#
The orbit-detection supercell has
numx = numy = numslices = 4·(numint − 1) + 1
points along each side, with spacing
Δk = maxlreciplat / (numint − 1) (Å^-1)
where maxlreciplat = max(|b_1|, |b_2|, |b_3|). The slicing-frame
coordinates of grid index i ∈ [1, numx] are
X’_i = ((i − 1) / (numint − 1) − 1) · maxlreciplat
i.e. the supercell spans [−1, +3] · maxlreciplat in each slicing
direction (asymmetric: matches Fortran). The total supercell side length is
xlength = ylength = 4 · maxlreciplat.
After rotating each (X’, Y’, Z’) sample into the BZ frame, the result is
mapped to BXSF fractional grid indices and wrapped periodically with
mod (n − 1) (the same trick as floor(fintpoint/(n-1))*(n-1) in
sliceext).
Classes#
Geometric metadata for one slicing configuration (independent of slice index). |
|
Energies sampled on a 2D (numx × numy) slice perpendicular to H. |
Functions#
|
Return the 3×3 rotation matrix from slicing-frame to BZ-frame. |
|
Pre-compute the slice geometry for given (theta, phi) and |
|
Build the 2D energy slice at index |
Module Contents#
- class PAOFLOW.pyskeaf.slice_ops.SliceGeometry[source]#
Geometric metadata for one slicing configuration (independent of slice index).
- rotation: numpy.ndarray[source]#
- h_vector: numpy.ndarray[source]#
- plr_inverse: numpy.ndarray[source]#
- class PAOFLOW.pyskeaf.slice_ops.Slice2D[source]#
Energies sampled on a 2D (numx × numy) slice perpendicular to H.
- geometry: SliceGeometry[source]#
- energies: numpy.ndarray[source]#
- PAOFLOW.pyskeaf.slice_ops.rotation_matrix(theta, phi)[source]#
Return the 3×3 rotation matrix from slicing-frame to BZ-frame.
Reproduces the parameterisation at lines 1260–1264 of the Fortran source (
p, q, s, c, u) exactly; see module docstring for the formula.
- PAOFLOW.pyskeaf.slice_ops.make_slice_geometry(bxsf, numint, theta, phi)[source]#
Pre-compute the slice geometry for given (theta, phi) and
numint.Mirrors the bookkeeping at Fortran lines 669–688 plus 1249–1264.
- PAOFLOW.pyskeaf.slice_ops.build_slice(bxsf, geom, slice_index)[source]#
Build the 2D energy slice at index
slice_index(1-based, in [1, numx]).Each of the
numx · numysample points is independently rotated into the BZ frame and Lagrange-interpolated. Memory usage: O(numx²) scratch for fractional indices.