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:
SolverSolver 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]) – TwoWavefunctionobjects 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\)-tensorSolver.
- __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]) – TwoWavefunctionobjects 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\)-tensorSolver. 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 bystates(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 callingsolve().
- 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 callingsolve().
- 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:
SolverParamsParameters 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.