数值上如何对布洛赫函数进行微分?
这个问题在计算陈数、贝里曲率等量时都会遇到。
总结而言是两个问题:
1.数值上产生的不同k点的布洛赫波是有不同的相位,不连续,所以此时怎么计算对布洛赫波的微分以及贝里曲率等物理量?
2.当能带上有简并交叉点时,如何计算对布洛赫波的微分?
对这两个问题,关老师有过很多博文:https://www.guanjihuan.com/archives/23989 ,介绍了很多处理方法。
第一个问题可以通过计算规范不变的量来处理。第二个问题可以通过wilson loop方法来处理。
最近有一篇最新的文献,讨论了一种处理以上两个问题的方法,发展了一个可以直接利用DFT软件输出的结果来计算贝里联络等量的python包:Berry: A code for the differentiation of Bloch wavefunctions from DFT calculations:
https://www.sciencedirect.com/science/article/pii/S001046552300317X#coi0001
对第一个问题,作者采用了在实空间选取参考点的方法,主要是参考了文献[10][11],我还没看懂。
对第二个问题,作者采用的是:机器学习识别简并点+幺正变换处理简并点的方法 ,见论文的2.3+2.4节!
另外,这篇论文把以上提到的两个问题的来龙去脉也讲得特别好,特别推荐,读了就能理解为什么会在数值计算中出现这两个困难。