-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathphysics_utils.py
62 lines (50 loc) · 1.63 KB
/
physics_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import numpy as np
import scipy
import scipy.constants
import scipy.linalg as la
import scipy.sparse.linalg as sla
from types import SimpleNamespace
##################################################################
# Pauli matrices
pauli = SimpleNamespace(
s0 = np.array([[1.0, 0.0], [0.0, 1.0]]),
sx = np.array([[0.0, 1.0], [1.0, 0.0]]),
sy = np.array([[0.0, -1j], [1j, 0.0]]),
sz = np.array([[1.0, 0.0], [0.0, -1.0]]),
)
# Kron products
t0s0 = np.kron(pauli.s0, pauli.s0),
t0sx = np.kron(pauli.s0, pauli.sx),
t0sy = np.kron(pauli.s0, pauli.sy),
t0sz = np.kron(pauli.s0, pauli.sz),
txs0 = np.kron(pauli.sx, pauli.s0),
txsx = np.kron(pauli.sx, pauli.sx),
txsy = np.kron(pauli.sx, pauli.sy),
txsz = np.kron(pauli.sx, pauli.sz),
tys0 = np.kron(pauli.sy, pauli.s0),
tysx = np.kron(pauli.sy, pauli.sx),
tysy = np.kron(pauli.sy, pauli.sy),
tysz = np.kron(pauli.sy, pauli.sz),
tzs0 = np.kron(pauli.sz, pauli.s0),
tzsx = np.kron(pauli.sz, pauli.sx),
tzsy = np.kron(pauli.sz, pauli.sy),
tzsz = np.kron(pauli.sz, pauli.sz),
pauli.sp = (pauli.sx + 1j * pauli.sy) / 2
pauli.sm = (pauli.sx - 1j * pauli.sy) / 2
###################################################################
# Units
# Length : nm
# Energy : meV
# Current : nA
# Temperature : K
constants = SimpleNamespace(
hbar=scipy.constants.hbar,
m_e=scipy.constants.m_e,
eV=scipy.constants.eV,
e=scipy.constants.e,
meV=scipy.constants.eV * 1e-3,
k_B=scipy.constants.k / (scipy.constants.eV * 1e-3),
mu_B=scipy.constants.physical_constants["Bohr magneton"][0]
/ (scipy.constants.eV * 1e-3),
current_unit=scipy.constants.k * scipy.constants.e / scipy.constants.hbar * 1e9,
)