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