{"id":20618597,"url":"https://github.com/allanchain/hartreefock-example","last_synced_at":"2025-07-14T17:40:49.740Z","repository":{"id":240519168,"uuid":"766363162","full_name":"AllanChain/HartreeFock-example","owner":"AllanChain","description":"An example python program solving Hartree-Fock equation","archived":false,"fork":false,"pushed_at":"2024-06-04T01:41:05.000Z","size":146,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-17T05:06:56.624Z","etag":null,"topics":["hartree-fock","quantum-chemistry"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AllanChain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-03T03:42:39.000Z","updated_at":"2024-06-15T02:20:06.000Z","dependencies_parsed_at":"2024-05-19T14:25:05.422Z","dependency_job_id":"a355da6f-fdc5-4c95-aa6d-6d0a0e90becb","html_url":"https://github.com/AllanChain/HartreeFock-example","commit_stats":null,"previous_names":["allanchain/hartreefock-example"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2FHartreeFock-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2FHartreeFock-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2FHartreeFock-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllanChain%2FHartreeFock-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AllanChain","download_url":"https://codeload.github.com/AllanChain/HartreeFock-example/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242277660,"owners_count":20101536,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hartree-fock","quantum-chemistry"],"created_at":"2024-11-16T12:08:59.618Z","updated_at":"2025-03-06T19:44:17.510Z","avatar_url":"https://github.com/AllanChain.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 闭壳层 Hartree--Fock 方程: Roothaan 方程\n\n本部分主要推导如何从 Hartree--Fock 方程出发, 得到求解限制性闭壳层体系的 Roothaan 方程, 从而对 $\\mathrm{HeH}^{+}$ 系统进行求解.\n\nHartree--Fock 方程可以写为\n```math\n\\hat{f}\\chi_{i}(\\mathbf{x})=\\epsilon_{i}\\chi_{i}(\\mathbf{x}),\\quad\\hat{f}=\\hat{h}+\\sum_{j=1}^{N}(\\hat{\\mathscr{J}}_{j}-\\hat{\\mathscr{K}}_{j}).\n```\n其中 $\\chi$ 表示自旋轨道, $\\hat{f}$ 为 Fock 算符, 它由芯哈密顿算符 $\\hat{h}$, 库仑算符 $\\hat{J}$, 以及交换算符 $\\hat{K}$ 给出. 它们各自的定义为\n```math\n\\begin{align}\n\\hat{h}\\chi_{i}(\\mathbf{x}) \u0026 =-\\frac{1}{2}\\nabla_{i}^{2}\\chi_{i}(\\mathbf{x}_{})+\\sum_{k}\\frac{Z_{k}}{|\\mathbf{r}_{i}-\\mathbf{r}_{k}|}\\chi_{i}(\\mathbf{x}),\\\\\n\\hat{\\mathscr{J}_{j}}\\chi_{i}(\\mathbf{x}) \u0026 =\\int\\mathrm{d}\\mathbf{x}'\\chi_{j}^{*}(\\mathbf{x}')\\chi_{j}(\\mathbf{x}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\chi_{i}(\\mathbf{x}),\\\\\n\\hat{\\mathscr{K}_{j}}\\chi_{i}(\\mathbf{x}) \u0026 =\\int\\mathrm{d}\\mathbf{x}'\\chi_{j}^{*}(\\mathbf{x}')\\chi_{i}(\\mathbf{x}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\chi_{j}(\\mathbf{x}).\n\\end{align}\n```\n\n\n为了使求解过程简化,我们假设每个空间轨道 $\\psi_{i}(\\mathbf{r})$ 都被自旋向上和向下的两个电子占据. 为了得到关于空间轨道的方程, 我们需要把自旋部分积分掉. 设 $\\chi_{i}(\\mathbf{x}\\_{i})=\\psi_{i}(\\mathbf{r}_{i})\\alpha(\\omega)$, 则\n```math\n\\begin{align}\n\\hat{f}\\psi_{i}(\\mathbf{r}) \u0026 =\\hat{h}\\psi_{i}(\\mathbf{r})+\\sum_{j=1}^{N}\\int\\mathrm{d}\\mathbf{x}'\\chi_{j}^{*}(\\mathbf{x}')\\chi_{j}(\\mathbf{x}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\psi_{i}(\\mathbf{r})\\nonumber \\\\\n \u0026 \\qquad-\\int\\mathrm{d}\\omega\\alpha^{*}(\\omega)\\sum_{j=1}^{N}\\int\\mathrm{d}\\mathbf{x}'\\chi_{j}^{*}(\\mathbf{x}')\\psi_{i}(\\mathbf{r}')\\alpha(\\omega')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\chi_{j}(\\mathbf{x}),\\\\\n \u0026 =\\hat{h}\\psi_{i}(\\mathbf{r})+2\\sum_{c=1}^{N/2}\\int\\mathrm{d}\\mathbf{r}'\\psi_{c}^{*}(\\mathbf{r}')\\psi_{c}(\\mathbf{r}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\psi_{i}(\\mathbf{r})\\nonumber \\\\\n \u0026 \\qquad-\\sum_{c=1}^{N/2}\\int\\mathrm{d}\\mathbf{r}'\\psi_{c}^{*}(\\mathbf{r}')\\psi_{i}(\\mathbf{r}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\psi_{c}(\\mathbf{r}).\n\\end{align}\n```\n于是\n```math\n\\begin{align}\n\\hat{f} \u0026 =\\hat{h}+\\sum_{c=1}^{N/2}(2\\hat{J}_{c}-\\hat{K}_{c}),\\\\\n\\hat{J_{c}}\\psi_{i}(\\mathbf{r}) \u0026 =\\int\\mathrm{d}\\mathbf{r}'\\psi_{c}^{*}(\\mathbf{r}')\\psi_{c}(\\mathbf{r}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\psi_{i}(\\mathbf{r}),\\\\\n\\hat{K_{c}}\\psi_{i}(\\mathbf{r}) \u0026 =\\int\\mathrm{d}\\mathbf{r}'\\psi_{c}^{*}(\\mathbf{r}')\\psi_{i}(\\mathbf{r}')\\frac{1}{|\\mathbf{r}_{i}-\\mathbf{r}_{j}|}\\psi_{c}(\\mathbf{r}).\n\\end{align}\n```\n\n\n引入 $K$ 个基函数 $\\phi_{\\nu}$, 则轨道波函数可以表示为\n```math\n\\psi_{i}=\\sum_{\\nu=1}^{K}C_{\\nu i}\\phi_{\\nu}.\n```\n代入第 (1) 式, 然后两边乘以 $\\phi_{\\mu}^{*}$ 并积分得到\n```math\n\\sum_{\\mu=1}^{K}C_{\\mu i}\\int\\mathrm{d}\\mathbf{r}\\phi_{\\mu}^{*}(\\mathbf{r})\\hat{f}\\phi_{\\nu}(\\mathbf{r})=\\epsilon_{i}\\sum_{\\mu=1}^{K}C_{\\mu i}\\int\\mathrm{d}\\mathbf{r}\\phi_{\\mu}^{*}(\\mathbf{r})\\phi_{\\nu}(\\mathbf{r}).\n```\n为了把方程写得更加紧凑, 我们定义重叠矩阵 $\\mathbf{S}$, Fock 矩阵 $\\mathbf{F}$, 系数矩阵 $\\mathbf{C}$, 能量矩阵 $\\boldsymbol{\\varepsilon}$\n```math\n\\begin{align}\nS_{\\mu\\nu} \u0026 =\\int\\mathrm{d}\\mathbf{r}\\phi_{\\mu}^{*}(\\mathbf{r})\\phi_{\\nu}(\\mathbf{r}),\\\\\nF_{\\mu\\nu} \u0026 =\\int\\mathrm{d}\\mathbf{r}\\phi_{\\mu}^{*}(\\mathbf{r})\\hat{f}\\phi_{\\nu}(\\mathbf{r}),\\\\\n\\varepsilon_{ij} \u0026 =\\epsilon_{i}\\delta_{ij}.\n\\end{align}\n```\n从而得到 Roothan 方程\n```math\n\\mathbf{FC}=\\mathbf{SC}\\boldsymbol{\\varepsilon}.\n```\n\n\n其中, Fock 矩阵 $\\mathbf{F}$ 是由系数矩阵 $\\mathbf{C}$ 得到的, 所以这是一个需要自洽迭代求解的方程. 为了将它们的关系更明确地写出来, 我们需要引入密度矩阵\n```math\nP_{\\mu\\nu}=2\\sum_{c}^{N/2}C_{\\mu c}C_{\\nu c}^{*}.\n```\n它与密度的关系为\n```math\n\\rho(\\mathbf{r})=\\sum_{\\mu\\nu}P_{\\mu\\nu}\\phi_{\\mu}(\\mathbf{r})\\phi_{\\nu}(\\mathbf{r}).\n```\n于是 Fock 矩阵就可以写为\n```math\nF_{\\mu\\nu}=H_{\\mu\\nu}^{\\text{core}}+\\sum_{\\lambda\\sigma}P_{\\lambda\\sigma}\\left[(\\mu\\nu|\\sigma\\lambda)-\\frac{1}{2}(\\mu\\lambda|\\sigma\\nu)\\right].\n```\n其中 $H_{\\mu\\nu}^{\\text{core}}$ 为芯哈密顿量矩阵\n```math\nH_{\\mu\\nu}^{\\text{core}}=\\int\\mathrm{d}\\mathbf{r}\\phi_{\\mu}^{*}(\\mathbf{r})\\hat{h}\\phi_{\\nu}(\\mathbf{r}).\n```\n而 $(\\mu\\nu|\\sigma\\lambda)$ 是双电子积分\n```math\n(\\mu\\nu|\\sigma\\lambda)=\\int\\mathrm{d}\\mathbf{r}\\int\\mathrm{d}\\mathbf{r}'\\phi_{\\mu}^{*}(\\mathbf{r})\\phi_{\\nu}(\\mathbf{r})\\frac{1}{|\\mathbf{r}-\\mathbf{r}'|}\\phi_{\\sigma}^{*}(\\mathbf{r}')\\phi_{\\lambda}(\\mathbf{r}').\n```\n\n\n如果使用的是高斯型基组, 那么双电子积分、芯哈密顿量积分、重叠积分都可以利用相应的公式快速得到. 我们也可以基于 Fock 矩阵得到系统的电子的总能量\n```math\nE_{0}=\\frac{1}{2}\\sum_{\\mu}\\sum_{\\nu}P_{\\mu\\nu}(H_{\\mu\\nu}^{\\text{core}}+F_{\\mu\\nu}).\n```\n\n\n# 闭壳层 Hartree--Fock 求解算法\n\n为了更方便地求解 Roothaan 方程, 我们可以把它进一步简化为一个本征值问题\n```math\n\\mathbf{F}'\\mathbf{C}'=\\mathbf{C}'\\boldsymbol{\\varepsilon}.\n```\n其中 $\\mathbf{C}'=\\mathbf{X}^{-1}\\mathbf{C}$, $\\mathbf{F}'=\\mathbf{X}^{\\dagger}\\mathbf{F}\\mathbf{X}$. 而 **$\\mathbf{X}$** 是一个变换矩阵, 它把重叠矩阵正交化为一个单位矩阵 $\\mathbf{X}^{\\dagger}\\mathbf{S}\\mathbf{X}=\\mathbf{1}$. 由于 $\\mathbf{S}$ 是厄米的, 我们总可以对角化得到一个酉矩阵 $\\mathbf{U}$ 使得 $\\mathbf{U}\\mathbf{S}\\mathbf{U}^{\\dagger}=\\mathbf{s}$ 对角. 那么我们可以选择变换矩阵\n```math\nX_{ij}=U_{ij}/s_{j}^{1/2}.\n```\n\n\n至此我们就可以完整地给出对于 $\\mathrm{HeH}^{+}$ 系统的闭壳层 Hartree--Fock 自洽求解算法了:\n\n1.  从基组文件中读取 $\\mathrm{H}$ 和 $\\mathrm{He}$ 的基组信息 (高斯函数的指数和叠加系数)\n\n2.  计算双电子积分 $(\\mu\\nu|\\sigma\\lambda)$、芯哈密顿量矩阵 $H_{\\mu\\nu}^{\\text{core}}$、重叠积分 $\\mathbf{S}$\n\n3.  计算变换矩阵 $\\mathbf{X}$\n\n4.  猜测密度矩阵 $P_{\\mu\\nu}=0$\n\n5.  利用密度矩阵 $\\mathbf{P}$ 和之前计算好的积分计算 Fock 矩阵\n\n6.  计算变换后的 Fock 矩阵 $\\mathbf{F}'=\\mathbf{X}^{\\dagger}\\mathbf{F}\\mathbf{X}$\n\n7.  求解本征值问题, 得到 $\\mathbf{C}'$ 和 $\\boldsymbol{\\varepsilon}$\n\n8.  用 $\\mathbf{C}=\\mathbf{X}\\mathbf{C}'$ 构造新芯密度矩阵 $\\mathbf{P}$\n\n9.  计算体系的电子总能 $E_{0}$\n\n10. 判断密度矩阵和总能是否收敛. 若收敛则结束自洽流程, 否则回到第 5 步\n\n# 程序输出结果\n\n    ==============================\n          Constant Matrices\n    ==============================\n    Overlap matrix S:\n    [[1.         0.53681935]\n     [0.53681935 1.        ]]\n\n    Kinetic matrix T:\n    [[0.76003188 0.19744319]\n     [0.19744319 1.41176317]]\n\n    Potential matrix V_{ne}:\n    [[-2.49185755 -1.6292717 ]\n     [-1.6292717  -4.01004618]]\n\n    Two-electron integral V_{ee}:\n    [[[[0.77460594 0.37025079]\n       [0.37025079 0.61142525]]\n\n      [[0.35123656 0.2239145 ]\n       [0.2239145  0.45350297]]]\n\n\n     [[[0.3928327  0.22598329]\n       [0.22598329 0.43937276]]\n\n      [[0.60909675 0.44585886]\n       [0.44585886 1.05571294]]]]\n\n    ==============================\n           Start Iteration\n    ==============================\n    [iter  0] Electron total energy: 0.000000\n    [iter  1] Electron total energy: -4.164218\n    [iter  2] Electron total energy: -4.203401\n    [iter  3] Electron total energy: -4.205855\n    [iter  4] Electron total energy: -4.206048\n    [iter  5] Electron total energy: -4.206074\n    [iter  6] Electron total energy: -4.206078\n    [iter  7] Electron total energy: -4.206079\n    [iter  8] Electron total energy: -4.206080\n    Total energy: -2.839212\n    Orbital energies: [-1.62740772 -0.11414291]\n\n![Density plot](density.jpg)\n\n$\\mathrm{HeH}+$ 系统的电子密度分布图. 左边的黄点表示氢原子, 右边的黄点表示氦原子. 此图仅展示了 $z = 0$ 的截面.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallanchain%2Fhartreefock-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallanchain%2Fhartreefock-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallanchain%2Fhartreefock-example/lists"}