Fortran Coder

查看: 4237|回复: 4
打印 上一主题 下一主题

[通用算法] 计算物理_哈密顿量对k点的导数

[复制链接]

58

帖子

21

主题

0

精华

专家

F 币
283 元
贡献
173 点
跳转到指定楼层
楼主
发表于 2019-4-21 03:07:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,

我是做计算物理研究的。我想向大家请教一个编程的问题。在第一布里渊区内采用Monkhorst方法建立起了k网格后,每个k点上都各自建立起了一个Hamiltonian Matrix,现在我想求每个k个点上的Hamiltonian对该k点的导数。我的想法是用离散化的方法直接计算,形式如下。

[H(k)-H(k')]/(k-k')

其中k和k'为两个相邻的k个点坐标;k'为k点的下一个临近点。

我想请教的问题是:

1. 这种离散化的求导方法是否正确?

2. 在k网格边缘上的k点的Hamiltonian,如何对k点求导数呢?边缘上的k点的下一个临近的k点已经跑到第一布里渊区外了,而Monkhorst方法只计算了第一布里渊区内的k点,并没有计算第一布里渊区外的k点。这样一来,第一布里渊区外的k点上的Hamiltonian也就不被计入了。如果不被计入,那要如何计算位于k网格边缘上的k点的Hamiltonian对其的导数呢?

望大家不吝赐教,谢谢啦。

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2019-4-21 14:32:56 | 只看该作者
可以,这就是有限差分。了解一下不同差分格式,比如向前差分,向后差分,中心差分。

58

帖子

21

主题

0

精华

专家

F 币
283 元
贡献
173 点
板凳
 楼主| 发表于 2019-4-21 15:56:45 | 只看该作者
li913 发表于 2019-4-21 14:32
可以,这就是有限差分。了解一下不同差分格式,比如向前差分,向后差分,中心差分。 ...

非常感谢你的回复。

只是我还有个疑问。在边界上的k点的Hamiltonian如何对k点求导数呢?向前的话,邻近的k点已经跑到第一布里渊区外了,而第一布里渊区外的k点,Monkhorst根本没有计入,这个信息是缺失的。向后的话,以此类推,位于原点上的k点的Hamiltonian又如何对k点求导数呢?向后邻近的k点也跑到第一布里渊区外了。这与前者遇到的情况是一样的。

另外,与相场模拟不同(有周期性边界条件,原点处的信息与边界处的信息相同)。第一布里渊区原点处k点上的Hamiltonian与边界处Hamiltonian的信息是不同的。我无法把溢出第一布里渊区的k的上的Hamiltonian按周期性边界条件再等同于原点处k点上的Hamiltonian的。

不知要如何处理这个问题呢?谢谢啦,盼复。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2019-4-21 21:32:07 | 只看该作者
左右边界用不同的差分格式。左边界:[(f(1)-f(0)]/h, 右边界:[f(n)-f(n-1)]/h,其余地方用中心差分。
当然,差分格式很多,还有更高阶的,在边界附近需要退化至低阶。

58

帖子

21

主题

0

精华

专家

F 币
283 元
贡献
173 点
5#
 楼主| 发表于 2019-4-22 02:45:35 | 只看该作者
li913 发表于 2019-4-21 21:32
左右边界用不同的差分格式。左边界:[(f(1)-f(0)]/h, 右边界:[f(n)-f(n-1)]/h,其余地方用中心差分。
当然 ...

好的,非常感谢你的指点。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-26 15:10

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表