def K2inv_mat22(E,L,a2): nklist = defns.list_nnk(E,L) K2inv22 = [] for nkvec in nklist: kvec = [i*2*pi/L for i in nkvec] K2inv22.append(K2inv(E,kvec,2,0,0,0,0,a2)*np.identity(5)) return block_diag(*K2inv22)
def P_irrep_subspace_22(E, L, I): N = len(defns.list_nnk(E, L)) Psub = np.zeros((5 * N, 0)) for shell in defns.shell_list(E, L): Psub = np.column_stack( (Psub, P_irrep_subspace_o_l(E, L, I, shell, 2, lblock=True))) return Psub
def K33Bmat(E, L, a0, a2): nnk_list = list_nnk(E, L) N = len(nnk_list) #print(nnk_list) #print(N) Gfull = [] for p in range(N): nnp = list(nnk_list[p]) Gp = [] for k in range(N): nnk = list(nnk_list[k]) Gpk = np.zeros((6, 6)) for i1 in range(6): [l1, m1] = Gmatrix.lm_idx(i1) for i2 in range(6): [l2, m2] = Gmatrix.lm_idx(i2) Gpk[i1, i2] = K33B.K3cubicB(E, 2 * math.pi / L * np.array(nnp), l1, m1, 2 * math.pi / L * np.array(nnk), l2, m2) Gp.append(Gpk) Gfull.append(Gp) matrix = np.ones_like(chop(np.block(Gfull))) print(matrix.shape) return pr.irrep_proj(matrix, E, L, "A1")
def Xi00(e, L): nklist = list_nnk(e, L) res = [] for nnk in nklist: res.append(1. / ktinvroot(e, L, sums.norm(nnk))) return np.diag(res)
def K2inv_mat00(E,L,a0,r0,P0): nklist = defns.list_nnk(E,L) K2inv00 = [] for nkvec in nklist: kvec = [i*2*pi/L for i in nkvec] K2inv00.append(K2inv(E,kvec,0,0,a0,r0,P0,0)) return np.diag(K2inv00)
def Gmat(E, L): nnk_list = list_nnk(E, L) N = len(nnk_list) #print(nnk_list) #print(N) Gfull = [] for p in range(N): nnp = list(nnk_list[p]) Gp = [] for k in range(N): nnk = list(nnk_list[k]) Gpk = np.zeros((6, 6)) for i1 in range(6): [l1, m1] = lm_idx(i1) for i2 in range(6): [l2, m2] = lm_idx(i2) Gpk[i1, i2] = G(E, L, nnp, nnk, l1, m1, l2, m2) Gp.append(Gpk) Gfull.append(Gp) return chop(np.block(Gfull))
def K3mat(E, L, K0, K1, K2, A, B, Ytype): nnk_list = list_nnk(E, L) N = len(nnk_list) K3full = [] for p in range(N): pvec = [i * 2 * pi / L for i in nnk_list[p]] K3p = [] for k in range(N): kvec = [i * 2 * pi / L for i in nnk_list[k]] K3pk = np.zeros((6, 6)) for i1 in range(6): [lp, mp] = lm_idx(i1) for i2 in range(6): [l, m] = lm_idx(i2) K3pk[i1][i2] = K3quad(E, pvec, lp, mp, kvec, l, m, K0, K1, K2, A, B, Ytype) K3p.append(K3pk) K3full.append(K3p) return chop(np.block(K3full))
def K3mat_old(E, L, K0, K1, K2, A, B, Ytype): nnk_list = list_nnk(E, L) N = len(nnk_list) K3_00 = np.zeros((N, N)) K3_02 = np.zeros((N, 5 * N)) K3_20 = np.zeros((5 * N, N)) K3_22 = np.zeros((5 * N, 5 * N)) for i in range(N): pvec = [npi * 2 * pi / L for npi in nnk_list[i]] for j in range(N): kvec = [nki * 2 * pi / L for nki in nnk_list[j]] K3_00[i][j] = K3quad(E, pvec, 0, 0, kvec, 0, 0, K0, K1, K2, A, B, Ytype) for mp in range(-2, 3): I = (mp + 2) * N + i K3_20[I][j] = K3quad(E, pvec, 2, mp, kvec, 0, 0, K0, K1, K2, A, B, Ytype) for m in range(-2, 3): J = (m + 2) * N + j K3_22[I][J] = K3quad(E, pvec, 2, mp, kvec, 2, m, K0, K1, K2, A, B, Ytype) if mp == 2: # only do this once (mp==2 is arbitrary) K3_02[i][J] = K3quad(E, pvec, 0, 0, kvec, 2, m, K0, K1, K2, A, B, Ytype) return full_matrix(K3_00, K3_20, K3_02, K3_22)
def RHO00(e, L): nklist = list_nnk(e, L) res = [] for nnk in nklist: res.append(rho1mH(e, L, sums.norm(nnk))) return np.diag(res)
def RHO22(e, L): nklist = list_nnk(e, L) res = [] for i in range(5): for nnk in nklist: res.append(rho1mH(e, L, sums.norm(nnk))) return np.diag(res)
def F2_22_matrix(e, L, m1, m2): alpha = 0.5 nklist = list_nnk(e, L) F2_22 = [] for nnk in nklist: #print(nnk) res = sums.F2KSS(e, L, nnk, 2, m1, 2, m2, alpha) F2_22.append(res) return np.diag(F2_22)
def F2_20_matrix(e, L, m): nklist = list_nnk(e, L) alpha = 0.5 F2_20 = [] for nnk in nklist: res = sums.F2KSS(e, L, nnk, 2, m, 0, 0, alpha) F2_20.append(res) return np.diag(F2_20)
def F2_02_matrix(e, L, m): nklist = list_nnk(e, L) alpha = 0.5 F2_02 = [] for nnk in nklist: # print(nnk) res = sums.F2KSS(e, L, nnk, 0, 0, 2, m, alpha) F2_02.append(res) return np.diag(F2_02)
def Gmat00(E, L): nnk_list = list_nnk(E, L) N = len(nnk_list) Gfull = np.zeros((N, N)) for p in range(N): nnp = list(nnk_list[p]) for k in range(N): nnk = list(nnk_list[k]) Gfull[p][k] = G(E, L, nnp, nnk, 0, 0, 0, 0) return chop(Gfull)
def p_iso00(E, L): # No normalization p_iso = np.ones((len(defns.list_nnk(E, L)), 1)) # Steve's convention: each column corresponds to a shell with 1/sqrt(N) normalization (so each vector has length=1) # shells = defns.shell_list(E,L) # p_iso = np.zeros((len(defns.list_nnk(E,L)),len(shells))) # i_k = 0 # for i_shell in range(len(shells)): # N = len(defns.shell_nnk_list(shells[i_shell])) # p_iso[i_k:i_k+N,i_shell] = 1/sqrt(N) # i_k += N return p_iso
def full_F2_00_matrix(e, L): alpha = 0.5 nklist = list_nnk(e, L) F2_00 = [] for nnk in nklist: res = sums.F2KSS(e, L, nnk, 0, 0, 0, 0, alpha) F2_00.append(res) return np.diag(F2_00)
def A22(e, L, a2): nklist = list_nnk(e, L) # q = np.sqrt(1-sums.E2a2(e,k)) # nklist = list_nnk(e,L) # matrixa = np.diag(np.ones(len(nklist)*5)*(-1/(a2**5*q**4))) res = [] for i in range(5): for nnk in nklist: q4 = (1 - sums.E2a2(e, 2 * math.pi * sums.norm(nnk) / L))**4 res.append(-1 / (a2**5 * q4)) # print(res) return np.diag(res)
def G00(e, L): nklist = list_nnk(e, L) G_00 = np.zeros((len(nklist), len(nklist))) #G_00 = np.zeros((len(nklist),len(nklist)),dtype=complex) i = 0 for nnp in nklist: # TB: I reversed nnp and nnk j = 0 for nnk in nklist: # print(nnk, nnp) G_00[i][j] = G(e, L, nnp, nnk, 0, 0, 0, 0) j += 1 i += 1 return G_00
def G22m(e, L, m1, m2): nklist = list_nnk(e, L) G_22 = np.zeros((len(nklist), len(nklist))) #G_22 = np.zeros((len(nklist),len(nklist)),dtype=complex) i = 0 for nnp in nklist: # TB: I reversed nnp and nnk j = 0 for nnk in nklist: # print(nnk, nnp) G_22[i][j] = G(e, L, nnp, nnk, 2, m1, 2, m2) j += 1 i += 1 return G_22
def Gmat00(E, L): nnk_list = list_nnk(E, L) N = len(nnk_list) # print(nnk_list) # print(list(nnk_list[0])) Gfull = np.zeros((N, N)) for p in range(N): # nnp = list(nnk_list[p]) nnp = nnk_list[p] for k in range(N): # nnk = list(nnk_list[k]) nnk = nnk_list[k] Gfull[p, k] = G(E, L, np.array(nnp), np.array(nnk), 0, 0, 0, 0) return chop(Gfull)
def K2inv_mat(E,L,a0,r0,P0,a2): nnk_list = defns.list_nnk(E,L) N = len(nnk_list) K2i_full = [] for k in range(N): kvec = [ ki*2*pi/L for ki in nnk_list[k] ] K2i_k_diag = [] for i in range(6): [l,m] = defns.lm_idx(i) K2i_k_diag.append(K2inv(E,kvec,l,m,a0,r0,P0,a2)) K2i_k = np.diag(K2i_k_diag) K2i_full.append(K2i_k) return block_diag(*K2i_full)
def P_irrep_subspace(E, L, I): # P_I = P_irrep_full(E,L,I) # elist, vlist = LA.eig(P_I) # # eigenvalues should all be 0 or 1; only want 1's # ivec = [i for i,e in enumerate(elist) if abs(e-1)<1e-13] # if len(ivec) != int(round(np.trace(P_I))): # print('Error in P_irrep_subspace: wrong subspace dimension') # Psub = defns.chop(vlist[:,ivec].real) # if Psub.shape[1]==0: # return Psub # else: # return defns.chop(LA.qr(Psub)[0]) # orthonormalize N = len(defns.list_nnk(E, L)) Psub = np.zeros((6 * N, 0)) for shell in defns.shell_list(E, L): Psub = np.column_stack((Psub, P_irrep_subspace_o(E, L, I, shell))) return Psub
def K2inv_mat2(E, L, a2): nklist = defns.list_nnk(E, L) K2inv2 = [] for nkvec in nklist: kvec = [i * 2 * pi / L for i in nkvec] K2inv2.append(K2inv(E, kvec, 2, 0, 0, 0, 0, a2)) # Potentially faster method (pre-allocates memory) # blocksize = len(nklist) # K2inv2 = [None]*blocksize # for i in range(0,blocksize): # kvec = [j*2*pi/L for j in nklist[i]] # K2inv2[i] = K2inv(E,kvec,2,0,0,0,0,a2) K2_block = np.diag(K2inv2) return np.kron(np.identity(5), K2_block)
def Gmat22(E, L): nnk_list = list_nnk(E, L) N = len(nnk_list) Gfull = [] for p in range(N): nnp = list(nnk_list[p]) Gp = [] for k in range(N): nnk = list(nnk_list[k]) Gpk = np.zeros((5, 5)) for mp in range(-2, 3): for m in range(-2, 3): Gpk[mp, m] = G(E, L, nnp, nnk, 2, mp, 2, m) Gp.append(Gpk) Gfull.append(Gp) return chop(np.block(Gfull))
def Gmat22(E, L): nnk_list = list_nnk(E, L) N = len(nnk_list) Gfull = [] for p in range(N): nnp = list(nnk_list[p]) Gp = [] for k in range(N): nnk = list(nnk_list[k]) Gpk = np.zeros((5, 5)) for i in range(5): for j in range(5): mp = i - 2 m = j - 2 Gpk[i, j] = G(E, L, nnp, nnk, 2, mp, 2, m) Gp.append(Gpk) Gfull.append(Gp) return chop(np.block(Gfull))
npsqrt = np.sqrt exp = np.exp def getnmax(cutoff,alpha,x2,gamma): eqn = lambda l : -cutoff + 2*math.pi*npsqrt(math.pi/alpha) * exp(alpha*x2)*erfc(npsqrt(alpha)*l) n0=1 solution=fsolve(eqn, n0) print(max(solution*gamma,1)+3) return int(np.round(max(solution*gamma,1)+3)) L=84 E=2.9972794820231976 print(len(defns.list_nnk(E,L))) exit() a0=25 r0=8.34 E=3.1 L=10 k=2.25 IPV=-1 print(K2.K2inv(E,np.array([0.,0.,k*2*math.pi/L]),0,0,a0,r0,0.,0.,IPV)) exit()
def A00(e, L, a): nklist = list_nnk(e, L) matrixa = np.diag(np.ones(len(nklist)) * (-1 / a)) return matrixa