热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SU(4)Hubbard平均场Python代码

标准的SU(N)共线磁序平均场计算,存在很强简并性。importnumpyasnpfromnumpyimportexp,pi,sqrtf

标准的SU(N)共线磁序平均场计算,存在很强简并性。

import numpy as np
from numpy import exp, pi, sqrt
from numpy.linalg import eigh
import matplotlib.pylab as plt
from numba import njit
def H0_SU4(H, k, t = 1):
A = t * np.array([[sqrt(3),0,1,exp(-1j*k)],[0, sqrt(3),1,1],[1,1,sqrt(3),0],[exp(1j*k),1,0,sqrt(3)]])
B = t * np.array([[0,0,0,0],[0,0,0,0],[1,0,0,0],[0,-1,0,0]])
return tridiag_block_matrix(H, A, B.T, B)
@njit
def Fermi(E, mu, T):
return 1/(np.exp((E - mu)/T) + 1)
@njit
def tridiag_block_matrix(H, c, u, d):
# c, u, d are center, upper and lower blocks
N, _ = H.shape
n, _ = c.shape
H[0:n, 0:n] = c
for i in range(n, N, n):
H[i:i+n, i:i+n] = c
H[i-n:i, i:i+n] = d
H[i:i+n, i-n:i] = u
return H
# Hatree_Fork 自洽计算过程
def Hatree_Fock(H, ks, N1avg, N2avg, N3avg, N4avg, U, T = 0.005, mu = 0, ncc = 20):
m, _ = N1avg.shape
nk = ks.size
band1 = np.zeros((nk, m))
band2 = np.zeros((nk, m))
band3 = np.zeros((nk, m))
band4 = np.zeros((nk, m))
for ic in range(ncc):
N1avg_tmp = np.zeros((m,m), dtype='double')
N2avg_tmp = np.zeros((m,m), dtype='double')
N3avg_tmp = np.zeros((m,m), dtype='double')
N4avg_tmp = np.zeros((m,m), dtype='double')
m1avg = (N1avg - N2avg)/2
m2avg = (N1avg+N2avg-2*N3avg)/(2*sqrt(3))
m3avg = (N1avg+N2avg+N3avg-3*N4avg)/(2*sqrt(6))
C = 8/5*U*(m1avg*m1avg +m2avg*m2avg + m3avg*m3avg)
U1 = U * (m1avg/2+m2avg/(2*sqrt(3)) + m3avg/(2*sqrt(6)))
U2 = U * (-m1avg/2+m2avg/(2*sqrt(3))+ m3avg/(2*sqrt(6)))
U3 = U * (-2*m2avg/(2*sqrt(3)) + m3avg/(2*sqrt(6)))
U4 = U * (-3*m3avg/(2*sqrt(6)))
for i in range(nk):
H0 = H0_SU4(H, ks[i])
Hk0 = H0[1:,1:]
Ek1, Ak1 = eigh(Hk0 - 16/5 * U1 + C)
Ek2, Ak2 = eigh(Hk0 - 16/5 * U2 + C)
Ek3, Ak3 = eigh(Hk0 - 16/5 * U3 + C)
Ek4, Ak4 = eigh(Hk0 - 16/5 * U4 + C)
if ic == ncc - 1:
band1[i, :] = Ek1
band2[i, :] = Ek2
band3[i, :] = Ek3
band4[i, :] = Ek4
Fermi1 = Fermi(Ek1,mu,T).reshape(1,m)
Fermi2 = Fermi(Ek2,mu,T).reshape(1,m)
Fermi3 = Fermi(Ek3,mu,T).reshape(1,m)
Fermi4 = Fermi(Ek4,mu,T).reshape(1,m)
Nk1 = (np.abs(Ak1)*np.abs(Ak1)*Fermi1).sum(axis=1,dtype='double')
Nk2 = (np.abs(Ak2)*np.abs(Ak2)*Fermi2).sum(axis=1,dtype='double')
Nk3 = (np.abs(Ak3)*np.abs(Ak3)*Fermi3).sum(axis=1,dtype='double')
Nk4 = (np.abs(Ak4)*np.abs(Ak4)*Fermi4).sum(axis=1,dtype='double')
N1avg_tmp += np.diag(Nk1)
N2avg_tmp += np.diag(Nk2)
N3avg_tmp += np.diag(Nk3)
N4avg_tmp += np.diag(Nk4)
N1avg = N1avg_tmp/nk
N2avg = N2avg_tmp/nk
N3avg = N3avg_tmp/nk
N4avg = N4avg_tmp/nk

