关于 energy_grand 的计算问题 #2
Replies: 3 comments
-
你好,由于我在做其他项目,暂时没有太多时间去维护。感谢你提出的格式化输出的建议。 1.巨正则系综中,粒子可以在系统和环境之间发生交换。巨正则能量的定义中化学势是环境的化学势,这个化学势相当于能量参考点,所以应该用self.U,而不是Ucal。如果用Ucal,那么能量参考点就在变化,能量的对比就没有意义。
如果你不确定哪个公式是正确的,你可以改变体系的电荷数,分别用每种能量公式计算电荷与能量的关系,观察能量极小值点对应的电荷是否是目标电势对应的电荷。 |
Beta Was this translation helpful? Give feedback.
-
非常感谢您的解答。 我之前应该是把 energy_grand 和恒电势模型中的吉布斯自由能搞混了。 energy_grand 是设定 self.U 下的极小值,用来求解 self.U 的,吉布斯自由能是用来描绘催化反应的反应路径的。 我还有一些问题想请教一下:
另外我还有一些建议,供您参考:
|
Beta Was this translation helpful? Give feedback.
-
adaptive_lr = True对于一些比较好收敛的体系会严重拖慢速度,所以默认是关闭的。建议遇到不收敛时去看一下log文件,作Nelect和E_grand的图。对于磁性体系,电子态的能量极小值点不唯一,可能在不同电子态之间来回跳跃导致不收敛,即使adaptive_lr = True使得体系收敛了,也很难确保这个收敛的态就是电子态的基态,建议仔细检查。 Newton-fitting 以外的方法收敛速度很慢,我在新版本中去掉了 FERMI_SHIFT 全部等于 0 有很多种可能的原因,比如真空层厚度不够,电子收敛精度不够都有可能发生。 非常感谢你的建议,我迭代了一个新版本。这个版本应该不止可以应用于vasp,还可以自定义其他first princple的calculator,只要自己写get_fermi()和get_fermi_shift()函数。当然我在忙其他项目,暂时没时间维护。如果你有空的话可以新建一个github分支加进去 |
Beta Was this translation helpful? Give feedback.
-
您好,我目前在学习 GC-DFT,还是新手,看了您的代码 vaspFCP.py,有些不明白的地方。在 vaspFCP.py 中,energy_grand 是这么计算的:energy_grand1=float(line.split()[-2])+(self.U+self.workSHE+self.fermishift)*(self.Nelect-self.Nelect0)。我的疑问是:
P.S.:代码的输出有点乱,建议考虑格式化输出。这是我自己改的部分,供参考:
print("%10s %12s %12s %12s %12s %12s %12s %12s" % ('loop', 'Nelect', 'feimi', 'fermishift', 'energyclose', 'energygrand', 'Ucal', 'C'), file = f)
#f.write('loop'+' '+'Nelect' +' '+'feimi'+' '+'fermishift'+ ' ' +'energyclose' +' '+'energygrand'+' '+'Ucal'+' '+'C'+'\n')
print("%10s %12s %12s %12s %12s %12s %12s %12s %12s" % ('loop', 'NELECT', 'fermi', 'fermishift', 'U', 'conv', 'G', 'G_grand', 'time'), file = f)
#f.write('loop'+' '+'NELECT'+' ' +'fermi'+' '+'fermishift'+' ' + 'U' + ' ' + 'conv' +' '+'G'+' '+'G_grand'+' '+ 'time'+'\n')
print("%10.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f" % (self.FCPloop, self.Nelect, self.fermi, self.fermishift, Ucal, conv, self.energy_close, self.energy_free, endcal-startcal), file = f)
#f.write(str(self.FCPloop)+' '+str(self.Nelect) +' '+str(self.fermi)+' '+str(self.fermishift)+' '+ str(Ucal)+' ' + str(conv)+ ' ' +str(self.energy_close) +' '+str(self.energy_free)+' '+str(endcal-startcal)+'\n')
print("%10.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f" % (self.FCPloop, self.Nelect, self.fermi, self.fermishift, Ucal, conv, self.energy_close, self.energy_free, endcal-startcal), file = f)
#f.write(str(self.FCPloop)+' '+str(self.Nelect) +' '+str(self.fermi)+' '+str(self.fermishift)+' '+ str(Ucal)+' ' + str(conv)+ ' ' +str(self.energy_close) +' '+str(self.energy_free)+' '+str(endcal-startcal)+'\n')
print("%10.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f %12.6f" % (self.FCPloop, Nelectold, self.fermi, self.fermishift, self.energy_close, self.energy_free, Ucal, self.C), file = f)
#f.write(str(self.FCPloop)+' '+str(Nelectold) +' '+str(self.fermi)+' '+str(self.fermishift)+ ' ' +str(self.energy_close) +' '+str(self.energy_free)+' '+str(Ucal)+' '+str(self.C)+'\n')
Beta Was this translation helpful? Give feedback.
All reactions