qtcad.atoms.g_tensor module

Tight-binding \(g\)-tensor calculator within perturbation theory.

class Solver(atoms: Atoms, states: Tuple[Wavefunction, Wavefunction], solver_params: SolverParams = None)

Bases: Solver

Solver for the effective \(g\)-tensor for a two-level subspace of an atomistic tight-binding system.

This class is used to evaluate the \(4 \times 3\) \(g\)-tensor that parameterizes the effective Zeeman Hamiltonian

\[H_Z^{\mathrm{eff}} = \mu_B \, \mathbf{s} \cdot \mathbf{g} \cdot \mathbf{B},\]

obtained by projecting the magnetic-field-dependent terms of the tight-binding Hamiltonian onto a subspace spanned by two selected states. Here the vector \(\mathbf{s} = (\sigma_0, \sigma_1, \sigma_2, \sigma_3)/2\) is the pseudospin operator defined in this two-dimensional subspace, where \(\sigma_0\) is the identity matrix and \(\sigma_i\), \(i \in \{1, 2, 3\}\), are the Pauli matrices. These two (selected) states define an effective spin-\(\tfrac{1}{2}\) (pseudospin) degree of freedom.

The implementation assumes a finite atomistic structure. Periodic boundary conditions are not supported.

Attributes:
  • atoms (Atoms) – Atomic structure defining the tight-binding system over which the \(g\)-tensor is computed. The structure must be finite (no periodic boundary conditions).

  • states (tuple[Wavefunction, Wavefunction]) – Two Wavefunction objects defining the pseudospin subspace \(\{\left|0\right>, \left|1\right>\}\). These states should be orthonormal and energetically isolated from the rest of the spectrum so that a two-level description is valid. If degenerate, any orthonormal linear combination may be used. The particular choice should be guided by the physical system and the experimental configuration being modeled, since it determines the orientation of the effective pseudospin axes and the representation of the \(g\)-tensor.

  • tb_orbs (str) – Atomic orbital basis set used in the tight-binding model, which may either be “sp3” for an \(sp^3\) basis, “sp3s*” for an \(sp^3s^{\star}\) basis, or “sp3d5s*” for an \(sp^3d^5s^{\star}\) basis.

  • g (numpy.ndarray) – The computed \(4 \times 3\) effective \(g\)-tensor. This tensor maps the external magnetic field to an effective field in pseudospin space. Its entries determine effective Zeeman splittings.

  • solver_params (SolverParams) – Parameters of the \(g\)-tensor Solver.

__init__(atoms: Atoms, states: Tuple[Wavefunction, Wavefunction], solver_params: SolverParams = None) None

Initialize the \(g\)-tensor solver for a specified two-state subspace.

Parameters:
  • atoms (Atoms) – Atomic structure defining the tight-binding system over which the \(g\)-tensor is computed. The structure must be finite (no periodic boundary conditions).

  • states (tuple[Wavefunction, Wavefunction]) – Two Wavefunction objects defining the pseudospin subspace \(\{\left|0\right>, \left|1\right>\}\). These states should be orthonormal and energetically isolated from the rest of the spectrum so that a two-level description is valid. If degenerate, any orthonormal linear combination may be used. The particular choice should be guided by the physical system and the experimental configuration being modeled, since it determines the orientation of the effective pseudospin axes and the representation of the \(g\)-tensor.

  • solver_params (SolverParams) – Parameters of the \(g\)-tensor Solver. If None, parameters are set to reasonable defaults. Default: None.

diagonalize_effective_Zeeman(B: ndarray | Tuple[float, float, float]) Tuple[ndarray, ndarray]

Diagonalize the effective Zeeman Hamiltonian in the pseudospin subspace.

