def sigma1(self, a1, b1): for i in self.cs.str_b.et[b1.index]: orb1 = i[1] orb2 = i[2] if b1.index == i[0]: phase1 = i[3] else: phase1 = StrSet.phase(self.cs.str_b.conf[i[0]], b1) self._M[self.cs.ic(a1.index, b1.index), self.cs.ic(a1.index, i[0])] += self.exch[orb1, orb2] * phase1 # print orb1, orb2, self.cs.ic(a1.index, b1.index), self.cs.ic(a1.index, i[0]) for j in self.cs.str_b.et[i[0]]: orb3 = j[1] orb4 = j[2] if j[0] == i[0]: phase2 = j[3] else: phase2 = StrSet.phase(self.cs.str_b.conf[j[0]], self.cs.str_b.conf[i[0]]) self._M[self.cs.ic(a1.index, b1.index), self.cs.ic(a1.index, j[0])] += ( 0.5 * self.getInt([orb1, orb2, orb3, orb4]) * phase1 * phase2 )
def sigma2(self, a1, b1): for i in self.cs.str_a.et[a1.index]: orb1 = i[1] orb2 = i[2] if a1.index == i[0]: phase1 = i[3] else: phase1 = StrSet.phase(self.cs.str_a.conf[i[0]], a1) self._M[self.cs.ic(a1.index, b1.index), self.cs.ic(i[0], b1.index)] += self.exch[orb1, orb2] * phase1 for j in self.cs.str_a.et[i[0]]: orb3 = j[1] orb4 = j[2] if j[0] == i[0]: phase2 = j[3] else: phase2 = StrSet.phase(self.cs.str_a.conf[j[0]], self.cs.str_a.conf[i[0]]) self._M[self.cs.ic(a1.index, b1.index), self.cs.ic(j[0], b1.index)] += ( 0.5 * self.getInt([orb1, orb2, orb3, orb4]) * phase1 * phase2 )
def sigma3(self, a1, b1): for i in self.cs.str_a.et[a1.index]: for j in self.cs.str_b.et[b1.index]: orb1 = i[1] orb2 = i[2] orb3 = j[1] orb4 = j[2] if a1.index == i[0]: phase1 = i[3] else: phase1 = StrSet.phase(self.cs.str_a.conf[i[0]], a1) if b1.index == j[0]: phase2 = j[3] else: phase2 = StrSet.phase(self.cs.str_b.conf[j[0]], b1) self._M[self.cs.ic(a1.index, b1.index), self.cs.ic(i[0], j[0])] += ( self.getInt([orb1, orb2, orb3, orb4]) * phase1 * phase2 )