Example #1
0
    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
                )
Example #2
0
    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
                )
Example #3
0
    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
                )