This method constructs and diagonalizes the effective \(2\times 2\) Zeeman Hamiltonian \(H_Z^{\mathrm{eff}} = \mu_B \mathbf{s} \cdot \mathbf{g}\cdot\mathbf{B}\), where \(\mu_B\) is the Bohr magneton, \(\mathbf{B}\) is the external magnetic field, \(\mathbf{g}\) is the previously computed effective \(g\)-tensor, and \(\mathbf{s}\) is the pseudospin operator acting in the two-level subspace spanned by the states \(\{\left|0\right>, \left|1\right>\}\).

Parameters:

B (tuple or numpy.ndarray) – Cartesian components (\(B_x\), \(B_y\), \(B_z\)) of a constant external magnetic field.

Returns:

Two-element tuple containing

  • Numpy.ndarray - \(2\)-element vector containing the eigenenergies of \(H_Z^{\mathrm{eff}}\).

  • Numpy.ndarray - \(2\times 2\) matrix whose columns are the corresponding normalized eigenvectors expressed in the basis defined by states (i.e., the \(\{\left|0\right>, \left|1\right>\}\) basis).

Note

If the \(g\)-tensor has not yet been computed and stored in self.g, it is automatically computed by calling solve().

get_Zeeman_splitting(B: ndarray | Tuple[float, float, float]) float

Compute the Zeeman splitting for a given magnetic field using the effective \(g\)-tensor.

The energy splitting is obtained by diagonalizing the \(2\times 2\) effective Zeeman Hamiltonian in the pseudospin subspace spanned by the two selected states: \(H_Z^{\mathrm{eff}} = \mu_B \mathbf{s} \cdot \mathbf{g}\cdot\mathbf{B}\), where \(\mu_B\) is the Bohr magneton, \(\mathbf{B}\) is the external magnetic field, \(\mathbf{g}\) is the previously computed effective \(g\)-tensor, and \(\mathbf{s}\) is the pseudospin operator acting in the two-level subspace spanned by the states \(\{\left|0\right>, \left|1\right>\}\). The splitting corresponds to the difference between the two eigenvalues of \(H_Z^{\mathrm{eff}}\).

Parameters:

B (tuple or numpy.ndarray) – Cartesian components (\(B_x\), \(B_y\), \(B_z\)) of a constant external magnetic field.

Returns:

float – Energy splitting between the two eigenvalues of \(H_Z^{\mathrm{eff}}\).

Note

If the \(g\)-tensor has not yet been computed and stored in self.g, it is automatically computed by calling solve().

solve() ndarray

Compute the \(g\)-tensor for the selected pair of states.

Returns:

numpy.ndarray\(4 \times 3\) matrix containing the effective \(g\)-tensor \(\mathbf{g}\). This tensor maps the external magnetic field to an effective field in pseudospin space. Its entries determine the Zeeman splitting, while its direction determines the pseudospin quantization axis.

class SolverParams(inp_dict=None)

Bases: SolverParams

Parameters to pass to a \(g\)-tensor Solver.

Attributes:
  • zeeman (bool) – If True, include the on-site Zeeman interaction of the magnetic field with the electron magnetic moments. This corresponds to the Hamiltonian term \(H_Z = -\mathbf{\mu} \cdot \mathbf{B}\), where \(\mathbf{\mu}\) is the magnetic moment operator and \(\mathbf{B}\) is the magnetic field. This term captures both spin and orbital magnetic contributions. Default is True.

  • peierls (bool) – If True, include orbital magnetic effects through the Peierls substitution in the hopping terms of the tight-binding Hamiltonian. Conceptually, this corresponds to replacing the canonical momentum \(\mathbf{p}\) by the generalized momentum \(\mathbf{p} + e \mathbf{A}\). In the tight-binding Hamiltonian, this is implemented by adding magnetic-field-dependent phase factors to the hopping terms. Physically, these phases capture the orbital coupling to the external magnetic field and can contribute to the \(g\)-tensor. Default: True.

__init__(inp_dict=None) None

Initialize \(g\)-tensor Solver solver parameters.

Parameters:

inp_dict (dict, optional) – Dictionary specifying certain solver parameters to be used instead of their default values.