def test_eps_r_op_2s_AA12_C34(self): r0 = tc.eps_r_op_2s_AA12_C34(self.r2, self.AA12, self.C_conj_B12) r0_ = tc.eps_r_op_2s_A(self.r2, self.A1, self.A2, self.B1, self.B2, self.op2s) self.assertTrue(sp.allclose(r0, r0_))
def test_eps_r_op_2s_C12(self): r0 = tc.eps_r_op_2s_C12(self.r2, self.C_A12, self.B1, self.B2) r0_ = tc.eps_r_op_2s_A(self.r2, self.A1, self.A2, self.B1, self.B2, self.op2s) self.assertTrue(sp.allclose(r0, r0_))
def test_eps_r_op_2s_A(self): r0 = tc.eps_r_op_2s_A(self.r2, self.A1, self.A2, self.B1, self.B2, self.op2s) r0_ = self.E12_op.dot(self.r2.ravel()).reshape(self.D[0], self.D[0]) self.assertTrue(sp.allclose(r0, r0_))
def test_eps_r_op_2s_AA_func_op(self): r0 = tc.eps_r_op_2s_AA_func_op( self.r2, self.AA12, self.BB12, lambda s, t, u, v: self.op2s[s, t, u, v]) r0_ = tc.eps_r_op_2s_A(self.r2, self.A1, self.A2, self.B1, self.B2, self.op2s) self.assertTrue(sp.allclose(r0, r0_))
def test_eps_r_op_2s_AA_func_op(self): r0 = tc.eps_r_op_2s_AA_func_op(self.r2, self.AA12, self.BB12, lambda s,t,u,v: self.op2s[s,t,u,v]) r0_ = tc.eps_r_op_2s_A(self.r2, self.A1, self.A2, self.B1, self.B2, self.op2s) self.assertTrue(sp.allclose(r0, r0_))
def hamiltonian_elements(B1, B2, AL, AR, lL, rR, KL, KR, h_nn, d_max): B1_viol = rgf_violation(B1, AR, rR) B2_viol = rgf_violation(B2, AR, rR) if B1_viol > 1e-12: raise ValueError( "Gauge-fixing condition not satisfied for B1! Violation: {}". format(B1_viol)) if B2_viol > 1e-12: raise ValueError( "Gauge-fixing condition not satisfied for B2! Violation: {}". format(B2_viol)) print(mm.adot(lL, tm.eps_r_noop(rR, B1, B2))) matels = [] if d_max >= 0: # <lL|(B1;B2)|KR> x = tm.eps_l_noop(lL, B1, B2) res1 = mm.adot(x, KR) # <KL|(B1;B2)|rR> x = tm.eps_l_noop(KL, B1, B2) res2 = mm.adot_noconj(x, rR) # Do not conjugate KL contribution # <lL|h(AL,B1;AL,B2)|rR> x = tm.eps_r_op_2s_A(rR, AL, B1, AL, B2, h_nn) res3 = mm.adot(lL, x) # <lL|h(B1,AR;B2,AR)|rR> x = tm.eps_r_op_2s_A(rR, B1, AR, B2, AR, h_nn) res4 = mm.adot(lL, x) matels.append(res1 + res2 + res3 + res4) B1L = tm.eps_l_noop(lL, B1, AL) # <lL|(B1;AL) B2_KR = tm.eps_r_noop(KR, AR, B2) # (AR;B2)|KR> B2_KR += tm.eps_r_op_2s_A(rR, AR, AR, B2, AR, h_nn) # (AR;B2)|KR> + h(AR,AR;B2,AR)|rR> if d_max >= 1: res = mm.adot( B1L, B2_KR) # <lL|(B1;AL) (AR;B2)|KR> + <lL|(B1;AL) h(AR,AR;B2,AR)|rR> x = tm.eps_r_op_2s_A(rR, B1, AR, AL, B2, h_nn) # <lL|h(B1,AR;AL,B2)|rR> res += mm.adot(lL, x) matels.append(res) B2_KR = tm.eps_r_noop(B2_KR, AR, AL) # advance one site (d == 2) # (AR;AL)(AR;B2)|KR> + (AR;AL) h(AR,AR;B2,AR)|rR> + h(AR,AR;AL,B2)|rR> B2_KR += tm.eps_r_op_2s_A(rR, AR, AR, AL, B2, h_nn) for d in range(2, d_max + 1): x = B1L for _ in range(2, d): x = tm.eps_l_noop(x, AR, AL) # (AR;AL)^(d-2) res = mm.adot(x, B2_KR) matels.append(res) return matels