From 5dd77a62ab7c35ea025c6d262724013357a5facb Mon Sep 17 00:00:00 2001
From: Johanna <johanna@zijderveld.de>
Date: Thu, 11 Apr 2024 22:32:38 +0200
Subject: [PATCH] change input to meanfield vector function to be
 densitymatrixTB instead of densitymatrixarray

---
 codes/mf.py            | 20 ++++++++++++++++----
 codes/model.py         | 15 ++++++---------
 codes/tb/transforms.py |  3 ++-
 3 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/codes/mf.py b/codes/mf.py
index d293463..4b81464 100644
--- a/codes/mf.py
+++ b/codes/mf.py
@@ -1,6 +1,7 @@
 import numpy as np
 from codes.tb.tb import addTb
 
+
 def densityMatrixGenerator(hkfunc, E_F):
     """
     Generate a function that returns the density matrix at a given k-point.
@@ -111,21 +112,32 @@ def fermiOnGrid(hkfunc, filling, nK=100, ndim=1):  # need to extend to 2D
         fermi = (vals_flat[ifermi - 1] + vals_flat[ifermi]) / 2
         return fermi
 
+
 def meanFieldFFTkvector(densityMatrixTb, h_int, n=2):
 
     localKey = tuple(np.zeros((n,), dtype=int))
 
     direct = {
-        localKey: np.diag(
-            np.einsum("pp,pn->n", densityMatrixTb[*localKey, :], h_int[localKey])
+        localKey: np.sum(
+            np.array(
+                [
+                    np.diag(
+                        np.einsum("pp,pn->n", densityMatrixTb[localKey], h_int[vec])
+                    )
+                    for vec in frozenset(h_int)
+                ]
+            ),
+            axis=0,
         )
     }
+
     exchange = {
-        vec: -1 * h_int.get(vec, 0) * densityMatrixTb[*vec, :]
+        vec: -1 * h_int.get(vec, 0) * densityMatrixTb[vec]  # / (2 * np.pi)#**2
         for vec in frozenset(h_int)
     }
     return addTb(direct, exchange)
 
+
 def meanField(densityMatrix, int_model, n=2, nK=100):
     """
     Compute the mean-field in k-space.
@@ -162,4 +174,4 @@ def meanField(densityMatrix, int_model, n=2, nK=100):
         vec: -1 * int_model.get(vec, 0) * densityMatrix[vec]  # / (2 * np.pi)#**2
         for vec in frozenset(int_model)
     }
-    return addTb(direct, exchange)
\ No newline at end of file
+    return addTb(direct, exchange)
diff --git a/codes/model.py b/codes/model.py
index 48b92b5..de0b5c1 100644
--- a/codes/model.py
+++ b/codes/model.py
@@ -1,5 +1,6 @@
+# %%
 from codes.tb.tb import addTb
-from codes.tb.transforms import tb2kfunc, tb2kham, kdens2tbFFT, kfunc2tb
+from codes.tb.transforms import tb2kfunc, tb2kham, kdens2tbFFT, kfunc2tb, ifftn2tb
 from codes.mf import (
     densityMatrixGenerator,
     densityMatrix,
@@ -43,13 +44,6 @@ class Model:
             densityMatrixGenerator(self.hkfunc, self.EF), nSamples=nK, ndim=self._ndim
         )
 
-    # def mfield(self, mf_model):
-    #     self.densityMatrix = self.makeDensityMatrix(mf_model)
-    #     return addTb(
-    #         meanFieldQuad(self.densityMatrix, self.int_model),
-    #         {self._localKey: -self.EF * np.eye(self._size)},
-    #     )
-
     def mfield(self, mf_model, nK=200):
         self.densityMatrix = self.makeDensityMatrix(mf_model, nK=nK)
         return addTb(
@@ -68,8 +62,11 @@ class Model:
 
     def mfieldFFTkvector(self, mf_model, nK=200):
         densityMatrix = self.makeDensityMatrixkvector(mf_model, nK=nK)
-        densityMatrixTb = kdens2tbFFT(densityMatrix, self._ndim)
+        densityMatrixTb = ifftn2tb(kdens2tbFFT(densityMatrix, self._ndim))
         return addTb(
             meanFieldFFTkvector(densityMatrixTb, self.h_int, n=self._ndim),
             {self._localKey: -self.EF * np.eye(self._size)},
         )
+
+
+# %%
diff --git a/codes/tb/transforms.py b/codes/tb/transforms.py
index 9f9f93e..45c1abc 100644
--- a/codes/tb/transforms.py
+++ b/codes/tb/transforms.py
@@ -135,5 +135,6 @@ def kfunc2tb(kfunc, nSamples, ndim=1):
     ifftnArray = ifftn(kfuncOnGrid, axes=np.arange(ndim))
     return ifftn2tb(ifftnArray)
 
+
 def kdens2tbFFT(kdens, ndim=1):
-    return ifftn(kdens, axes=np.arange(ndim))
\ No newline at end of file
+    return ifftn(kdens, axes=np.arange(ndim))
-- 
GitLab