eigenvec_viewer¶
eigenvec_viewer.py [-h] [-a ATOMS] [--spin-orbit | --spin-charge]
[-w {total,rank}] [-g GROUP] [-l L] [-t] [-f]
[--basis_order BASIS_ORDER]
filein
Description¶
eigenvec_viewer.py
is a script for printing eigenvectors in a user-friendly layout. Eigenvectors are generated by script chiq_post.py
with option vector=true
. See Analyzing the susceptibility for the definition of the eigenvectors.
Positional Arguments¶
- filein
File name of the eigenvectors, e.g.,
chi_q_eigenvec.00.00.00.dat
.
Options¶
- -h, –help
Show this help message and exit.
- -a ATOMS, –atoms ATOMS
Specify the number of atoms. If provided, the eigenvector for each atom is printed as a matrix.
- –spin-orbit
Spin-orbit coupling is included in DMFT calculation. The spin is not conserved.
- –spin-charge
If this is activated, up-up and down-down components are converted to charge and Sz basis.
- -w {total,rank}, –weight {total,rank}
Print the weight of each irreducible representation (irrep) in the eigenvectors.
- -g GROUP, –group GROUP
Group name (required if
-w
is activated).- -l L, –l L
Angular momentum, e.g.,
2
,3
, or5/2
(required if-w
is activated).- -t, –time_reversal
Classify multipole operators by time-reversal symmetry (only applicable when
-w
is activated).- -f, –fileout
Save weights into a file (only applicable when
-w
is activated).- –basis_order BASIS_ORDER
Specify the order of the basis, e.g.,
[2,1,0]
.
Note
Options --spin-orbit
and --spin-charge
are mutually exclusive.
Example¶
Single-orbital case¶
First example is the single-orbital Hubbard model on a square lattice in Tutorial.
The original data for the eigenvector \(U^{(\xi)}_{ij}(\boldsymbol{q})\) for \(\boldsymbol{q}=0\) is shown below:
$ cat chi_q_eigenvec.00.00.00.dat
-7.071067811865475727e-01 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 7.071067811865474617e-01 2.110206395247974729e-18
0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 -2.984282503566126277e-18 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
-7.071067811865474617e-01 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -7.071067811865475727e-01 -2.110206395247975115e-18
Each eigenvector is printed in one line in real, imaginary, real, imaginary, …, manner. The indices \(i=(a, \sigma, m)\) and \(j=(a, \sigma', m')\) are ordered as \((a, \sigma, \sigma', m, m')\), where \(a\) is atom, \(\sigma\) is spin, and \(m\) is orbital. In the single-orbital model, the indices \(i\) and \(j\) refer only to the spin, namely, \((ij)=(\sigma\sigma')\). Therefore, there are 8 numbers in one line.
No option¶
Without any option, eigenvec_viewer.py
simply prints the eigenvectors as follows:
$ eigenvec_viewer.py chi_q_eigenvec.00.00.00.dat
Namespace(filein='chi_q_eigenvec.00.00.00.dat', atoms=None, spin_orbit=False, spin_charge=False, weight=None, group=None, l=None, time_reversal=False, fileout=False, basis_order=None)
Load 'chi_q_eigenvec.00.00.00.dat'
(n_eigen, dim) = (4, 4)
Decompose dim=4
n_atoms = 1
n_spin = 2
n_orb = 1
(atom, s1, s2, m1, m2) = (1, 2, 2, 1, 1)
#0
-0.7071067811865476 0 0 0 0 0 0.7071067811865475 0
#1
0 0 1.0 0 0 0 0 0
#2
0 0 0 0 1.0 0 0 0
#3
-0.7071067811865475 0 0 0 0 0 -0.7071067811865476 0
'n_atoms'
, 'n_spin'
, and 'n_orb'
are the number of atoms, spins, and orbitals, respectively.
The value of 'n_orb'
is evaluated automatically.
0.000000000000000000e+00
is printed as 0
. The real and imaginary parts are separated by a single space and different elements are separated by double spaces.
-a
option¶
With option -a
, the eigenvectors \(U^{(\xi)}_{ij}\) are printed as follows:
$ eigenvec_viewer.py chi_q_eigenvec.00.00.00.dat -a 1
...
=============
#0
atom 0
uu
-0.707
ud
0
du
0
dd
0.707
=============
#1
atom 0
uu
0
ud
1.000
du
0
dd
0
=============
#2
atom 0
uu
0
ud
0
du
1.000
dd
0
=============
#3
atom 0
uu
-0.707
ud
0
du
0
dd
-0.707
‘uu’ indicates \((\uparrow\uparrow)\), ‘ud’ indicates \((\uparrow\downarrow)\), and so on. The result above corresponds to the Pauli matrices. From this output, we can identify the eigenvectors, listed from top to bottom, as \(S_z\), \(S_+\), \(S_-\), \(n\) (the charge operator).
--spin-charge
option¶
With option --spin-charge
, transformation to the Pauli matrices defined below is computed explicitly.
The result is as follows:
$ eigenvec_viewer.py chi_q_eigenvec.00.00.00.dat -a 1 --spin-charge
...
=============
#0
atom 0
ch
0
sp+
0
sp-
0
spz
-1.000
=============
#1
atom 0
ch
0
sp+
1.000
sp-
0
spz
0
=============
#2
atom 0
ch
0
sp+
0
sp-
1.000
spz
0
=============
#3
atom 0
ch
-1.000
sp+
0
sp-
0
spz
0
Two-orbital case¶
Next example is the two-orbital Hubbard model in Tutorial.
The eigenvectors for \(\boldsymbol{q}=(1/2, 1/2, 0)\) (M point) are shown below with -a
and --spin-charge
options.
\(U^\mathrm{(ch)}_{a, (m m')}\), \(U^\mathrm{(spz)}_{a, (m m')}\), \(U^\mathrm{(sp+)}_{a, (m m')}\), and \(U^\mathrm{(sp-)}_{a, (m m')}\) defined above are now shown as \(2 \times 2\) matrices.
$ eigenvec_viewer.py chi_q_eigenvec.16.16.00.dat -a 1 --spin-charge
Namespace(filein='chi_q_eigenvec.16.16.00.dat', atoms=1, spin_orbit=False, spin_charge=True, weight=None, group=None, l=None, time_reversal=False, fileout=False, basis_order=None)
Load 'chi_q_eigenvec.16.16.00.dat'
(n_eigen, dim) = (16, 16)
Decompose dim=16
n_atoms = 1
n_spin = 2
n_orb = 2
(atom, s1, s2, m1, m2) = (1, 2, 2, 2, 2)
=============
#0
atom 0
ch
0 0
0 0
sp+
0 0.003
0.003 0
sp-
0 0.000
0.000 0
spz
0 -0.707
-0.707 0
=============
#1
atom 0
ch
0 0
0 0
sp+
0 0.149
0.149 0
sp-
0 0.691
0.691 0
spz
0 0.001
0.001 0
=============
#2
atom 0
ch
0 0
0 0
sp+
0 -0.691
-0.691 0
sp-
0 0.149
0.149 0
spz
0 -0.002
-0.002 0
=============
#3
atom 0
ch
-0.707 0
0 0.707
sp+
0 0
0 0
sp-
0 0
0 0
spz
0 0
0 0
...
We can see that the the orbital matrices are of the form of the Pauli matrices. Using symobls \(\sigma_{\xi}\) and \(\tau_{\xi}\) for the Pauli matrices in the spin and orbital spaces, respectively, the eigenvectors can be represented by their combinations \(\sigma_{\xi}\tau_{\xi'}\).
The first three eigenvectors show \(\tau_x\) in the orbital space combined with spins. These correspond to the degenerate order parameters \((\tau_x \sigma_x, \tau_x \sigma_y, \tau_x \sigma_z)\) for the excitonic insulator. The fourth eigenvector shows \(\tau_z\) in the orbital space in the charge sector. This corersponds to the energy splitting between the two orbitals. Its staggered modulation corresponds to the high-spin–low-spin order.