多体哈密顿代码
前文提到了180度Mn-O-Mn配位的结构中,Mn为2价,Mn离子d轨道半满,有5个电子,其哈密顿见前面推文。
文中使用了近似,总觉得还不信服,这里使用哈密顿解本征值,让参数t_pd 和 U 从0到5变化,来验证这个结论。
这里基于推文中介绍的哈密顿,求解本征值,通过数值方法验证反铁磁能量比铁磁能量低
我们首先回顾铁磁和反铁磁的哈密顿:
代码如下:
import numpy as np
import numpy.linalg as alg
from matplotlib import pyplot as plt
from matplotlib import rc
from matplotlib import cm
import matplotlib.colors as colors
from mpl_toolkits.mplot3d import Axes3D
rc('text', usetex=True)
plt.rc('font',family='Times New Roman',size=20)
def Ham_180AFM(t,u,delta):
H = np.array([[0,0,t,t,0,0,0,0,0],
[0,0,0,0,t,t,0,0,0],
[t,0,u+delta,0,0,0,-t,0,-t],
[t,0,0,u+delta,0,0,0,-t,-t],
[0,t,0,0,u+delta,0,t,0,t],
[0,t,0,0,0,u+delta,0,t,t],
[0,0,-t,0,t,0,u,0,0],
[0,0,0,-t,0,t,0,u,0],
[0,0,-t,-t,t,t,0,0,2*(u+delta)]])
e,w = alg.eigh(H)
return e[0]
def Ham_180FM(t,u,delta):
H = np.array([[0,t,t],
[t,u+delta,0],
[t,0,u+delta]])
e,w = alg.eigh(H)
return e[0]
delta = 1
t = np.linspace(0.5,5,51)
u = np.linspace(0.5,5,51)
T,U = np.meshgrid(t,u)
# 计算 Z = Ham_180FM(T, U) - Ham_180AFM(T, U)
Z = np.zeros_like(T)
for i in range(T.shape[0]):
for j in range(T.shape[1]):
Z[i, j] = Ham_180FM(T[i, j], U[i, j],delta) - Ham_180AFM(T[i, j], U[i, j],delta)
fig = plt.figure(figsize=(20,20))
ax = fig.add_subplot(111, projection='3d')
# 绘制 surface 图
surf = ax.plot_surface(T, U, Z, cmap=cm.coolwarm)
# 添加颜色条
cbar= fig.colorbar(surf,pad=0.01, aspect=40)
cbar.set_ticks(np.linspace(Z.min(), Z.max(), 15))
ax.set_xlabel(r'$t_{pd}$')
ax.set_ylabel(r'$U$')
ax.set_zlabel('Energy Difference (' + r'$E_{FM} - E_{AFM}$)')
# 显示图形
plt.show()
结果
代码参数解释
这里delta取1,t_pd 和 U分别从0到5扫描,最后输出FM-AFM的本征值之差,可以发现整个过程中,铁磁能量大于反铁磁能量,即得到的结果为非负的,当t,U不为0时,E_FM - E_AFM >0, 即反铁磁为基态。
jupyter notebook 代码下载
链接:https://pan.quark.cn/s/542531101c6e
提取码:BDAD