if ic % 5==0:
print(f"已经完成{ic}次迭代")

return band1, band2, band3, band4, N1avg, N2avg, N3avg, N4avg
def plot_band():
N = 256
m = 4 * N
nk = 128
U = 0.2
ks = np.linspace(0, 2*pi, nk)
H = np.zeros((m, m), dtype=np.complex64)
N1avg = 0.25 * np.eye(m - 1)
N2avg = 0.25 * np.eye(m - 1)
N3avg = 0.25 * np.eye(m - 1)
N4avg = 0.25 * np.eye(m - 1)
N1avg[0, 0] = 0.3
N2avg[0, 0] = 0.3
N3avg[0, 0] = 0.3
N4avg[0, 0] = 0.1
band1, band2, band3, band4, N1avg, N2avg, N3avg, N4avg = Hatree_Fock(H, ks, N1avg, N2avg, N3avg, N4avg, U)
plt.plot(band1, color = "gray")
plt.plot(band2, color = "gray")
plt.plot(band3, color = "gray")
plt.plot(band4, color = "gray")
plt.plot(band1[:, N - 1], color = "red")
plt.plot(band2[:, N - 1], color = "red")
plt.plot(band3[:, N - 1], color = "red")
plt.plot(band4[:, N - 1], color = "blue")
plt.xticks(np.arange(0, nk, nk//3), ['0', '2/3π', '4/3π', '2π'], fOntsize= 12, fOntweight= 'bold')
plt.yticks(np.arange(-0.5, 0.6, 0.5), fOntsize= 12, fOntweight= 'bold')
plt.ylim(-0.5, 0.5)
plt.xlabel("k", fOntsize= 13, fOntweight= 'bold')
plt.ylabel("E", fOntsize= 13, fOntweight= 'bold')
plt.show()
plt.plot(np.diag(N1avg))
plt.plot(np.diag(N2avg))
plt.plot(np.diag(N3avg))
plt.plot(np.diag(N4avg))
plt.show()
if __name__ == '__main__':
N = 32
m = 4 * N
nk = 128
U = 0.2
ks = np.linspace(0, 2*pi, nk)
H = np.zeros((m, m), dtype=np.complex64)
N1avg = 0.25 * np.eye(m - 1)
N2avg = 0.25 * np.eye(m - 1)
N3avg = 0.25 * np.eye(m - 1)
N4avg = 0.25 * np.eye(m - 1)
N1avg[0, 0] = 0.3
N2avg[0, 0] = 0.3
N3avg[0, 0] = 0.3
N4avg[0, 0] = 0.1
band1, band2, band3, band4, N1avg, N2avg, N3avg, N4avg = Hatree_Fock(H, ks, N1avg, N2avg, N3avg, N4avg, U)
np.save("./band1.npy", band1)
np.save("./band2.npy", band2)
np.save("./band3.npy", band3)
np.save("./band4.npy", band4)
np.save("./N1avg", N1avg)
np.save("./N2avg", N2avg)
np.save("./N3avg", N3avg)
np.save("./N4avg", N4avg)


版权声明:本文为wwxy1995原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wwxy1995/article/details/121463153
推荐阅读
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 本文详细介绍了钩子(hook)的概念、原理及其在编程中的实际应用。通过对比回调函数和注册函数,解释了钩子的工作机制,并提供了具体的Python示例代码,帮助读者更好地理解和掌握这一重要编程工具。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 本文详细介绍了get和set方法的作用及其在编程中的实现方式,同时探讨了点语法的使用场景。通过具体示例,解释了属性声明与合成存取方法的概念,并补充了相关操作的最佳实践。 ... [详细]
  • 斯特林数与幂
    参考资料:https:www.luogu.com.cnblogchtholly-willemsolution-p5408https:blog.csdn.netguizhiyuart ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
author-avatar
WingKeii-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有