分享
Dynamics & Spectroscopy
输入“/”快速插入内容
Dynamics & Spectroscopy
用户4590
用户4590
4月27日修改
Renormalizer 光谱计算方法教程式笔记
额外的链接:
圆二色谱(circular dichroism)的量子理论
圆二色谱(circular dichroism)的经典电磁散射理论
1. 引言
这份笔记面向希望结合代码与理论理解
renormalizer
中光谱计算实现的读者,重点分析:
•
renormalizer/spectra
中的三类核心 case
•
renormalizer/cv
中的 correction vector 光谱方法
•
其他与“光谱”密切相关的模块,如
transport/spectral_function.py
和
mps/tda.py
本文尽量按“先理论、再代码、再数值流程”的顺序展开,让读者既能知道这些类在算什么,也能知道代码为什么这样组织。
2. 光谱计算的总框架
在分子振动-电子耦合模型中,吸收谱和发射谱通常都可以写成某种
二阶偶极响应函数
。对
renormalizer
来说,最核心的想法有两条路线:
2.1 时间域路线
先构造一个被偶极算符作用后的初态,再做实时间传播,采样关联函数:
或者对应的发射版本。随后再对
C(t)
做傅里叶变换得到频谱。
这条路线在
renormalizer/spectra
中实现,是一个典型的 TD-DMRG / TD-MPS 光谱工作流。
2.2 频域路线
不显式做长时间传播,而是直接在每个频率点
上解一个校正矢量方程,例如:
其中
是 Lorentzian 展宽参数。
这条路线在
renormalizer/cv
中实现,对应 DDMRG / correction vector 思路。
2.3 两类路线的物理差别
•
时间域法更像“先得到动力学,再由动力学恢复频谱”。
•
频域法更像“直接针对目标频率求响应”。
二者求的是同一类线性响应信息,只是数值组织方式不同。
3. 光谱任务如何被组织
在理解
spectra/
和
cv/
之前,先看几个底层公共类。
3.1
TdMpsJob
:时间演化任务模板
TdMpsJob
是一个很关键的抽象基类。它定义了时间演化任务的统一流程:
1.
init_mps()
:准备初态
2.
evolve_single_step(dt)
:做一步传播
3.
process_mps(mps)
:对新态做观测量采样
4.
evolve(...)
:把上面三件事按时间循环组织起来
也就是说,
spectra/
里的类并不需要自己重写整个时间循环,它们只需要定义:
•
初态怎么构造
•
一步怎么传播
•
每一步记录什么量
这就是
spectra
子模块代码能保持简洁的原因。
3.2
BraKetPair
:把相关函数写成 bra/ket 重叠
文件:
[renormalizer/mps/mps.py]
BraKetPair
保存三件事:
•
bra_mps
•
ket_mps
•
ft
其中
ft = calc_ft()
,本质上就是每一步时间点的相关函数值。默认情形下:
如果传入了
mpo
,则也可以是带算符的期望值。
所以在
spectra
的实现里,所谓“算自相关函数”,实际上就是不断更新 bra/ket,然后读取
BraKetPair.ft
。
3.3
SpectraTdMpsJobBase
:把
ft
收集成自相关函数