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#

SliceGeometry

Geometric metadata for one slicing configuration (independent of slice index).

Slice2D

Energies sampled on a 2D (numx × numy) slice perpendicular to H.

Functions#

rotation_matrix(theta, phi)

Return the 3×3 rotation matrix from slicing-frame to BZ-frame.

make_slice_geometry(bxsf, numint, theta, phi)

Pre-compute the slice geometry for given (theta, phi) and numint.

build_slice(bxsf, geom, slice_index)

Build the 2D energy slice at index slice_index (1-based, in [1, numx]).

Module Contents#

class PAOFLOW.pyskeaf.slice_ops.SliceGeometry[source]#

Geometric metadata for one slicing configuration (independent of slice index).

theta: float[source]#
phi: float[source]#
numint: int[source]#
numx: int[source]#
xkseparation: float[source]#
ykseparation: float[source]#
zkseparation: float[source]#
xlength: float[source]#
ylength: float[source]#
maxlreciplat: float[source]#
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]#
slice_index: int[source]#
z_prime: float[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 · numy sample points is independently rotated into the BZ frame and Lagrange-interpolated. Memory usage: O(numx²) scratch for fractional indices.