Example #1
0
        def greens_dot(spin):
            n = greens[spin, ::]

            particles = ndmat(n)
            holes = ndmat(unit_like(n) - n)

            return 0.5 * (holes * delta(spin, 0) * particles + particles * delta(spin, 1) * holes)
Example #2
0
        def delta(spin, r):
            def repulsion(site):
                "Compute |U|(sn_jj-n_jj+1/2)"
                # FIXME: I'm slow
                return self.repulsion * greens[(1 - spin,) + 2 * site] + abs(self.repulsion) * (
                    0.5 - greens[(spin,) + 2 * site]
                )

            f = 1 if spin == 1 else copysign(1, -self.repulsion)

            result = ndmat(zeros(2 * self.sites))
            for i in sites(self.sites):
                result[2 * i] = (
                    -repulsion(i) - f * sqrt(2 * abs(self.repulsion)) * noise[(r,) + i] + self.chemical_potential
                )
            for i, j in adjacencies(self.sites):
                assert i != j
                result[i + j] = self.hopping
            return result