pythtb.TBModel.quantum_geometric_tensor#
- TBModel.quantum_geometric_tensor(k_pts, occ_idxs=None, plane=None, *, cartesian=False, non_abelian=False, param_periods=None, diff_scheme='central', diff_order=2, use_tensorflow=False, **params)[source]#
Quantum geometric tensor at a list of k-points via Kubo formula.
The quantum geometric tensor is computed from the derivatives of the Bloch Hamiltonian \(\partial_\mu H_k\), where \(\mu\) is the direction in k-space, and is given by (when
non_abelian=True):\[Q_{\mu \nu;\ mn}(k) = \sum_{l \notin \text{occ}} \frac{ \langle u_{mk} | \partial_{\mu} H_k | u_{lk} \rangle \langle u_{lk} | \partial_{\nu} H_k | u_{nk} \rangle }{ (E_{mk} - E_{lk})(E_{nk} - E_{lk}) }\]The Abelian quantum geometric tensor (when
non_abelian=False) is obtained by taking the trace over occupied bands:\[Q_{\mu \nu}(k) = \sum_{m \in \text{occ}} Q_{\mu \nu;\ mm}(k)\]By specifying the
planeparameter, we choose a particular \((\mu, \nu)\) pair of the quantum geometric tensor to return.Added in version 2.0.0.
- Parameters:
- k_pts(Nk, dim_k) array-like
Array of k-points with shape (Nk, dim_k), where Nk is the number of points and dim_k is the dimensionality of the k-space.
- occ_idxs1D array, optional
Indices of the occupied bands. Defaults to the first half of the states.
- planetuple of int, optional
Tuple of two integers specifying the plane in k-space for which to compute the curvature. If None (default), computes all components of the Berry curvature tensor. This will affect the shape of the returned array.
- cartesianbool, optional
If True, computes the velocity operator in Cartesian coordinates. Default is False (reduced coordinates).
- non_abelianbool, optional
If True, returns the full tensor (non-abelian case). If False, returns the band-trace of the tensor (abelian case). Default is False.
- param_periodsdict[str, float], optional
Optional map
{param_name: period}for swept parameters. When supplied, assumes the parameter is cyclic and trims any duplicated endpoints, or endpoints equal to the start plus the given period, before building finite-difference stencils. This can improve numerical accuracy by using centered differences throughout the parameter range. Otherwise, the function will use a backward difference at the endpoint and a forward difference at the start.- diff_schemestr, optional
Finite difference scheme to use for parameter derivatives. Options are “central” (default) or “forward”. This parameter is only relevant when passing varying parameters.
- diff_orderint, optional
Order of accuracy for finite difference lambda derivatives. Must be an even integer for “central” scheme (default is
4), and a positive integer for “forward” scheme. This parameter is only relevant when passing varying parameters.- use_tensorflow: bool, optional
If True, will use TensorFlow to speed up linear algebra routines. Requires TensorFlow to be installed. Default is False.
- **params
Keyword arguments mapping parameter names to value(s). Each value can be a scalar or a 1D array of values. If any values are array-like, the QGT is evaluated at all combinations of parameter values, and the final array is stacked with the k-axis leading, followed by each parameter axis in the order of given parameter names.
- Returns:
- Qarray
Quantum geometric tensor at the specified k-points. If
planeis None, shape is(dim_k, dim_k, Nk, n_orb, n_orb). Ifplaneis a tuple, shape is(Nk, n_orb, n_orb)and the returned tensor is restricted to the specified directions. Ifnon_abelian=False, returns the band-trace of the quantum geometric tensor and the last two axes are not present. If parameter sweeps are performed viaparams, parameter axes are added after the k-point axis.
See also
velocityComputes the velocity operator used in the Kubo formula.
berry_curvatureComputes the Berry curvature from the quantum geometric tensor.
quantum_metricComputes the quantum metric from the quantum geometric tensor.
Notes
The quantum geometric tensor captures both the Berry curvature (imaginary part) and the quantum metric (real part) of the occupied bands.
Warning
This requires a global energy gap between occupied and unoccupied bands.
The quantum geometric tensor is defined only when the total number of independent coordinates (crystal momenta plus varying parameters) is at least two, i.e.
dim_k + n_params >= 2wheren_paramsis the number of varying parameters set with lists of values.