-
这个假期了解了游戏开发,点进b站的广告蹭到了4天的免费直播课,学到一点点Unity3D的操作(输入控制、动画、碰撞检测等等),同时跟着官方文档上手了Godot。后来了解到现在甚至有WebGal这种引擎,以前想过的互动狼人杀、mygo二创这些形式的作品主要靠剧情和美术发挥创造力,适合会写剧本、画画的人来做,可惜这并不是我擅长的领域。不过正因如此,这趟走马观花式的学习旅程改变了我审视游戏的视角,不再像过去只专注于剧情,而是开始更加关注玩法机制的创新了。如何自由地设计和实现一些新奇的控制逻辑才是我真正感兴趣的。
突然感觉,要想用自己手上这点这极其有限的编程技术做点独特的东西非常不容易,想来想去,最接近这一目标的竟是自己手上的科研项目。
没有拖延的理由了。
-
记录一些奇妙的语言特性。
-
以6-31G为例:
6:核电子所在的每个轨道用一个基函数\(\chi\)描述,\(\chi\)由6个高斯函数线性组合而成;
31:价电子:所在的每个轨道用两个基函数\(\chi_a, \chi_b\)描述,\(\chi_a\)由3个高斯函数线性组合而成,\(\chi_b\)是一个高斯函数(H原子的1s电子算价电子)。
-
宏观介电函数:
\[\epsilon_M(\omega)=\lim_{q\rightarrow0}\frac{1}{\epsilon^{-1}_{G=0,G'=0}(q,\omega)}\tag{1}\]
一些软件的文档12中提到,可以用“去除了v(G=0)的响应函数\(\bar\chi\)”计算宏观介电函数:(可以避免求逆)
\[\epsilon_M=1-\frac{4\pi}{\mathbf{q}^2}\bar\chi_{00}\tag{2}\]
联想到微观介电函数和不可约极化率(对KSDFT是\(\chi^0\))的关系:\(\epsilon=1-v\chi^0\),于是一开始我以为\(\epsilon_M\)就是\(\epsilon\)对响应函数做了个截断。
宏观介电函数的公式(1)到(2)是可以严格推出来的。3
将库伦核分为对角项(长程项)和非对角项(局域场效应):
\[v_\mathbf{GG'}=\frac{4\pi}{|\mathbf{q+G}|^2}+\bar{v}_\text{GG'}\]
Dyson方程:
\[\chi=\chi^0+\chi^0v\chi\]
定义\(\bar\chi\)为只含局域场部分相互作用的响应函数:
\[\bar\chi=\chi^0+\chi^0\bar{v}\bar\chi\]
由此得出\(\bar\chi\)和\(\chi\)之间的关系:
\[\begin{aligned}
\chi/\bar{\chi}&=(1+v\chi)/(1+\bar{v}\bar\chi)\\
\chi+\chi\bar{v}\bar\chi&=\bar\chi+\bar\chi v\chi\\
\chi&=\bar\chi+\bar\chi\frac{4\pi}{|\mathbf{q+G}|^2}\chi
\end{aligned}\]
可以证明:(原文3.5式,\(\bar\chi^{(2)}(\omega)\)是\(q^2\)项系数,根据\(k\cdot p\)微扰论推出)
\[\lim_{\mathbf{q}\rightarrow0}\bar\chi=\bar\chi^{(2)}(\omega)q^2+O(q)\tag{3}\]
所以对G=0有
\[\chi=\frac{\bar\chi}{1-4\pi\bar\chi^{(2)}}\]
现在计算宏观介电函数:
\[\epsilon_M(\omega)=\lim_{q\rightarrow0}\frac{1}{\epsilon^{-1}_{G=0,G'=0}(q,\omega)}\]
利用微观介电函数和响应函数的关系:
\[\epsilon^{-1}=1+v\chi\]
在G=0,\(q\rightarrow 0\)时有:(原文3.8式)
\[\begin{aligned}
\epsilon_M(\omega)&=\lim_{\mathbf{q}\rightarrow0}\frac{1}{1+[v\chi]_{00}}\\
&=\left[1+\frac{v\bar\chi}{1-4\pi\bar\chi^{(2)}}\right]_{00}^{-1}\\
&=\left[1+\frac{4\pi\bar\chi^{(2)}}{1-4\pi\bar\chi^{(2)}}\right]^{-1}\\
&=1-4\pi\bar\chi^{(2)}(\omega)\\
\end{aligned}\]
如果(3)对\(\chi^0\)也成立,即\(\lim_{\mathbf{q}\rightarrow0}\chi^0=\chi^{0(2)}(\omega)q^2+O(q)\),那么\(q\rightarrow0,G=G'=0\)的微观介电函数就是:\(\epsilon=1-4\pi\chi^{0(2)}\)。
对比微观和宏观介电函数,确实是\(\chi^0\)和\(\bar\chi\)的区别。根据\(\bar\chi=\chi^0+\chi^0\bar{v}\bar\chi\),可以理解为宏观介电函数是从微观介电函数中减去了局域场效应::\(\chi^0\bar{v}\bar\chi\)。
之前认为\(\bar\chi\)是\(\chi^0\)的截断,是因为默认应用了\(\chi=\chi^0\)的近似。实际上\(\bar\chi\)是\(\chi\)的一部分,比\(\chi^0\)多包含了局域场效应。
Bethe-Salpeter Equation - Theory — GPAW (dtu.dk) ↩
The RPA and RPA+BSE Dielectric functions (questaal.gitlab.io) ↩
W. Hanke (1978) Dielectric theory of elementary excitations in crystals, Advances in Physics, 27:2, 287-341, DOI: 10.1080/00018737800101384 ↩
-
rebase family
A,B两分支都在共同的基上有各自的修改,如果希望把A分支(当前分支)的修改建立在B分支修改的基础上,即:共同的基 + B分支的修改 + A分支的修改:
git rebase <branch-B>
如果B分支在远程,可以拉取的同时rebase:
git pull --rebase origin <branch-B>
批量处理之前的n个commit:改名、多合一、删除
git rebase -i HEAD~n
pick保留,s/squash合并,r/reword改名,d/drop删除
—
cherry-pick
将某个分支的连续某几个commit合并到当前分支
git cherry-pick <commit-id-begin>.. <commit-id-end>
-
记录各种奇怪的bug和解决过程。
“事件簿”是因为debug时抽丝剥茧的过程和阅读推理小说有异曲同工之处。
-
参考教程:https://mp.weixin.qq.com/s/w_Z2ftOnb4VtB4jUaMF0fw
运行gdb:gdb 可执行文件,例如gdb /root/abacus-develop/build/abacus
用gdb调试程序:r (run)
断点:b 文件:行数,例如b /abacus/source/module_cell/module_symmetry/symmetry.cpp:1049
查看所有断点:i b (info breakpoints)(可以看到每个断点的编号)
删除断点:clear
删除特定断点:delete 断点编号。可以一次操作多个,比如delete 1-4
设置变量断点(当变量值改变时停下,显示下一行的内容):watch 变量名
查看变量的值
单次:p 变量名 或 print 变量名
每个断点都显示:display 变量名
查看显示列表: info display (可以看到每个显示项的编号)
取消显示:undisplay 编号
查看数组的值(p/print/display)
display *数组名@区间长度,例如 display *rotpos@12
继续,往下运行一步:n (next)
继续,直至下一个断点:c (continue)
查看调用堆栈:bt (backtrace),同where
-
梦开始的地方。
不必去追悼那有始无终的第一段工作,以及之后没能战胜内心抗拒导致失去的大半年。这一切连锁反应,杂乱无章,都可以视作铺垫,一切都是为了让4月的世界线收束来得更加激动人心。