10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-06-19 19:52:06 +02:00
QCaml/Notebooks/F12_matrix.ipynb

6024 lines
217 KiB
Plaintext
Raw Normal View History

2019-11-30 10:41:07 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test of F12 matrix elements"
]
},
{
2019-12-02 14:58:48 +01:00
"cell_type": "markdown",
2019-11-30 10:41:07 +01:00
"metadata": {},
2019-12-02 14:58:48 +01:00
"source": [
"## Initialization"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 65,
2019-12-03 09:13:57 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val png_image : string -> unit = <fun>\n"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Raised at file \"stdlib.ml\", line 34, characters 25-45\n",
"Called from file \"toplevel/toploop.ml\", line 468, characters 4-128\n",
"Called from file \"toplevel/topdirs.ml\", line 144, characters 10-51\n",
"\n",
"- : unit = ()\n",
"Findlib has been successfully loaded. Additional directives:\n",
" #require \"package\";; to load a package\n",
" #list;; to list the available packages\n",
" #camlp4o;; to load camlp4 (standard syntax)\n",
" #camlp4r;; to load camlp4 (revised syntax)\n",
" #predicates \"p,q,...\";; to set these predicates\n",
" Topfind.reset();; to force that packages will be reloaded\n",
" #thread;; to enable threads\n",
"\n",
"- : unit = ()\n"
]
},
{
"data": {
"text/plain": [
"val png_image : string -> Jupyter_notebook.display_id = <fun>\n"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
2019-11-30 10:41:07 +01:00
"source": [
2020-01-06 19:43:55 +01:00
"let png_image = print_endline ;;\n",
"\n",
"(* --------- *)\n",
"\n",
2019-11-30 10:41:07 +01:00
"#cd \"/home/scemama/QCaml\";;\n",
"#use \"topfind\";;\n",
"#require \"jupyter.notebook\";;\n",
"\n",
2019-12-03 18:52:03 +01:00
"let png_image name = \n",
" Jupyter_notebook.display_file ~base64:true \"image/png\" (\"Notebooks/images/\"^name)\n",
";;\n",
"\n",
2019-12-03 14:40:08 +01:00
"#require \"lacaml.top\";;\n",
2019-11-30 10:41:07 +01:00
"#require \"alcotest\";;\n",
2019-12-02 14:58:48 +01:00
"#require \"str\";;\n",
"#require \"bigarray\";;\n",
2019-11-30 10:41:07 +01:00
"#require \"zarith\";;\n",
"#require \"getopt\";;\n",
"#directory \"_build\";;\n",
"#directory \"_build/Basis\";;\n",
"#directory \"_build/CI\";;\n",
"#directory \"_build/MOBasis\";;\n",
"#directory \"_build/Nuclei\";;\n",
"#directory \"_build/Parallel\";;\n",
"#directory \"_build/Perturbation\";;\n",
"#directory \"_build/SCF\";;\n",
2019-12-02 14:58:48 +01:00
"#directory \"_build/Utils\";;"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2020-01-06 19:43:55 +01:00
"### Modules"
2019-12-02 14:58:48 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 66,
2019-12-02 14:58:48 +01:00
"metadata": {},
"outputs": [],
"source": [
2019-11-30 10:41:07 +01:00
"#load \"Constants.cmo\";;\n",
"#load_rec \"Util.cma\";;\n",
"#load_rec \"Matrix.cmo\";;\n",
"#load_rec \"Simulation.cmo\";;\n",
2019-12-03 12:25:31 +01:00
"#load_rec \"Spindeterminant.cmo\";;\n",
"#load_rec \"Determinant.cmo\";;\n",
2019-12-02 14:58:48 +01:00
"#load_rec \"HartreeFock.cmo\";;\n",
2019-12-03 09:13:57 +01:00
"#load_rec \"MOBasis.cmo\";;\n",
2020-01-06 19:43:55 +01:00
"#load_rec \"F12CI.cmo\";;"
2019-12-02 14:58:48 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Printers"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 67,
2019-12-02 14:58:48 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val pp_mo : Format.formatter -> MOBasis.t -> unit = <fun>\n"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-02 14:58:48 +01:00
"source": [
"#install_printer AngularMomentum.pp_string ;;\n",
"#install_printer Basis.pp ;;\n",
"#install_printer Charge.pp ;;\n",
"#install_printer Coordinate.pp ;;\n",
"#install_printer Vector.pp;;\n",
"#install_printer Matrix.pp;;\n",
"#install_printer Util.pp_float_2darray;;\n",
"#install_printer Util.pp_float_array;;\n",
"#install_printer Util.pp_matrix;;\n",
"#install_printer HartreeFock.pp ;;\n",
2019-12-03 09:13:57 +01:00
"#install_printer Fock.pp ;;\n",
2019-12-03 12:25:31 +01:00
"#install_printer MOClass.pp ;;\n",
"let pp_mo ppf t = MOBasis.pp ~start:1 ~finish:0 ppf t ;;\n",
"#install_printer pp_mo;;\n",
2019-12-20 16:09:02 +01:00
"(*\n",
2019-12-03 12:25:31 +01:00
"#install_printer DeterminantSpace.pp;;\n",
2019-12-20 16:09:02 +01:00
"*)\n",
2019-12-03 12:25:31 +01:00
"#install_printer SpindeterminantSpace.pp;;\n",
2020-01-06 19:43:55 +01:00
"#install_printer Bitstring.pp;;\n",
"\n",
"(* --------- *)\n",
"\n",
"open Lacaml.D\n"
2019-11-30 10:41:07 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-02 14:58:48 +01:00
"## Run"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simulation\n"
2019-11-30 10:41:07 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 68,
2019-12-03 18:52:03 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val basis_filename : string = \"/home/scemama/qp2/data/basis/6-31g\"\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val aux_basis_filename : string = \"/home/scemama/qp2/data/basis/cc-pvdz\"\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val nuclei : Nuclei.t = [|(Element.C, 0.0000 0.0000 0.0000)|]\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val frozen_core : bool = false\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val multiplicity : int = 1\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val state : int = 1\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val basis : Basis.t =\n",
" \n",
" Atomic Basis set\n",
" ----------------\n",
"\n",
"-----------------------------------------------------------------------\n",
" # Angular Coordinates (Bohr) Exponents Coefficients\n",
" Momentum X Y Z\n",
"-----------------------------------------------------------------------\n",
" 1-3 S 0.0000 0.0000 0.0000 3.04752490e+03 1.83470000e-03\n",
" 4.57369510e+02 1.40373000e-02\n",
" 1.03948690e+02 6.88426000e-02\n",
" 2.92101550e+01 2.32184400e-01\n",
" 9.28666300e+00 4.67941300e-01\n",
" 3.16392700e+00 3.62312000e-01\n",
" \n",
" 7.86827240e+00 -1.19332400e-01\n",
" 1.88128850e+00 -1.60854200e-01\n",
" 5.44249300e-01 1.14345640e+00\n",
" \n",
" 1.68714400e-01 1.00000000e+00\n",
" \n",
" \n",
"-----------------------------------------------------------------------\n",
" 3-8 P 0.0000 0.0000 0.0000 7.86827240e+00 6.89991000e-02\n",
" 1.88128850e+00 3.16424000e-01\n",
" 5.44249300e-01 7.44308300e-01\n",
" \n",
" 1.68714400e-01 1.00000000e+00\n",
" \n",
" \n",
"-----------------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val aux_basis : Basis.t =\n",
" \n",
" Atomic Basis set\n",
" ----------------\n",
"\n",
"-----------------------------------------------------------------------\n",
" # Angular Coordinates (Bohr) Exponents Coefficients\n",
" Momentum X Y Z\n",
"-----------------------------------------------------------------------\n",
" 1-6 S 0.0000 0.0000 0.0000 3.04752490e+03 1.83470000e-03\n",
" 4.57369510e+02 1.40373000e-02\n",
" 1.03948690e+02 6.88426000e-02\n",
" 2.92101550e+01 2.32184400e-01\n",
" 9.28666300e+00 4.67941300e-01\n",
" 3.16392700e+00 3.62312000e-01\n",
" \n",
" 7.86827240e+00 -1.19332400e-01\n",
" 1.88128850e+00 -1.60854200e-01\n",
" 5.44249300e-01 1.14345640e+00\n",
" \n",
" 1.68714400e-01 1.00000000e+00\n",
" \n",
" 6.66500000e+03 6.92000000e-04\n",
" 1.00000000e+03 5.32900000e-03\n",
" 2.28000000e+02 2.70770000e-02\n",
" 6.47100000e+01 1.01718000e-01\n",
" 2.10600000e+01 2.74740000e-01\n",
" 7.49500000e+00 4.48564000e-01\n",
" 2.79700000e+00 2.85074000e-01\n",
" 5.21500000e-01 1.52040000e-02\n",
" \n",
" 6.66500000e+03 -1.46000000e-04\n",
" 1.00000000e+03 -1.15400000e-03\n",
" 2.28000000e+02 -5.72500000e-03\n",
" 6.47100000e+01 -2.33120000e-02\n",
" 2.10600000e+01 -6.39550000e-02\n",
" 7.49500000e+00 -1.49981000e-01\n",
" 2.79700000e+00 -1.27262000e-01\n",
" 5.21500000e-01 5.44529000e-01\n",
" \n",
" 1.59600000e-01 1.00000000e+00\n",
" \n",
" \n",
"-----------------------------------------------------------------------\n",
" 3-14 P 0.0000 0.0000 0.0000 7.86827240e+00 6.89991000e-02\n",
" 1.88128850e+00 3.16424000e-01\n",
" 5.44249300e-01 7.44308300e-01\n",
" \n",
" 1.68714400e-01 1.00000000e+00\n",
" \n",
" 9.43900000e+00 3.81090000e-02\n",
" 2.00200000e+00 2.09480000e-01\n",
" 5.45600000e-01 5.08557000e-01\n",
" \n",
" 1.51700000e-01 1.00000000e+00\n",
" \n",
" \n",
"-----------------------------------------------------------------------\n",
" 19-24 D 0.0000 0.0000 0.0000 5.50000000e-01 1.00000000e+00\n",
" \n",
" \n",
"-----------------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val f12 : F12factor.t =\n",
" {F12factor.expo_s = 1.;\n",
" gaussian =\n",
" {GaussianOperator.coef_g =\n",
" [ -0.314400 -0.303700 -0.168100 -0.098110 -0.060240 -0.037260 ];\n",
" expo_sg =\n",
" [ 0.220900 1.004000 3.622000 12.160000 45.870000 254.400000 ];\n",
" expo_sg_inv =\n",
" [ 4.526935 0.996016 0.276091 0.082237 0.021801 0.003931 ]}}\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val charge : int = 0\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val simulation : Simulation.t = <abstr>\n"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
2019-11-30 10:41:07 +01:00
"source": [
2019-12-20 16:09:02 +01:00
"let basis_filename = \"/home/scemama/qp2/data/basis/6-31g\" \n",
"let aux_basis_filename = \"/home/scemama/qp2/data/basis/cc-pvdz\" \n",
2019-12-17 19:03:55 +01:00
"let nuclei = Nuclei.of_zmt_string \"c\" \n",
2019-12-03 12:25:31 +01:00
"let frozen_core = false\n",
2019-12-03 09:13:57 +01:00
"let multiplicity = 1\n",
"let state = 1\n",
2019-11-30 10:41:07 +01:00
"\n",
2019-12-02 14:58:48 +01:00
"let basis = Basis.of_nuclei_and_basis_filenames ~nuclei [basis_filename] \n",
"let aux_basis = Basis.of_nuclei_and_basis_filenames ~nuclei (basis_filename :: aux_basis_filename :: []) \n",
"let f12 = F12factor.gaussian_geminal 1.0 \n",
"let charge = 0 \n",
2019-11-30 10:41:07 +01:00
"\n",
"\n",
"let simulation =\n",
2019-12-02 14:58:48 +01:00
" Simulation.make \n",
" ~f12 ~charge ~multiplicity ~nuclei\n",
" ~cartesian:true\n",
" basis\n"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 6,
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val n_elec_alfa : int = 3\n",
"val n_elec_beta : int = 3\n",
"val n_elec : int = 6\n"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let n_elec_alfa, n_elec_beta, n_elec = \n",
" let e = Simulation.electrons simulation in\n",
" Electrons.(n_alfa e, n_beta e, n_elec e)"
]
},
2019-12-02 14:58:48 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-03 09:13:57 +01:00
"### Hartree-Fock"
2019-11-30 10:41:07 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 69,
2019-11-30 10:41:07 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"15 significant shell pairs computed in 0.016332 seconds\n",
"1\n",
"2\n",
"5\n",
"6\n",
"Computed ERIs in 0.046598 seconds\n",
"MOs =\n",
"\n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0.996612 -0.227167 -0 -0 0\n",
" 2 0.0192375 0.476116 -0 -0 2.6158E-15\n",
" 3 0 2.03898E-15 -0.311528 0.112708 0.385089\n",
" ... ... ... ... ...\n",
" 7 0 -1.27056E-15 -0.2512 0.160842 0.549548\n",
" 8 0 -3.86977E-16 0.0682945 0.640967 -0.133725\n",
" 9 0 -2.94182E-16 0.430493 -0.00783052 0.341885\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 -0 0.0754634 -4.03636E-15 -5.48678E-15\n",
" 2 2.47356E-15 -1.66012 9.26322E-14 1.31026E-13\n",
" 3 0.521643 9.10799E-14 0.273858 0.935677\n",
" ... ... ... ...\n",
" 7 -0.553226 -8.12878E-14 -0.248658 -0.849577\n",
" 8 0.150407 -3.91558E-14 -0.990908 0.206736\n",
" 9 0.948091 -3.91643E-14 0.0121041 -0.52854\n",
" \n"
]
},
{
"data": {
"text/plain": [
"val hf : HartreeFock.t = \n",
"======================================================================\n",
" Restricted Hartree-Fock \n",
"======================================================================\n",
"\n",
" ------------------------------------------------------------\n",
" # HF energy Convergence HOMO-LUMO\n",
" ------------------------------------------------------------\n",
" 1 -36.54848161 7.4861e-01 0.2723\n",
" 2 -37.55037352 1.9776e-01 0.4104\n",
" 3 -37.58727938 3.0130e-02 0.4115\n",
" 4 -37.58813705 7.2124e-03 0.4099\n",
" 5 -37.58819378 2.3539e-03 0.4094\n",
" 6 -37.58820226 1.0327e-03 0.4092\n",
" 7 -37.58820371 4.5157e-04 0.4091\n",
" 8 -37.58820396 1.9102e-04 0.4091\n",
" 9 -37.58820401 8.0044e-05 0.4091\n",
" 10 -37.58820402 3.3447e-05 0.4091\n",
" ------------------------------------------------------------\n",
"\n",
"\n",
" ============================================================\n",
" One-electron energy -50.3759860187\n",
" Kinetic 37.5972073815\n",
" Potential -87.9731934002\n",
" -------------------------------------------------------- \n",
" Two-electron energy 12.7877820020\n",
" Coulomb 17.8173369652\n",
" Exchange -5.0295549632\n",
" -------------------------------------------------------- \n",
" HF HOMO -9.3108539820\n",
" HF LUMO 1.8212205669\n",
" HF LUMO-LUMO 11.1320745489\n",
" -------------------------------------------------------- \n",
" Electronic energy -37.5882040167\n",
" Nuclear repulsion 0.0000000000\n",
" Hartree-Fock energy -37.5882040167\n",
" ============================================================\n",
" \n",
"\n"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mo_basis : MOBasis.t =\n",
" Eigenvalues: -11.348496 -0.709564 -0.342166 0.066926 0.066926 \n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0.996612 -0.227167 -0 -0 0\n",
" 2 0.0192375 0.476116 -0 -0 2.6158E-15\n",
" 3 0 2.03898E-15 -0.311528 0.112708 0.385089\n",
" ... ... ... ... ...\n",
" 7 0 -1.27056E-15 -0.2512 0.160842 0.549548\n",
" 8 0 -3.86977E-16 0.0682945 0.640967 -0.133725\n",
" 9 0 -2.94182E-16 0.430493 -0.00783052 0.341885\n",
" \n",
" Eigenvalues: 0.758670 0.787535 0.789515 0.789515 \n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 -0 0.0754634 -4.03636E-15 -5.48678E-15\n",
" 2 2.47356E-15 -1.66012 9.26322E-14 1.31026E-13\n",
" 3 0.521643 9.10799E-14 0.273858 0.935677\n",
" ... ... ... ...\n",
" 7 -0.553226 -8.12878E-14 -0.248658 -0.849577\n",
" 8 0.150407 -3.91558E-14 -0.990908 0.206736\n",
" 9 0.948091 -3.91643E-14 0.0121041 -0.52854\n",
" \n",
" \n"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-02 14:58:48 +01:00
"source": [
2020-01-06 19:43:55 +01:00
"let hf = HartreeFock.make ~guess:`Hcore ~max_scf:10 simulation ;;\n",
2019-12-03 09:13:57 +01:00
"\n",
"let mo_basis = MOBasis.of_hartree_fock hf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-03 12:25:31 +01:00
"# FCI-F12"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notations:\n",
"\n",
"* $\\langle ij || kl \\rangle = \\int \\phi_i(r_1) \\phi_j(r_2) \\frac{1}{r_{12}} \\phi_k(r1) \\phi_l(r2) $ \n",
"* $\\left[ ij || kl \\right] = \\int \\phi_i(r_1) \\phi_j(r_2) f_{12} \\phi_k(r1) \\phi_l(r2) $ \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Common functions"
2019-12-02 14:58:48 +01:00
]
2019-11-30 10:41:07 +01:00
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 70,
2019-12-03 18:52:03 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val f12 : F12factor.t =\n",
" {F12factor.expo_s = 1.;\n",
" gaussian =\n",
" {GaussianOperator.coef_g =\n",
" [ -0.314400 -0.303700 -0.168100 -0.098110 -0.060240 -0.037260 ];\n",
" expo_sg =\n",
" [ 0.220900 1.004000 3.622000 12.160000 45.870000 254.400000 ];\n",
" expo_sg_inv =\n",
" [ 4.526935 0.996016 0.276091 0.082237 0.021801 0.003931 ]}}\n"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mo_num : int = 9\n"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val pp_spindet : Format.formatter -> Spindeterminant.t -> unit = <fun>\n"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val pp_det : Format.formatter -> Determinant.t -> unit = <fun>\n"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 12:25:31 +01:00
"source": [
"let f12 = Util.of_some @@ Simulation.f12 simulation \n",
"\n",
"let mo_num = MOBasis.size mo_basis \n",
"\n",
"let pp_spindet = Spindeterminant.pp mo_num\n",
"\n",
"let pp_det = Determinant.pp mo_num\n",
"\n",
";;\n",
"\n",
"#install_printer pp_spindet ;;\n",
"#install_printer pp_det ;;\n",
"\n"
]
},
{
2019-12-03 14:40:08 +01:00
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 71,
2019-12-03 12:25:31 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val simulation_aux : Simulation.t = <abstr>\n"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"66 significant shell pairs computed in 0.062429 seconds\n",
"1\n",
"2\n",
"5\n",
"6\n",
"9\n",
"10\n",
"11\n",
"12\n",
"15\n",
"18\n",
"Computed ERIs in 0.799183 seconds\n"
]
},
{
"data": {
"text/plain": [
"val aux_basis : MOBasis.t =\n",
" Eigenvalues: -11.348496 -0.709564 -0.342166 0.066926 0.066926 \n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0.996612 -0.227167 -1.55889E-11 -6.35567E-12 -1.34954E-12\n",
" 2 0.0192375 0.476116 -3.63701E-12 2.3503E-12 -1.30322E-12\n",
" 3 -1.94978E-12 1.78028E-12 -0.311528 0.112708 0.385089\n",
" ... ... ... ... ...\n",
" 22 0 0 -0 0 -0\n",
" 23 0 0 -0 0 -0\n",
" 24 0 0 -0 0 -0\n",
" \n",
" Eigenvalues: 0.758670 0.787535 0.789515 0.789515 1.401263 \n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 -- -- 10 --\n",
" 1 1.68715E-11 0.0754634 -3.20267E-12 -2.55841E-12 5.89356E-13\n",
" 2 2.50504E-12 -1.66012 5.42225E-13 5.5698E-12 4.15278E-13\n",
" 3 0.521643 9.98939E-13 0.273858 0.935677 -1.60551E-12\n",
" ... ... ... ... ...\n",
" 22 0 0 0 -0 0.866025\n",
" 23 0 0 0 -0 -0\n",
" 24 5.34208E-16 0 -5.0103E-16 -5.16533E-16 -0\n",
" \n",
" Eigenvalues: 1.041443 1.042290 1.054347 1.485261 25.739829 \n",
" -- 11 -- -- 12 -- -- 13 -- -- 14 -- -- 15 --\n",
" 1 -5.48487E-10 -1.11498E-09 6.09785E-10 5.77229 1.19123E-08\n",
" 2 -1.94824E-10 3.47045E-11 4.11571E-12 -21.703 -1.7907E-09\n",
" 3 -9.41452 3.69747 -0.652915 2.28355E-11 -103.655\n",
" ... ... ... ... ...\n",
" 22 0 2.26934E-14 3.81775E-14 0 4.22204E-13\n",
" 23 0 -0 -0 0 0\n",
" 24 1.19652E-14 -4.56971E-14 -7.36206E-14 0 -8.2604E-13\n",
" \n",
" Eigenvalues: 25.783000 25.748833 17.771759 378.085285 1.415838 \n",
" -- 16 -- -- 17 -- -- 18 -- -- 19 -- -- 20 --\n",
" 1 -1.21774E-08 -2.0721E-08 20.5865 436.893 -8.50365E-11\n",
" 2 -3.08075E-09 -3.38443E-10 -125.907 -12.7961 3.11494E-12\n",
" 3 -138.626 11.0904 3.97511E-09 -1.32873E-09 -7.82399E-11\n",
" ... ... ... ... ...\n",
" 22 -5.42356E-13 5.36689E-13 -0 0 0.499656\n",
" 23 0 0 -0 0 3.09005E-06\n",
" 24 1.06385E-12 -1.07453E-12 -0 0 -0.999313\n",
" \n",
" Eigenvalues: 1.404881 1.410962 1.410166 \n",
" -- 21 -- -- 22 -- -- 23 --\n",
" 1 3.87235E-12 -1.73871E-12 3.46244E-11\n",
" 2 -1.41864E-13 6.38182E-14 -1.23539E-12\n",
" 3 -2.83484E-12 -3.14844E-12 0\n",
" ... ... ...\n",
" 22 -0.0166614 0.0081182 -1.77664E-05\n",
" 23 0.000220122 0.00245004 0.999997\n",
" 24 0.0333229 -0.0162364 3.55327E-05\n",
" \n",
" \n"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val aux_num : int = 23\n"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 12:25:31 +01:00
"source": [
"let simulation_aux = \n",
" let charge = Charge.to_int @@ Simulation.charge simulation \n",
" and multiplicity = Electrons.multiplicity @@ Simulation.electrons simulation\n",
" and nuclei = Simulation.nuclei simulation\n",
" in\n",
" let general_basis = \n",
" Basis.general_basis @@ Simulation.basis simulation\n",
" in\n",
" GeneralBasis.combine [\n",
" general_basis ; GeneralBasis.read aux_basis_filename\n",
" ]\n",
" |> Basis.of_nuclei_and_general_basis nuclei\n",
" |> Simulation.make ~f12 ~charge ~multiplicity ~nuclei \n",
"\n",
"\n",
"let aux_basis = \n",
" MOBasis.of_mo_basis simulation_aux mo_basis\n",
2019-12-03 18:52:03 +01:00
"\n",
"let aux_num = \n",
" MOBasis.size aux_basis\n"
2019-12-03 14:40:08 +01:00
]
},
{
2019-12-04 18:13:54 +01:00
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 72,
2019-12-03 14:40:08 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"66 significant shell pairs computed in 1.000310 seconds\n",
"1\n",
"2\n",
"5\n",
"6\n",
"9\n",
"10\n",
"11\n",
"12\n",
"15\n",
"18\n",
"Computed ERIs in 18.798852 seconds\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"4-idx transformation \n",
"23 / 23\n",
"4-idx transformation \n",
"23 / 23\n"
]
}
],
2019-12-03 14:40:08 +01:00
"source": [
2019-12-03 12:25:31 +01:00
"let () = ignore @@ MOBasis.f12_ints aux_basis\n",
2019-12-03 14:40:08 +01:00
"let () = ignore @@ MOBasis.two_e_ints aux_basis"
2019-12-03 12:25:31 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-04 18:13:54 +01:00
"## Integral-based functions"
2019-12-03 12:25:31 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-03 18:52:03 +01:00
"\\begin{equation}\n",
"\\langle I | \\hat{H} | J \\rangle = \\begin{cases}\n",
2019-12-03 12:25:31 +01:00
"\\sum_i h_{ii} + \\frac{1}{2} \\sum_{ij} \\langle ij || ij \\rangle \\text{ when } |J\\rangle = |I\\rangle \\\\\n",
"h_{ik} + \\sum_{j} \\langle ij || kj \\rangle \\text{ when } |J\\rangle = \\hat{T}_i^k |I\\rangle \\\\\n",
"\\langle ij || kl \\rangle \\text{ when } |J\\rangle = \\hat{T}_{ij}^{kl} |I\\rangle \\\\\n",
2019-12-03 18:52:03 +01:00
"\\end{cases}\n",
"\\end{equation}\n",
2019-12-03 12:25:31 +01:00
"\n",
"\n",
2019-12-03 18:52:03 +01:00
"\\begin{equation}\n",
"\\langle I | \\hat{F} | J \\rangle = \\begin{cases}\n",
2019-12-03 12:25:31 +01:00
"\\sum_i f_{ii} + \\frac{1}{2} \\sum_{ij} \\langle ij || ij \\rangle \\text{ when } |J\\rangle = |I\\rangle \\\\\n",
"f_{ik} + \\sum_{j} \\langle ij || kj \\rangle \\text{ when } |J\\rangle = \\hat{T}_i^k |I\\rangle \\\\\n",
"\\langle ij || kl \\rangle \\text{ when } |J\\rangle = \\hat{T}_{ij}^{kl} |I\\rangle \\\\\n",
2019-12-03 18:52:03 +01:00
"\\end{cases}\n",
"\\end{equation}"
2019-12-03 12:25:31 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 11,
2019-12-03 12:25:31 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val cancel_singles : bool = false\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mos_cabs : int list =\n",
" [10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21; 22; 23]\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mos_abs : int list =\n",
" [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21;\n",
" 22; 23]\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mos_in : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mos_a : Determinant.t -> int list = <fun>\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val mos_b : Determinant.t -> int list = <fun>\n"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 09:13:57 +01:00
"source": [
2019-12-03 12:25:31 +01:00
"let cancel_singles = false \n",
"\n",
2019-12-04 18:13:54 +01:00
"let mos_cabs = \n",
" Util.list_range (mo_num+1) aux_num\n",
" \n",
2019-12-05 16:16:00 +01:00
"let mos_abs = \n",
" Util.list_range 1 aux_num\n",
" \n",
2019-12-04 18:13:54 +01:00
"let mos_in = \n",
" Util.list_range 1 mo_num\n",
2019-12-03 12:25:31 +01:00
"\n",
2019-12-04 18:13:54 +01:00
"let mos_a k =\n",
" Determinant.alfa k\n",
" |> Spindeterminant.to_list\n",
" \n",
"let mos_b k =\n",
" Determinant.beta k\n",
" |> Spindeterminant.to_list\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### H integrals"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 12,
2019-12-04 18:13:54 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val h_one : int -> int -> '_weak1 -> float = <fun>\n"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val h_two : int -> int -> int -> int -> Spin.t -> Spin.t -> float = <fun>\n"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-04 18:13:54 +01:00
"source": [
"let h_one =\n",
" let h = \n",
" MOBasis.one_e_ints aux_basis\n",
" in fun i j _ -> h.{i,j}\n",
2019-12-03 12:25:31 +01:00
" \n",
2019-12-04 18:13:54 +01:00
"let h_two = \n",
" let two_e_ints = MOBasis.two_e_ints aux_basis in\n",
" let h2 i j k l (s:Spin.t) (s':Spin.t) =\n",
" if s' <> s then\n",
" ERI.get_phys two_e_ints i j k l\n",
" else\n",
" (ERI.get_phys two_e_ints i j k l) -. \n",
" (ERI.get_phys two_e_ints i j l k)\n",
" in\n",
" h2\n",
"\n",
" \n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### F12 integrals"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 13,
2019-12-04 18:13:54 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val f_two : int -> int -> int -> int -> Spin.t -> Spin.t -> float = <fun>\n"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val f_one : 'a -> 'b -> 'c -> float = <fun>\n"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-04 18:13:54 +01:00
"source": [
"let f_two = \n",
" let two_e_ints = MOBasis.f12_ints aux_basis in\n",
" let f2 i j k l (s:Spin.t) (s':Spin.t) =\n",
" if s' <> s then\n",
" 0.5 *. F12.get_phys two_e_ints i j k l\n",
" else\n",
" 0.5 *. (\n",
" (F12.get_phys two_e_ints i j k l) -. \n",
" (F12.get_phys two_e_ints i j l k) )\n",
" in\n",
" let f3 i j k l (s:Spin.t) (s':Spin.t) = \n",
" if (i=k && j<>l) || (j=l && i<>k) then\n",
" 0.\n",
2019-12-03 12:25:31 +01:00
" else\n",
2019-12-04 18:13:54 +01:00
" f2 i j k l s s'\n",
2019-12-03 12:25:31 +01:00
" in\n",
2019-12-04 18:13:54 +01:00
" if cancel_singles then f3 else f2\n",
"\n",
"let f_one = fun _ _ _ -> 0.\n",
"\n",
"(*\n",
"let f_two = h_two\n",
"\n",
"let f_one = h_one\n",
"*)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Determinant-based functions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Integrals"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 14,
2019-12-04 18:13:54 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val f12_integrals :\n",
" 'a ->\n",
" ('b -> 'c -> 'd -> float) *\n",
" (int -> int -> int -> int -> Spin.t -> Spin.t -> float) * 'e option = <fun>\n"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val h_ij : MOBasis.t -> CIMatrixElement.De.t -> CIMatrixElement.De.t -> float =\n",
" <fun>\n"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val f_ij : 'a -> CIMatrixElement.De.t -> CIMatrixElement.De.t -> float =\n",
" <fun>\n"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val hf_ij :\n",
" MOBasis.t -> CIMatrixElement.De.t -> CIMatrixElement.De.t -> float list =\n",
" <fun>\n"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-04 18:13:54 +01:00
"source": [
"let f12_integrals mo_basis =\n",
" ( f_one, f_two, None )\n",
2019-12-03 12:25:31 +01:00
"\n",
"let h_ij mo_basis ki kj =\n",
" let integrals =\n",
" List.map (fun f -> f mo_basis)\n",
" [ CI.h_integrals ]\n",
" in\n",
" CIMatrixElement.make integrals ki kj \n",
" |> List.hd\n",
"\n",
"\n",
"let f_ij mo_basis ki kj =\n",
" let integrals =\n",
" List.map (fun f -> f mo_basis)\n",
" [ f12_integrals ]\n",
" in\n",
" CIMatrixElement.make integrals ki kj \n",
" |> List.hd \n",
"\n",
"\n",
"let hf_ij mo_basis ki kj =\n",
" let integrals =\n",
" List.map (fun f -> f mo_basis)\n",
" [ CI.h_integrals ; f12_integrals ]\n",
" in\n",
" CIMatrixElement.make integrals ki kj\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Determinant space"
2019-12-03 09:13:57 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 15,
2019-12-03 09:13:57 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val is_a_double : DeterminantSpace.t -> Determinant.t -> bool = <fun>\n"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 12:25:31 +01:00
"source": [
2019-12-03 14:40:08 +01:00
"let is_a_double det_space =\n",
2019-12-04 18:13:54 +01:00
" let mo_class = DeterminantSpace.mo_class det_space in\n",
2019-12-03 14:40:08 +01:00
" let mo_num = Array.length @@ MOClass.mo_class_array mo_class in\n",
" let m l =\n",
" List.fold_left (fun accu i ->\n",
" let j = i-1 in Bitstring.logor accu (Bitstring.shift_left_one mo_num j)\n",
" ) (Bitstring.zero mo_num) l\n",
" in\n",
" let aux_mask = m (MOClass.auxiliary_mos mo_class) in\n",
" fun k -> \n",
" let alfa =\n",
" Determinant.alfa k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let beta =\n",
" Determinant.beta k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let a = Bitstring.logand aux_mask alfa\n",
" and b = Bitstring.logand aux_mask beta\n",
" in\n",
" match Bitstring.popcount a + Bitstring.popcount b with\n",
" | 2 | 1 -> true\n",
" | 0 | _ -> false\n",
"\n"
2019-12-03 12:25:31 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 16,
2019-12-03 12:25:31 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of determinants : 84 84 7056\n"
]
},
{
"data": {
"text/plain": [
"val in_space : DeterminantSpace.t = <abstr>\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of determinants : 1771 1771 3136441\n"
]
},
{
"data": {
"text/plain": [
"val aux_space : DeterminantSpace.t = <abstr>\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val det_space_in : unit -> Determinant.t Stream.t = <fun>\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val det_space_out : unit -> (Determinant.t * Determinant.t) Stream.t = <fun>\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 12:25:31 +01:00
"source": [
2019-12-03 18:52:03 +01:00
"let in_space = \n",
" DeterminantSpace.fci_f12_of_mo_basis aux_basis ~frozen_core mo_num\n",
" \n",
"let aux_space = \n",
" DeterminantSpace.fci_of_mo_basis aux_basis ~frozen_core \n",
"\n",
2019-12-03 14:40:08 +01:00
"let det_space_in () =\n",
2019-12-03 18:52:03 +01:00
" DeterminantSpace.determinant_stream in_space\n",
2019-12-03 12:25:31 +01:00
"\n",
2019-12-03 14:40:08 +01:00
"let det_space_out () =\n",
" let s = \n",
2019-12-03 18:52:03 +01:00
" DeterminantSpace.determinant_stream aux_space\n",
2019-12-03 14:40:08 +01:00
" in\n",
" Stream.from (fun _ ->\n",
" try\n",
2019-12-03 18:52:03 +01:00
" let is_a_double = is_a_double in_space in\n",
2019-12-03 14:40:08 +01:00
" let rec result () =\n",
" let ki = Stream.next s in\n",
" if is_a_double ki then\n",
" Some (ki,ki)\n",
" else\n",
" result ()\n",
" in\n",
" result ()\n",
" with Stream.Failure -> None\n",
" )\n",
" "
2019-12-03 12:25:31 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 73,
2019-12-20 16:09:02 +01:00
"metadata": {
"scrolled": false
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val ci : CI.t =\n",
" {CI.e_shift = -37.5503735182818161; det_space = <abstr>; m_H = <lazy>;\n",
" m_S2 = <lazy>; eigensystem = <lazy>; n_states = 1}\n"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1 0.0000000000 4.27876360e-01\n",
" 2 -0.0892428570 1.30475542e-01\n",
" 3 -0.0992140799 8.74622675e-02\n",
" 4 -0.1022422032 2.82063712e-02\n",
" 5 -0.1043598763 3.75067204e-02\n",
" 6 -0.1065557047 4.71900892e-02\n",
" 7 -0.1080257392 1.17050936e-02\n",
" 8 -0.1082438239 4.19578866e-03\n",
" 0 -0.1082636731 1.74312968e-03\n",
" 1 -0.1082673304 7.12907991e-04\n",
" 2 -0.1082677273 3.29773895e-04\n",
" 3 -0.1082677955 1.62017305e-04\n",
" 4 -0.1082678250 1.97376527e-04\n",
" 5 -0.1082678653 1.65667298e-04\n",
" 6 -0.1082678853 1.24231373e-04\n",
" 7 -0.1082678901 1.06697885e-05\n",
" 8 -0.1082678902 5.05286976e-06\n",
" 0 -0.1082678902 2.52891309e-06\n"
]
},
{
"data": {
"text/plain": [
"val ci_coef : Lacaml.D.Mat.t =\n",
" \n",
"\n",
" -- 1 --\n",
" 1 -0.780949\n",
" 2 -0\n",
" 3 -0\n",
" ...\n",
" 7054 -0\n",
" 7055 -0\n",
" 7056 -3.12865E-06\n",
" \n",
"val ci_energy : Lacaml.D.Vec.t =\n",
" R1 R2 R3\n",
" -37.6586 -36.7238 -36.2286\n"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1 -0.1082678902 4.37908381e-07\n",
"\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 14:40:08 +01:00
"source": [
2019-12-03 18:52:03 +01:00
"let ci = CI.make ~n_states:state in_space\n",
2019-12-03 14:40:08 +01:00
"\n",
"let ci_coef, ci_energy = Lazy.force ci.eigensystem \n",
2019-12-04 18:13:54 +01:00
"\n",
"let _ = print_newline () \n"
2019-12-03 14:40:08 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
2019-12-03 12:25:31 +01:00
"source": [
"Permutation operator $p_{12}$ that generates a new determinant with electrons 1 and 2 swapped."
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"let p12 det_space =\n",
2019-12-04 18:13:54 +01:00
" let mo_class = DeterminantSpace.mo_class det_space in\n",
2019-12-03 12:25:31 +01:00
" let mo_num = Array.length @@ MOClass.mo_class_array mo_class in\n",
" let m l =\n",
" List.fold_left (fun accu i ->\n",
" let j = i-1 in Bitstring.logor accu (Bitstring.shift_left_one mo_num j)\n",
" ) (Bitstring.zero mo_num) l\n",
" in\n",
" let aux_mask = m (MOClass.auxiliary_mos mo_class) in\n",
" let not_aux_mask =\n",
" Bitstring.(shift_left_one mo_num (mo_num-1) |> minus_one |> logxor aux_mask)\n",
" in\n",
" fun k ->\n",
" let alfa =\n",
" Determinant.alfa k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let beta =\n",
" Determinant.beta k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let a = Bitstring.logand aux_mask alfa\n",
" and b = Bitstring.logand aux_mask beta\n",
" in\n",
" match Bitstring.popcount a, Bitstring.popcount b with\n",
" | 2, 0 \n",
" | 0, 2 -> Some (Determinant.negate_phase k)\n",
" | 1, 1 -> Some (Determinant.of_spindeterminants\n",
" (Spindeterminant.of_bitstring @@\n",
" Bitstring.(logor b (logand not_aux_mask alfa)) )\n",
" (Spindeterminant.of_bitstring @@\n",
" Bitstring.(logor a (logand not_aux_mask beta))\n",
" ) )\n",
" | 1, 0 \n",
" | 0, 1 -> Some k\n",
" | _ -> None\n",
" \n",
" \n"
]
},
2019-12-03 14:40:08 +01:00
{
"cell_type": "markdown",
2019-12-03 12:25:31 +01:00
"metadata": {},
"source": [
2019-12-03 14:40:08 +01:00
"## Matrices $\\langle I | H | \\alpha \\rangle$ and $\\langle I | F | \\alpha \\rangle$ "
2019-12-03 12:25:31 +01:00
]
},
{
2019-12-03 14:40:08 +01:00
"cell_type": "code",
2019-12-03 18:52:03 +01:00
"execution_count": null,
2020-01-06 19:43:55 +01:00
"metadata": {
"scrolled": false
},
2019-12-03 18:52:03 +01:00
"outputs": [],
2019-12-03 14:40:08 +01:00
"source": [
2020-01-06 19:43:55 +01:00
"let randomize = false\n",
"\n",
2019-12-03 18:52:03 +01:00
"let out_list =\n",
2019-12-03 14:40:08 +01:00
" Util.stream_to_list (det_space_out ())\n",
" \n",
2019-12-03 18:52:03 +01:00
"let in_list =\n",
" Util.stream_to_list (det_space_in ())\n",
" \n",
"let det_a = Array.of_list out_list\n",
" |> Array.map (fun (i,_) -> i)\n",
2019-12-03 14:40:08 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let det_I =\n",
" if randomize then\n",
" let n = 123456789 in\n",
" in_list\n",
" |> List.map (fun k -> (Random.int n, k))\n",
" |> List.sort compare\n",
" |> List.map (fun (_,k) -> k)\n",
" |> Array.of_list\n",
" else\n",
" Array.of_list in_list\n"
2019-12-03 18:52:03 +01:00
]
},
{
2020-01-06 19:43:55 +01:00
"cell_type": "raw",
"metadata": {
"raw_mimetype": "text/markdown"
},
2019-12-03 18:52:03 +01:00
"source": [
2019-12-03 14:40:08 +01:00
"let m_H_aux, m_F_aux = \n",
" \n",
" let rec col_vecs_list accu_H accu_F = function\n",
" | [] -> \n",
" List.rev accu_H, \n",
" List.rev accu_F \n",
" | (ki, ki') :: rest when ki = ki' ->\n",
" begin\n",
2019-12-03 18:52:03 +01:00
" let h, f = \n",
" List.map (fun kj ->\n",
" match hf_ij aux_basis kj ki with\n",
" | [ a ; b ] -> a, b\n",
" | _ -> assert false ) in_list\n",
" |> List.split\n",
" in\n",
" let h = Vec.of_list h in\n",
" let f = Vec.of_list f in\n",
" scal 0.5 f; (* Specific to He singlet *)\n",
" col_vecs_list (h::accu_H) (f::accu_F) rest\n",
2019-12-03 14:40:08 +01:00
" end\n",
" | (ki, ki') :: rest ->\n",
" begin\n",
" assert false;\n",
" end\n",
" in\n",
" let h, f = \n",
2019-12-03 18:52:03 +01:00
" col_vecs_list [] [] out_list\n",
2019-12-03 14:40:08 +01:00
" in\n",
" Mat.of_col_vecs_list h,\n",
2020-01-06 19:43:55 +01:00
" Mat.of_col_vecs_list f"
2019-12-03 18:52:03 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Function to generate all intermediate external determinants $|\\alpha \\rangle$ between $|I\\rangle$ and $|J\\rangle$, with a positive phase factor.\n",
"\n",
"* `exc` is the degree of excitation between $|I\\rangle$ and $|J\\rangle$\n",
"* `cabs` is the number of electrons in the CABS\n",
"* `l` is the degree of excitation between $|I\\rangle$ and $|\\alpha \\rangle$\n",
"* `r` is the degree of excitation between $|\\alpha \\rangle$ and $|J\\rangle$"
2019-12-03 14:40:08 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 19,
2019-12-03 14:40:08 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val generate_alphas :\n",
" Determinant.t ->\n",
" Determinant.t -> int -> int -> int -> int -> Determinant.t list = <fun>\n"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val compute_HaaF :\n",
" CIMatrixElement.De.t ->\n",
" CIMatrixElement.De.t list -> CIMatrixElement.De.t -> float = <fun>\n"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 18:52:03 +01:00
"source": [
"let generate_alphas ki kj exc cabs l r =\n",
" (* Check input excitation degree *)\n",
" let d = Determinant.degree ki kj in\n",
" if d <> exc then\n",
" Printf.sprintf \"Invalid excitation degree. Expected %d and found %d.\" exc d\n",
" |> failwith;\n",
" \n",
" (* Generate single excitations *)\n",
" let all_singles ki =\n",
" let mos_a, mos_b = Determinant.to_lists ki in\n",
" [ List.map (fun hole -> \n",
" List.map (fun particle ->\n",
2019-12-12 16:28:30 +01:00
" if hole = particle then None else\n",
" Some (Determinant.single_excitation Spin.Alfa hole particle ki)\n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_a\n",
" ;\n",
" List.map (fun hole -> \n",
" List.map (fun particle ->\n",
2019-12-12 16:28:30 +01:00
" if hole = particle then None else\n",
" Some (Determinant.single_excitation Spin.Beta hole particle ki)\n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_b \n",
" ]\n",
" |> List.concat\n",
" |> List.concat\n",
2019-12-12 16:28:30 +01:00
" |> Util.list_some\n",
2019-12-05 16:16:00 +01:00
" |> List.filter (fun x -> Determinant.is_none x = false)\n",
2019-12-03 18:52:03 +01:00
" |> List.map (fun x -> Determinant.set_phase Phase.Pos x)\n",
" in\n",
" \n",
" (* Generate double excitations *)\n",
" let all_doubles ki =\n",
" let mos_a, mos_b = Determinant.to_lists ki in\n",
" [ List.map (fun hole -> (* Alpha-Alpha *)\n",
" List.map (fun particle ->\n",
" List.map (fun hole' -> \n",
" List.map (fun particle' ->\n",
2019-12-12 16:28:30 +01:00
" if hole = particle || hole' = particle' then None else\n",
2019-12-03 18:52:03 +01:00
" if hole' > hole && particle' < particle then\n",
" Some (Determinant.double_excitation Spin.Alfa hole particle Spin.Alfa hole' particle' ki)\n",
" else None\n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_a \n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_a\n",
" ; \n",
" List.map (fun hole -> (* Beta-Beta *)\n",
" List.map (fun particle ->\n",
" List.map (fun hole' -> \n",
" List.map (fun particle' ->\n",
2019-12-12 18:41:14 +01:00
" if hole' > hole && particle' < particle && hole <> particle && hole' <> particle' then\n",
2019-12-03 18:52:03 +01:00
" Some (Determinant.double_excitation Spin.Beta hole particle Spin.Beta hole' particle' ki)\n",
" else None\n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_b \n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_b\n",
" ;\n",
" List.map (fun hole -> (* Alpha-Beta *)\n",
" List.map (fun particle ->\n",
" List.map (fun hole' -> \n",
" List.map (fun particle' ->\n",
2019-12-12 18:41:14 +01:00
" if hole = particle || hole' = particle' then None else\n",
2019-12-03 18:52:03 +01:00
" Some (Determinant.double_excitation Spin.Alfa hole particle Spin.Beta hole' particle' ki)\n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-04 18:13:54 +01:00
" ) mos_b \n",
2019-12-05 16:16:00 +01:00
" ) mos_abs\n",
2019-12-03 18:52:03 +01:00
" ) mos_a\n",
" ]\n",
" |> List.concat\n",
" |> List.concat\n",
" |> List.concat\n",
" |> List.concat\n",
" |> Util.list_some\n",
2019-12-04 18:13:54 +01:00
" |> List.filter (fun x -> Determinant.is_none x = false)\n",
2019-12-03 18:52:03 +01:00
" |> List.map (fun x -> Determinant.set_phase Phase.Pos x)\n",
" in\n",
"\n",
" (* Generate left and right excitations *)\n",
" let al = \n",
" match l with\n",
" | 1 -> all_singles ki\n",
" | 2 -> all_doubles ki\n",
" | _ -> assert false\n",
" in\n",
" let ar = \n",
" match r with\n",
" | 1 -> all_singles kj\n",
" | 2 -> all_doubles kj\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let mo_class = DeterminantSpace.mo_class in_space in\n",
" let m l =\n",
" List.fold_left (fun accu i ->\n",
" let j = i-1 in Bitstring.logor accu (Bitstring.shift_left_one mo_num j)\n",
" ) (Bitstring.zero mo_num) l\n",
" in\n",
" let aux_mask = m (MOClass.auxiliary_mos mo_class) in\n",
" let good_cabs k = \n",
" let alfa =\n",
" Determinant.alfa k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let beta =\n",
" Determinant.beta k\n",
" |> Spindeterminant.bitstring\n",
" in\n",
" let a = Bitstring.logand aux_mask alfa\n",
" and b = Bitstring.logand aux_mask beta\n",
" in\n",
" Bitstring.popcount a + Bitstring.popcount b = cabs\n",
" in\n",
" let good_lr k =\n",
" Determinant.degree ki k = l &&\n",
" Determinant.degree k kj = r \n",
" in\n",
"\n",
"\n",
" \n",
" (* Merge lists in a set of unique determinants *)\n",
" List.concat [ al; ar ]\n",
" |> List.sort_uniq compare\n",
" \n",
" (* Filter out all determinants with incorrect numbers of electrons in the CABS *)\n",
2019-12-05 16:16:00 +01:00
" |> List.filter good_cabs \n",
2019-12-03 18:52:03 +01:00
" \n",
" (* Filter out all determinants with incorrect excitation numbers *)\n",
2019-12-05 16:16:00 +01:00
" |> List.filter good_lr \n",
2019-12-03 18:52:03 +01:00
" \n",
" \n",
"let compute_HaaF ki alphas kj =\n",
2019-12-04 18:13:54 +01:00
" List.fold_left (fun accu alpha -> accu\n",
2019-12-03 18:52:03 +01:00
" +. h_ij aux_basis ki alpha\n",
" *. f_ij aux_basis alpha kj\n",
" ) 0. alphas\n"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 20,
2019-12-03 18:52:03 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val check :\n",
" int ->\n",
" (CIMatrixElement.De.t -> CIMatrixElement.De.t -> float) ->\n",
" int -> int -> int -> int -> unit = <fun>\n"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val sum : 'a list -> ('a -> float) -> float = <fun>\n"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-04 18:13:54 +01:00
"source": [
"let check n integral_value exc cabs lexc rexc =\n",
2019-12-20 16:09:02 +01:00
" let cpudet, cpuint = ref 0., ref 0. in\n",
" let det_list =\n",
" match n with\n",
" | 0 -> det_I\n",
" | n -> Array.sub det_I 0 n\n",
" in\n",
" let result =\n",
2019-12-05 16:16:00 +01:00
" Printf.printf \"Checking ... \\n%!\";\n",
" let percent = ref 0 in\n",
2020-01-06 19:43:55 +01:00
" let task (i,ki) =\n",
" (let p = (10 * (i+1))/(Array.length det_list) in\n",
2019-12-05 16:16:00 +01:00
" if p <> !percent then\n",
" ( percent := p ; Printf.printf \" - %3d %%\\n%!\" (p*10) ));\n",
2019-12-04 18:13:54 +01:00
" Array.mapi (fun j kj -> \n",
" if i > j || Determinant.degree ki kj <> exc then\n",
" (0,0,0.,0.)\n",
" else\n",
" begin\n",
" let alphas = generate_alphas ki kj exc cabs lexc rexc in\n",
" let det_value =\n",
2019-12-20 16:09:02 +01:00
" let t0 = Unix.gettimeofday () in\n",
" let result = compute_HaaF ki alphas kj in\n",
" cpudet := !cpudet +. Unix.gettimeofday () -. t0;\n",
" result\n",
" in\n",
" let int_value = \n",
2019-12-20 16:09:02 +01:00
" let t0 = Unix.gettimeofday () in\n",
" let result = integral_value ki kj in\n",
" cpuint := !cpuint +. Unix.gettimeofday () -. t0;\n",
" result\n",
" in\n",
2019-12-19 19:23:02 +01:00
"(* Printf.printf \"%d %d %e %e\\n%!\" i j det_value int_value; *)\n",
" (i,j,det_value,int_value)\n",
" end\n",
2019-12-04 18:13:54 +01:00
" ) det_list\n",
2020-01-06 19:43:55 +01:00
" in\n",
" det_list\n",
" |> Array.mapi (fun i ki -> (i,ki))\n",
2019-12-04 18:13:54 +01:00
" |> Array.to_list\n",
2020-01-06 19:43:55 +01:00
" |> Stream.of_list\n",
" |> Farm.run ~f:task\n",
" |> Util.stream_to_list\n",
2019-12-04 18:13:54 +01:00
" |> Array.concat\n",
" in\n",
2019-12-05 16:16:00 +01:00
" let i,j,d,v = \n",
" let rec aux k imax jmax emax dmax vmax = \n",
" if k = -1 then\n",
" imax, jmax, dmax, vmax\n",
" else\n",
" let i, j, d, v = result.(k) in\n",
" let e = abs_float (d -. v) in\n",
2019-12-19 19:23:02 +01:00
" if e >= emax then\n",
2019-12-05 16:16:00 +01:00
" aux (k-1) i j e d v\n",
" else\n",
" aux (k-1) imax jmax emax dmax vmax\n",
" in\n",
" aux (Array.length result - 1) 0 0 0. 0. 0.\n",
2019-12-04 18:13:54 +01:00
" in\n",
2019-12-05 16:16:00 +01:00
" let error = abs_float (d -. v) in\n",
2019-12-04 18:13:54 +01:00
" if error < epsilon_float then\n",
" (*\n",
2019-12-04 18:13:54 +01:00
" Printf.printf \"OK: %e\\n%!\" error\n",
" *)\n",
2019-12-20 16:09:02 +01:00
" Printf.printf \"OK: (%d, %d) | %e %e | %e | cpu : %f %f\\n%!\" i j d v error !cpudet !cpuint\n",
2019-12-04 18:13:54 +01:00
" else\n",
2019-12-20 16:09:02 +01:00
" Printf.printf \"Failed: (%d, %d) | %e %e | %e | cpu : %f %f\\n%!\" i j d v error !cpudet !cpuint\n",
2019-12-04 18:13:54 +01:00
"\n",
2019-12-12 18:41:14 +01:00
" \n",
"let sum l f = List.fold_left (fun accu i -> accu +. f i) 0. l"
2019-12-04 18:13:54 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 21,
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val array_3_init :\n",
" int ->\n",
" int ->\n",
" int ->\n",
" (int -> int -> int -> float) ->\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <fun>\n"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val array_4_init :\n",
" int ->\n",
" int ->\n",
" int ->\n",
" int ->\n",
" (int -> int -> int -> int -> float) ->\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <fun>\n"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val array_5_init :\n",
" int ->\n",
" int ->\n",
" int ->\n",
" int ->\n",
" int ->\n",
" (int -> int -> int -> int -> int -> float) ->\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <fun>\n"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let array_3_init d1 d2 d3 f =\n",
" let result = \n",
" Bigarray.(Array3.create Float64 fortran_layout) d1 d2 d3\n",
" in\n",
" for k=1 to d3 do\n",
" for j=1 to d2 do\n",
" for i=1 to d1 do\n",
" result.{i,j,k} <- f i j k\n",
" done\n",
" done\n",
" done;\n",
" result\n",
"\n",
2019-12-19 19:23:02 +01:00
"\n",
"let array_4_init d1 d2 d3 d4 f =\n",
" let result = \n",
" Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4 |]\n",
" in\n",
" for l=1 to d4 do\n",
" for k=1 to d3 do\n",
" for j=1 to d2 do\n",
" for i=1 to d1 do\n",
" result.{i,j,k,l} <- f i j k l\n",
" done\n",
" done\n",
" done\n",
" done;\n",
" result\n",
"\n",
2019-12-19 19:23:02 +01:00
"\n",
"let array_5_init d1 d2 d3 d4 d5 f =\n",
" let result = \n",
" Bigarray.(Genarray.create Float64 fortran_layout) [| d1;d2;d3;d4;d5 |]\n",
" in\n",
" for m=1 to d5 do\n",
" for l=1 to d4 do\n",
" for k=1 to d3 do\n",
" for j=1 to d2 do\n",
" for i=1 to d1 do\n",
" result.{i,j,k,l,m} <- f i j k l m\n",
" done\n",
" done\n",
" done\n",
" done\n",
" done;\n",
" result\n",
"\n",
"(* ----- *)"
]
},
2019-12-04 18:13:54 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-05 16:16:00 +01:00
"******"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1. 0 1 11"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 22,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"- : Jupyter_notebook.display_id = <abstr>\n"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"0_1_11.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$i,j$ : orbital indices of MOs occupied in $|I\\rangle$.\n",
"\n",
2019-12-09 19:37:58 +01:00
"$\\sum_i \\sum_a \\hat{T}_{i}^{a} \\hat{T}_{a}^{i}$\n",
"\n",
2019-12-05 16:16:00 +01:00
"\\begin{align}\n",
2019-12-05 22:45:30 +01:00
"\\sum_{a} \\sum_{i}\n",
" \\left( h_{ia} +\n",
" \\sum_{j} \\langle i j || a j \\rangle +\n",
" \\sum_{\\bar{j}} \\langle i \\bar{j} | a \\bar{j} \\rangle \\right) \n",
" \\left( f_{ai} +\n",
" \\sum_{j} \\left[ a j || i j \\right] + \n",
" \\sum_{\\bar{j}} \\left[ a \\bar{j} | i \\bar{j} \\right] \\right) + \\\\\n",
"\\sum_{\\bar{a}} \\sum_{\\bar{i}}\n",
" \\left( h_{ia} +\n",
" \\sum_{j} \\langle \\bar{i} j | \\bar{a} j \\rangle +\n",
" \\sum_{\\bar{j}} \\langle \\bar{i} \\bar{j} || \\bar{a} \\bar{j} \\rangle \\right) \n",
" \\left( f_{ai} +\n",
" \\sum_{j} \\left[ \\bar{a} j | \\bar{i} j \\right] + \n",
" \\sum_{\\bar{j}} \\left[ \\bar{a} \\bar{j} || \\bar{i} \\bar{j} \\right] \\right) \n",
2019-12-05 16:16:00 +01:00
"\\end{align}"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 23,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> 'a -> float = <fun>\n"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (2725, 2725) | -3.638004e-01 -3.638004e-01 | 1.665335e-16 | cpu : 7.381801 1.597322\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
"let integral_value ki kj = \n",
" (* Alpha-Beta *)\n",
" let s, s' = Spin.(Alfa, Beta) in \n",
2019-12-05 22:45:30 +01:00
" let mos_a, mos_b = mos_a ki, mos_b ki in\n",
2019-12-12 18:41:14 +01:00
" \n",
" sum mos_cabs (fun a ->\n",
" sum mos_a (fun i -> \n",
2019-12-05 22:45:30 +01:00
" (h_one i a s +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_a (fun j -> h_two i j a j s s ) +.\n",
" sum mos_b (fun j -> h_two i j a j s s') ) *. \n",
2019-12-05 22:45:30 +01:00
" (f_one a i s +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_a (fun j -> f_two a j i j s s ) +.\n",
" sum mos_b (fun j -> f_two a j i j s s') )\n",
" )\n",
" +.\n",
" sum mos_b (fun i -> \n",
2019-12-05 22:45:30 +01:00
" (h_one i a s +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_b (fun j -> h_two i j a j s' s') +.\n",
" sum mos_a (fun j -> h_two i j a j s' s ) ) *. \n",
2019-12-05 22:45:30 +01:00
" (f_one a i s +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_a (fun j -> f_two a j i j s' s ) +.\n",
" sum mos_b (fun j -> f_two a j i j s' s') )\n",
" ) \n",
" ) \n",
2019-12-05 16:16:00 +01:00
" \n",
"let _ =\n",
" check 0 integral_value 0 1 1 1\n",
" "
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 36,
2019-12-20 16:09:02 +01:00
"metadata": {
"scrolled": false
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_0111_1H_1F : Lacaml.D.vec = R1 R2 R3 R7 R8 R9\n",
" 0 0 0 ... 0 0 0\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_1H_2Fa : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0 4.14739E-05 0.000191942 5.82024E-05 3.17097E-05\n",
" 2 0.00441404 0 0.00130171 0.000700762 0.000516783\n",
" 3 0.00947473 0.00340706 0 0.00113769 0.000719119\n",
" ... ... ... ... ...\n",
" 7 0.00330602 0.00100192 0.00129118 0.000663876 0.000505817\n",
" 8 0.0342633 0.0165417 0.0159678 0.00914699 0.00756616\n",
" 9 0.0351294 0.0167331 0.0160539 0.00925644 0.00811228\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 0.000201052 -1.30724E-06 0.000334792 0.000361285\n",
" 2 0.000232155 -0.00168232 0.000833107 0.00101709\n",
" 3 -0.00387499 0.000450358 0.00302133 0.0034399\n",
" ... ... ... ...\n",
" 7 0.000755987 0 0.00138329 0.00154135\n",
" 8 0.00932835 0.00680096 0 0.01773\n",
" 9 0.00932584 0.00668845 0.0161232 0\n",
" \n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_1H_2Fb : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0.00240706 0.000203061 0.000204496 6.9114E-05 3.98705E-05\n",
" 2 0.00453599 0.000921371 0.00101171 0.00018998 6.05419E-06\n",
" 3 0.010046 0.00215252 0.00186996 0.000735619 0.00032706\n",
" ... ... ... ... ...\n",
" 7 0.00333148 0.00134734 0.00136183 0.000678955 0.000509352\n",
" 8 0.03544 0.0162787 0.0160193 0.00909405 0.00750383\n",
" 9 0.0363843 0.016229 0.0160429 0.00913626 0.00685374\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 0.000172239 0.000122518 0.000307621 0.000336864\n",
" 2 0.000706018 0.000468703 0.00152775 0.00171167\n",
" 3 0.00115063 0.000924145 0.0033018 0.00371036\n",
" ... ... ... ...\n",
" 7 0.000821248 0.000738693 0.00150412 0.00167373\n",
" 8 0.00938437 0.0089191 0.0164475 0.0178998\n",
" 9 0.00941992 0.00884667 0.0163266 0.018548\n",
" \n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Ha_1F : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0 0 0 0 0\n",
" 2 0 0 0 0 0\n",
" 3 0 0 0 0 0\n",
" ... ... ... ... ...\n",
" 7 0 0 0 0 0\n",
" 8 0 0 0 0 0\n",
" 9 0 0 0 0 0\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 0 0 0 0\n",
" 2 0 0 0 0\n",
" 3 0 0 0 0\n",
" ... ... ... ...\n",
" 7 0 0 0 0\n",
" 8 0 0 0 0\n",
" 9 0 0 0 0\n",
" \n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Hb_1F : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0 0 0 0 0\n",
" 2 0 0 0 0 0\n",
" 3 0 0 0 0 0\n",
" ... ... ... ... ...\n",
" 7 0 0 0 0 0\n",
" 8 0 0 0 0 0\n",
" 9 0 0 0 0 0\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 0 0 0 0\n",
" 2 0 0 0 0\n",
" 3 0 0 0 0\n",
" ... ... ... ...\n",
" 7 0 0 0 0\n",
" 8 0 0 0 0\n",
" 9 0 0 0 0\n",
" \n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0111_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> 'a -> float = <fun>\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (416, 416) | -1.497602e-01 -1.497602e-01 | 1.110223e-16 | cpu : 7.418296 0.113910\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let m_0111_1H_1F = \n",
" Vec.init mo_num (fun i -> \n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_one a i Spin.Alfa ))\n",
"\n",
" \n",
"let m_0111_1H_2Fa = \n",
" Mat.init_cols mo_num mo_num (fun i j -> sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j i j Spin.Alfa Spin.Alfa ))\n",
"\n",
" \n",
"let m_0111_1H_2Fb = \n",
" Mat.init_cols mo_num mo_num (fun i j -> sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j i j Spin.Alfa Spin.Beta ))\n",
"\n",
"\n",
"let m_0111_2Ha_1F = \n",
" Mat.init_cols mo_num mo_num (fun i j -> sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *. f_one a j Spin.Alfa ))\n",
"\n",
" \n",
"let m_0111_2Hb_1F = \n",
" Mat.init_cols mo_num mo_num (fun i j -> sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *. f_one a j Spin.Alfa ))\n",
"\n",
"\n",
"let m_0111_2Ha_2Fa =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *.\n",
" f_two a k i k Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_0111_2Hb_2Fa =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *.\n",
" f_two a k i k Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_0111_2Ha_2Fb =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *.\n",
" f_two a k i k Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_0111_2Hb_2Fb =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *.\n",
" f_two a k i k Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
"\n",
"let integral_value ki kj = \n",
"\n",
" let mos_a, mos_b = mos_a ki, mos_b ki in\n",
" \n",
" sum mos_a (fun i ->\n",
" m_0111_1H_1F.{i} +. \n",
" sum mos_a (fun j ->\n",
" m_0111_1H_2Fa.{i,j} +. m_0111_2Ha_1F.{i,j} +.\n",
" sum mos_a (fun k -> m_0111_2Ha_2Fa.{i,j,k}) +.\n",
" sum mos_b (fun k -> m_0111_2Ha_2Fb.{i,j,k})) +.\n",
" sum mos_b (fun j ->\n",
" m_0111_1H_2Fb.{i,j} +. m_0111_2Hb_1F.{i,j} +.\n",
" sum mos_a (fun k -> m_0111_2Hb_2Fa.{i,j,k}) +.\n",
" sum mos_b (fun k -> m_0111_2Hb_2Fb.{i,j,k}))\n",
" )\n",
" +.\n",
" sum mos_b (fun i ->\n",
" m_0111_1H_1F.{i} +. \n",
" sum mos_b (fun j ->\n",
" m_0111_1H_2Fa.{i,j} +. m_0111_2Ha_1F.{i,j} +.\n",
" sum mos_b (fun k -> m_0111_2Ha_2Fa.{i,j,k}) +.\n",
" sum mos_a (fun k -> m_0111_2Ha_2Fb.{i,j,k})) +.\n",
" sum mos_a (fun j ->\n",
" m_0111_1H_2Fb.{i,j} +. m_0111_2Hb_1F.{i,j} +.\n",
" sum mos_b (fun k -> m_0111_2Hb_2Fa.{i,j,k}) +.\n",
" sum mos_a (fun k -> m_0111_2Hb_2Fb.{i,j,k}))\n",
" )\n",
" \n",
"let _ =\n",
" check 0 integral_value 0 1 1 1\n",
" "
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2. 0 1 22"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 25,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"- : Jupyter_notebook.display_id = <abstr>\n"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"0_1_22.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$i,j$ : orbital indices of MOs occupied in $|I\\rangle$.\n",
"\n",
"$k$ : orbital indices of MOs unoccupied in $|I\\rangle$.\n",
"\n",
2019-12-09 19:37:58 +01:00
"$\\sum_i \\sum_a \\sum_j \\sum_k \\hat{T}_{ij}^{ak} \\hat{T}_{ak}^{ij}$\n",
"\n",
"\n",
2019-12-05 16:16:00 +01:00
"\\begin{align}\n",
"\\sum_{a} \\sum_{k} \\sum_{i} \\sum_{j<i}\n",
" \\langle i j || a k \\rangle \n",
" \\left[ a k || i j \\right] + \n",
"\\sum_{a} \\sum_{\\bar{k}} \\sum_{i} \\sum_{\\bar{j}}\n",
" \\langle i \\bar{j} | a \\bar{k} \\rangle \n",
" \\left[ a \\bar{k} | i \\bar{j} \\right] + \\\\\n",
"\\sum_{\\bar{a}} \\sum_{k} \\sum_{\\bar{i}} \\sum_{j}\n",
" \\langle \\bar{i} j | \\bar{a} k \\rangle \n",
" \\left[ \\bar{a} k | \\bar{i} j \\right] + \n",
"\\sum_{\\bar{a}} \\sum_{\\bar{k}} \\sum_{\\bar{i}} \\sum_{\\bar{j}<\\bar{i}}\n",
" \\langle \\bar{i} \\bar{j} || \\bar{a} \\bar{k} \\rangle \n",
" \\left[ \\bar{a} \\bar{k} || \\bar{i} \\bar{j} \\right] \n",
"\\end{align}"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 26,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (96, 96) | -3.551300e-02 -3.551300e-02 | 4.163336e-17 | cpu : 1.998001 0.120893\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
"let integral_value ki kj = \n",
" (* mos unoccupied in both I and J *)\n",
" let mos_virt_a, mos_virt_b = \n",
" Array.init mo_num (fun i -> Some (i+1)) , \n",
" Array.init mo_num (fun i -> Some (i+1)) \n",
" in\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a ki);\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a kj);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b ki);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b kj);\n",
" \n",
" let mos_virt_a, mos_virt_b = \n",
" Array.to_list mos_virt_a |> Util.list_some,\n",
" Array.to_list mos_virt_b |> Util.list_some\n",
" in\n",
" \n",
" (* Alpha-Beta *)\n",
" let s, s' = Spin.(Alfa, Beta) in\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun a ->\n",
" sum (mos_b ki) (fun j -> \n",
" sum (mos_a ki) (fun i -> \n",
" sum mos_virt_b (fun k -> \n",
" h_two i j a k s s' *. f_two a k i j s s'\n",
" )))\n",
2019-12-05 16:16:00 +01:00
" +.\n",
2019-12-12 18:41:14 +01:00
" sum (mos_a ki) (fun j -> \n",
" sum (mos_b ki) (fun i -> \n",
" sum mos_virt_a (fun k -> \n",
" h_two i j a k s s' *. f_two a k i j s s'\n",
" )))) \n",
2019-12-05 16:16:00 +01:00
" +.\n",
" (* Alpha-Alpha / Beta-Beta *)\n",
" List.fold_left (fun accu (mos_virt,mos,s) -> \n",
" let s' = s in accu +.\n",
2019-12-12 18:41:14 +01:00
" sum mos (fun j -> \n",
" sum mos (fun i -> if i < j then 0. else\n",
" sum mos_virt (fun k -> \n",
" sum mos_cabs (fun a -> \n",
" h_two i j a k s s' *. f_two a k i j s s'\n",
" )))) \n",
" ) 0. [ (mos_virt_a,mos_a ki,Spin.Alfa) ; (mos_virt_b,mos_b ki,Spin.Beta)]\n",
2019-12-05 16:16:00 +01:00
" \n",
"let _ =\n",
2019-12-20 16:09:02 +01:00
" check 100 integral_value 0 1 2 2\n",
2019-12-05 16:16:00 +01:00
" "
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 27,
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_0122_Haa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0122_Hab :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (96, 96) | -3.551300e-02 -3.551300e-02 | 4.163336e-17 | cpu : 1.975414 0.002633\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let m_0122_Haa = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a k Spin.Alfa Spin.Alfa *. f_two a k i j Spin.Alfa Spin.Alfa\n",
" ) )\n",
" \n",
"let m_0122_Hab = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a k Spin.Alfa Spin.Beta *. f_two a k i j Spin.Alfa Spin.Beta\n",
" ) )\n",
"\n",
"\n",
"let integral_value ki kj = \n",
" (* mos unoccupied in both I and J *)\n",
" let mos_virt_a, mos_virt_b = \n",
" Array.init mo_num (fun i -> Some (i+1)) , \n",
" Array.init mo_num (fun i -> Some (i+1)) \n",
" in\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a ki);\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a kj);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b ki);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b kj);\n",
" \n",
" let mos_virt_a, mos_virt_b = \n",
" Array.to_list mos_virt_a |> Util.list_some,\n",
" Array.to_list mos_virt_b |> Util.list_some\n",
" in\n",
" \n",
" let result = \n",
" sum (mos_a ki) (fun i -> \n",
" sum (mos_b ki) (fun j -> \n",
" sum mos_virt_b (fun k -> m_0122_Hab.{i,j,k} )))\n",
" +.\n",
" sum (mos_b ki) (fun i -> \n",
" sum (mos_a ki) (fun j -> \n",
" sum mos_virt_a (fun k -> m_0122_Hab.{i,j,k} )))\n",
" +.\n",
" (* Alpha-Alpha / Beta-Beta *)\n",
" List.fold_left (fun accu (mos_virt,mos) -> \n",
" accu +.\n",
" sum mos (fun j -> \n",
" sum mos (fun i -> if i <= j then 0. else\n",
" sum mos_virt (fun k -> m_0122_Haa.{i,j,k} )))\n",
" ) 0. [ (mos_virt_a,mos_a ki) ; (mos_virt_b,mos_b ki)]\n",
" in \n",
" result\n",
" \n",
"let _ =\n",
2019-12-20 16:09:02 +01:00
" check 100 integral_value 0 1 2 2\n",
" "
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. 0 2 22"
2019-12-04 18:13:54 +01:00
]
2019-12-03 14:40:08 +01:00
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 28,
2019-12-04 18:13:54 +01:00
"metadata": {
"scrolled": true
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"- : Jupyter_notebook.display_id = <abstr>\n"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-03 18:52:03 +01:00
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"0_2_22.png\""
2019-12-04 18:13:54 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-05 16:16:00 +01:00
"$i,j$ : orbital indices of MOs occupied in $|I\\rangle$.\n",
2019-12-03 18:52:03 +01:00
"\n",
2019-12-09 19:37:58 +01:00
"$\\sum_i \\sum_a \\sum_j \\sum_b \\hat{T}_{ij}^{ab} \\hat{T}_{ab}^{ij}$\n",
"\n",
2019-12-05 16:16:00 +01:00
"\\begin{align}\n",
"\\sum_{a} \\sum_{b>a} \\sum_{i} \\sum_{j<i}\n",
" \\langle i j || a b \\rangle \n",
" \\left[ a b || i j \\right] + \n",
"\\sum_{a} \\sum_{\\bar{b}} \\sum_{i} \\sum_{\\bar{j}}\n",
" \\langle i \\bar{j} | a \\bar{b} \\rangle \n",
" \\left[ a \\bar{b} | i \\bar{j} \\right] + \\\\\n",
"\\sum_{\\bar{a}} \\sum_{b} \\sum_{\\bar{i}} \\sum_{j}\n",
" \\langle \\bar{i} j | \\bar{a} b \\rangle \n",
" \\left[ \\bar{a} b | \\bar{i} j \\right] + \n",
"\\sum_{\\bar{a}} \\sum_{\\bar{b}>\\bar{a}} \\sum_{\\bar{i}} \\sum_{\\bar{j}<\\bar{i}}\n",
" \\langle \\bar{i} \\bar{j} || \\bar{a} \\bar{b} \\rangle \n",
" \\left[ \\bar{a} \\bar{b} || \\bar{i} \\bar{j} \\right] \n",
"\\end{align}"
2019-12-03 18:52:03 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 29,
2019-12-03 18:52:03 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> 'a -> float = <fun>\n"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (6, 6) | -5.846493e-03 -5.846493e-03 | 1.821460e-17 | cpu : 2.262464 0.188633\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-04 18:13:54 +01:00
"source": [
"let integral_value ki kj = \n",
" (* Alpha-Beta *)\n",
" let s, s' = Spin.(Alfa, Beta) in\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun a -> \n",
" sum mos_cabs (fun b -> \n",
" sum (mos_a ki) (fun i -> \n",
" sum (mos_b ki) (fun j -> \n",
" h_two i j a b s s' *. f_two a b i j s s'\n",
" ))))\n",
2019-12-04 18:13:54 +01:00
" +.\n",
" (* Alpha-Alpha / Beta-Beta *)\n",
" List.fold_left (fun accu (mos,s) -> \n",
" let s' = s in accu +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun b -> \n",
" sum mos_cabs (fun a -> if b > a then 0. else\n",
" sum mos (fun j -> \n",
" sum mos (fun i -> if i < j then 0. else\n",
" h_two i j a b s s' *. f_two a b i j s s'\n",
" ))))\n",
" ) 0. [ (mos_a ki,Spin.Alfa) ; (mos_b ki,Spin.Beta)]\n",
2019-12-04 18:13:54 +01:00
" \n",
"let _ =\n",
2019-12-20 16:09:02 +01:00
" check 100 integral_value 0 2 2 2\n",
2019-12-04 18:13:54 +01:00
" "
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 30,
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_0222_Haa : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0 -6.71384E-07 -9.968E-05 -6.45073E-05 -5.27031E-05\n",
" 2 -6.71384E-07 0 -4.68481E-05 -2.57378E-05 -2.05896E-05\n",
" 3 -9.968E-05 -4.68481E-05 0 -0.00237038 -0.00210405\n",
" ... ... ... ... ...\n",
" 7 3.23766E-08 -1.08041E-05 -0.000287197 -0.000198078 -0.00017547\n",
" 8 -5.45331E-05 -5.28682E-05 -0.000600588 -1.92121E-05 -0.000295033\n",
" 9 -6.63373E-05 -5.80165E-05 -0.000866918 -0.000558093 -1.92121E-05\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 -1.93604E-05 3.23766E-08 -5.45331E-05 -6.63373E-05\n",
" 2 -3.17579E-05 -1.08041E-05 -5.28682E-05 -5.80165E-05\n",
" 3 -1.92121E-05 -0.000287197 -0.000600588 -0.000866918\n",
" ... ... ... ...\n",
" 7 -0.000208547 0 -0.000297666 -0.000320273\n",
" 8 -0.000500592 -0.000297666 0 -0.000806147\n",
" 9 -0.000497322 -0.000320273 -0.000806147 0\n",
" \n"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_0222_Hab : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 -0.000169963 -1.53492E-05 -0.000103698 -6.51009E-05 -5.22436E-05\n",
" 2 -1.53492E-05 -0.0025733 -0.00022554 -0.000225645 -0.00021764\n",
" 3 -0.000103698 -0.00022554 -0.00532837 -0.00229291 -0.00204143\n",
" ... ... ... ... ...\n",
" 7 -2.92509E-05 -5.57267E-05 -0.000425167 -0.000318692 -0.00029493\n",
" 8 -5.57988E-05 -8.81786E-05 -0.000592839 -0.000542726 -0.00025893\n",
" 9 -6.8656E-05 -9.61834E-05 -0.000844322 -0.000504532 -0.000746806\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 -1.72021E-05 -2.92509E-05 -5.57988E-05 -6.8656E-05\n",
" 2 -8.82835E-05 -5.57267E-05 -8.81786E-05 -9.61834E-05\n",
" 3 -0.000139913 -0.000425167 -0.000592839 -0.000844322\n",
" ... ... ... ...\n",
" 7 -0.000386756 -0.00048578 -0.000493231 -0.000516994\n",
" 8 -0.000633297 -0.000493231 -0.00140435 -0.000967207\n",
" 9 -0.000627417 -0.000516994 -0.000967207 -0.00165712\n",
" \n"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> 'a -> float = <fun>\n"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (6, 6) | -5.846493e-03 -5.846493e-03 | 1.908196e-17 | cpu : 2.250297 0.000800\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let m_0222_Haa = \n",
" Mat.init_cols mo_num mo_num (fun i j ->\n",
" sum mos_cabs (fun a ->\n",
" sum mos_cabs (fun b -> if b >= a then 0. else\n",
" h_two i j a b Spin.Alfa Spin.Alfa *. f_two a b i j Spin.Alfa Spin.Alfa\n",
" ) )\n",
" )\n",
" \n",
"let m_0222_Hab = \n",
" Mat.init_cols mo_num mo_num (fun i j ->\n",
" sum mos_cabs (fun a ->\n",
" sum mos_cabs (fun b ->\n",
" h_two i j a b Spin.Alfa Spin.Beta *. f_two a b i j Spin.Alfa Spin.Beta\n",
" ) )\n",
" )\n",
" \n",
"let integral_value ki kj = \n",
" (* Alpha-Beta *)\n",
" sum (mos_a ki) (fun i -> \n",
" sum (mos_b ki) (fun j -> \n",
" m_0222_Hab.{i,j} \n",
" ))\n",
" +.\n",
" (* Alpha-Alpha / Beta-Beta *)\n",
" List.fold_left (fun accu (mos) -> \n",
" accu +.\n",
" sum mos (fun j -> \n",
" sum mos (fun i -> if i < j then 0. else\n",
" m_0222_Haa.{i,j} \n",
" ))\n",
" ) 0. [ (mos_a ki) ; (mos_b ki)]\n",
" \n",
"let _ =\n",
2019-12-20 16:09:02 +01:00
" check 100 integral_value 0 2 2 2\n",
" "
]
},
2019-12-04 18:13:54 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-05 22:45:30 +01:00
"# 4. 1 1 11"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 38,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"- : Jupyter_notebook.display_id = <abstr>\n"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"1_1_11.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
"\n",
"$j$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
2019-12-09 19:37:58 +01:00
"$\\sum_a \\hat{T}_{i}^{a} \\hat{T}_{a}^{k}$\n",
"\n",
2019-12-05 16:16:00 +01:00
"\\begin{align}\n",
2019-12-05 22:45:30 +01:00
" \\sum_{a} \n",
" \\left( h_{ia} +\\sum_{j} \\langle i j || a j \\rangle +\n",
" \\sum_{\\bar{j}} \\langle i \\bar{j} | a \\bar{j} \\rangle \\right)\n",
" \\left( f_{ak} +\\sum_{j} \\left[ a j || k j \\right] + \n",
2019-12-09 19:37:58 +01:00
" \\sum_{\\bar{j}} \\left[ a \\bar{j} | k \\bar{j} \\right]\\right) \\\\\n",
2019-12-05 16:16:00 +01:00
"\\end{align}"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 39,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (0, 0) | 0.000000e+00 0.000000e+00 | 0.000000e+00 | cpu : 22.881818 5.474353\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
"let integral_value ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
2019-12-05 22:45:30 +01:00
" let mos_i, mos_i' =\n",
2019-12-05 16:16:00 +01:00
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
2019-12-05 22:45:30 +01:00
" let mos_j, mos_j' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a kj, mos_b kj\n",
" | Spin.Beta -> mos_b kj, mos_a kj\n",
" in\n",
2019-12-05 16:16:00 +01:00
"\n",
" let result = \n",
2019-12-05 22:45:30 +01:00
" let s' = Spin.other s in\n",
2019-12-12 18:41:14 +01:00
" \n",
" sum mos_cabs (fun a -> \n",
2019-12-05 22:45:30 +01:00
" (h_one i a s +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_i (fun j -> h_two i j a j s s ) +.\n",
" sum mos_i' (fun j -> h_two i j a j s s') ) *.\n",
2019-12-05 22:45:30 +01:00
" (f_one a k s +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_j (fun j -> f_two a j k j s s ) +.\n",
" sum mos_j' (fun j -> f_two a j k j s s') ) \n",
" )\n",
2019-12-05 16:16:00 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2020-01-06 19:43:55 +01:00
"let _ = check 0 integral_value 1 1 1 1"
2019-12-09 19:37:58 +01:00
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"val ki : Determinant.t =\n",
" phase:+1\n",
" a:+1 +------++-------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val kj : Determinant.t =\n",
" phase:+1\n",
" a:+1 ------+++-------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.0173816203798749\n"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let ki = det_I.(77)\n",
"let kj = det_I.(83)\n",
"\n",
"let _ = integral_value ki kj"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
2019-12-20 16:09:02 +01:00
"scrolled": false
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_1111_1H_1F : Lacaml.D.mat =\n",
" \n",
"\n",
" -- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 --\n",
" 1 0 0 0 0 0\n",
" 2 0 0 0 0 0\n",
" 3 0 0 0 0 0\n",
" ... ... ... ... ...\n",
" 7 0 0 0 0 0\n",
" 8 0 0 0 0 0\n",
" 9 0 0 0 0 0\n",
" \n",
"\n",
" -- 6 -- -- 7 -- -- 8 -- -- 9 --\n",
" 1 0 0 0 0\n",
" 2 0 0 0 0\n",
" 3 0 0 0 0\n",
" ... ... ... ...\n",
" 7 0 0 0 0\n",
" 8 0 0 0 0\n",
" 9 0 0 0 0\n",
" \n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_1H_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_1H_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Ha_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Hb_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1111_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value_11 : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let m_1111_1H_1F = \n",
" Mat.init_cols mo_num mo_num (fun i k -> \n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_one a k Spin.Alfa ))\n",
"\n",
"\n",
"let m_1111_1H_2Fa = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j k j Spin.Alfa Spin.Alfa ))\n",
"\n",
" \n",
"let m_1111_1H_2Fb = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j k j Spin.Alfa Spin.Beta ))\n",
"\n",
"\n",
"let m_1111_2Ha_1F = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *. f_one a k Spin.Alfa ))\n",
"\n",
" \n",
"let m_1111_2Hb_1F = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *. f_one a k Spin.Alfa ))\n",
"\n",
"\n",
"let m_1111_2Ha_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *.\n",
" f_two a l k l Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1111_2Hb_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *.\n",
" f_two a l k l Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1111_2Ha_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Alfa *.\n",
" f_two a l k l Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1111_2Hb_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a j Spin.Alfa Spin.Beta *.\n",
" f_two a l k l Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
2020-01-06 19:43:55 +01:00
"let integral_value_11 ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let mos_a, mos_b =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in \n",
" \n",
" let result = \n",
" m_1111_1H_1F.{i,k} +. \n",
" sum mos_a (fun j -> if j = i then 0. else\n",
" m_1111_1H_2Fa.{i,j,k} +. m_1111_2Ha_1F.{i,j,k} +.\n",
" sum mos_a (fun l -> if l = i then 0. else m_1111_2Ha_2Fa.{i,j,k,l}) +.\n",
" sum mos_b (fun l -> m_1111_2Ha_2Fb.{i,j,k,l})) +.\n",
" sum mos_b (fun j ->\n",
" m_1111_1H_2Fb.{i,j,k} +. m_1111_2Hb_1F.{i,j,k} +.\n",
" sum mos_a (fun l -> if l = i then 0. else m_1111_2Hb_2Fa.{i,j,k,l}) +.\n",
" sum mos_b (fun l -> m_1111_2Hb_2Fb.{i,j,k,l}))\n",
" in\n",
" \n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
2020-01-06 19:43:55 +01:00
" \n",
"(*\n",
"let _ =\n",
2020-01-06 19:43:55 +01:00
" check 0 integral_value_11 1 1 1 1\n",
"*) \n",
" "
]
},
2019-12-09 19:37:58 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 5. 1 1 12"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"1_1_12.png\""
2019-12-09 19:37:58 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
2019-12-05 16:16:00 +01:00
"\n",
2019-12-09 19:37:58 +01:00
"$\\sum_{j} \\sum_a \\hat{T}_{j}^{a} \\hat{T}_{ai}^{jk}$\n",
2019-12-05 16:16:00 +01:00
"\n",
2019-12-09 19:37:58 +01:00
"$j$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"\\begin{align}\n",
" \\sum_{a} \\sum_{j} \n",
" \\left( h_{ja} +\\sum_{m} \\langle j m || a m \\rangle +\n",
" \\sum_{\\bar{m}} \\langle j \\bar{m} | a \\bar{m} \\rangle \\right)\n",
" \\left[ a i || j k \\right] + \\\\\n",
" \\sum_{\\bar{a}} \\sum_{\\bar{j}} \n",
" \\left( h_{\\bar{j}\\bar{a}} +\\sum_{m} \\langle \\bar{j} m | \\bar{a} m \\rangle +\n",
" \\sum_{\\bar{m}} \\langle \\bar{j} \\bar{m} || \\bar{a} \\bar{m} \\rangle \\right)\n",
" \\left[ \\bar{a} i | \\bar{j} k \\right] \n",
"\\end{align}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"let integral_value ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
2019-12-05 16:16:00 +01:00
" in\n",
"\n",
2019-12-09 19:37:58 +01:00
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
" \n",
" let mos_i, mos_i' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
"\n",
" let result = \n",
" let s' = Spin.other s in\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun a -> \n",
" sum mos_j (fun j -> \n",
2019-12-09 19:37:58 +01:00
" (h_one j a s +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_i (fun m -> h_two j m a m s s ) +.\n",
" sum mos_i' (fun m -> h_two j m a m s s') ) *.\n",
2019-12-09 19:37:58 +01:00
" (f_two a i j k s s )\n",
2019-12-12 18:41:14 +01:00
" ) \n",
2019-12-09 19:37:58 +01:00
" +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_j' (fun j -> \n",
2019-12-09 19:37:58 +01:00
" (h_one j a s +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_i (fun m -> h_two j m a m s' s ) +.\n",
" sum mos_i' (fun m -> h_two j m a m s' s') ) *.\n",
2019-12-09 19:37:58 +01:00
" (f_two a i j k s' s )\n",
2019-12-12 18:41:14 +01:00
" ) \n",
" ) \n",
2019-12-09 19:37:58 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 1 1 1 2"
2019-12-05 16:16:00 +01:00
]
},
2019-12-19 19:23:02 +01:00
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 47,
2019-12-19 19:23:02 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_1112_1H_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1112_1H_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1112_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1112_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1112_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1112_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value_12 : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-19 19:23:02 +01:00
"source": [
"let m_1112_1H_2Fa = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_one j a Spin.Alfa *. f_two a i j k Spin.Alfa Spin.Alfa ))\n",
"\n",
" \n",
"let m_1112_1H_2Fb = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_one j a Spin.Beta *. f_two a i j k Spin.Alfa Spin.Beta ))\n",
"\n",
"\n",
"let m_1112_2Ha_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two j m a m Spin.Alfa Spin.Alfa *.\n",
" f_two a i j k Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1112_2Hb_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two j m a m Spin.Alfa Spin.Beta *.\n",
" f_two a i j k Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"let m_1112_2Ha_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two j m a m Spin.Alfa Spin.Alfa *.\n",
" f_two a i j k Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1112_2Hb_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two j m a m Spin.Alfa Spin.Beta *.\n",
" f_two a i j k Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
2020-01-06 19:43:55 +01:00
"let integral_value_12 ki kj = \n",
2019-12-19 19:23:02 +01:00
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
" \n",
" let mos_i, mos_i' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
" \n",
" let result = \n",
" sum mos_j (fun j -> \n",
" m_1112_1H_2Fa.{i,j,k} +. \n",
" sum mos_i (fun m -> m_1112_2Ha_2Fa.{i,j,k,m}) +.\n",
" sum mos_i' (fun m -> m_1112_2Hb_2Fa.{i,j,k,m})) +.\n",
" sum mos_j' (fun j ->\n",
" m_1112_1H_2Fb.{i,j,k} +. \n",
" sum mos_i (fun m -> m_1112_2Hb_2Fb.{i,j,k,m}) +.\n",
" sum mos_i' (fun m -> m_1112_2Ha_2Fb.{i,j,k,m}))\n",
" in\n",
" \n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
" \n",
"\n",
2020-01-06 19:43:55 +01:00
"(*\n",
"let _ = check 100 integral_value_12 1 1 1 2\n",
"*)"
2019-12-19 19:23:02 +01:00
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-12 16:28:30 +01:00
"# 6. 1 1 21"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
2019-12-09 19:37:58 +01:00
"metadata": {
"scrolled": false
},
2019-12-05 16:16:00 +01:00
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"1_1_21.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-09 19:37:58 +01:00
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
"\n",
"$\\sum_{j} \\sum_a \\hat{T}_{ij}^{ka} \\hat{T}_{a}^{j}$\n",
"\n",
"$j$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"\\begin{align}\n",
" \\sum_{a} \\sum_{j} \n",
" \\langle i j || k a \\rangle \n",
" \\left( f_{aj} +\\sum_{m} \\left[ m a || m j \\right] +\n",
" \\sum_{\\bar{m}} \\left[ \\bar{m} a | \\bar{m} j \\right] \\right) + \\\\\n",
" \\sum_{\\bar{a}} \\sum_{\\bar{j}} \n",
" \\langle i \\bar{j} | k \\bar{a} \\rangle\n",
" \\left( f_{\\bar{a}\\bar{j}} +\\sum_{m} \\left[ m \\bar{a} | m \\bar{j} \\right] +\n",
" \\sum_{\\bar{m}} \\left[ \\bar{m} \\bar{a} || \\bar{m} \\bar{j} \\right] \\right)\n",
"\\end{align}"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-09 19:37:58 +01:00
"let integral_value ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
" \n",
" let mos_i, mos_i' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a kj, mos_b kj\n",
" | Spin.Beta -> mos_b kj, mos_a kj\n",
" in\n",
"\n",
" let result = \n",
" let s' = Spin.other s in\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun a -> \n",
" sum mos_j (fun j -> \n",
2019-12-09 19:37:58 +01:00
" (h_two i j k a s s ) *.\n",
" (f_one a j s +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_i (fun m -> f_two m a m j s s) +.\n",
" sum mos_i' (fun m -> f_two m a m j s' s) ) \n",
" ) \n",
" +.\n",
" sum mos_j' (fun j -> \n",
2019-12-09 19:37:58 +01:00
" (h_two i j k a s s') *.\n",
" (f_one a j s' +. \n",
2019-12-12 18:41:14 +01:00
" sum mos_i (fun m -> f_two m a m j s s') +.\n",
" sum mos_i' (fun m -> f_two m a m j s' s') ) \n",
" )) \n",
2019-12-09 19:37:58 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 1 1 2 1"
2019-12-12 16:28:30 +01:00
]
},
2019-12-19 19:23:02 +01:00
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 48,
2019-12-19 19:23:02 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_1121_2Ha_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1121_2Hb_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Array3.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1121_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1121_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1121_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1121_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value_21 : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-19 19:23:02 +01:00
"source": [
"let m_1121_2Ha_1F = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Alfa *. f_one a j Spin.Alfa))\n",
"\n",
" \n",
"let m_1121_2Hb_1F = \n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Beta *. f_one a j Spin.Beta))\n",
"\n",
"\n",
"let m_1121_2Ha_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Alfa *.\n",
" f_two m a m j Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1121_2Hb_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Beta *.\n",
" f_two m a m j Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"let m_1121_2Ha_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Alfa *.\n",
" f_two m a m j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
"let m_1121_2Hb_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j k a Spin.Alfa Spin.Beta *.\n",
" f_two m a m j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
"\n",
2020-01-06 19:43:55 +01:00
"let integral_value_21 ki kj = \n",
2019-12-19 19:23:02 +01:00
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
" \n",
" let mos_i, mos_i' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a kj, mos_b kj\n",
" | Spin.Beta -> mos_b kj, mos_a kj\n",
" in\n",
" \n",
" let result = \n",
" sum mos_j (fun j -> \n",
" m_1121_2Ha_1F.{i,j,k} +. \n",
" sum mos_i (fun m -> m_1121_2Ha_2Fa.{i,j,k,m}) +.\n",
" sum mos_i' (fun m -> m_1121_2Ha_2Fb.{i,j,k,m})) +.\n",
" sum mos_j' (fun j ->\n",
" m_1121_2Hb_1F.{i,j,k} +. \n",
" sum mos_i (fun m -> m_1121_2Hb_2Fb.{i,j,k,m}) +.\n",
" sum mos_i' (fun m -> m_1121_2Hb_2Fa.{i,j,k,m}))\n",
" in\n",
" \n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
" \n",
"\n",
2020-01-06 19:43:55 +01:00
"(*\n",
"let _ = check 100 integral_value_21 1 1 2 1\n",
"*)"
2019-12-19 19:23:02 +01:00
]
},
2019-12-12 16:28:30 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-17 19:03:55 +01:00
"# 7. 1 1 22"
2019-12-09 19:37:58 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"1_1_22.png\""
2019-12-12 16:28:30 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
2019-12-09 19:37:58 +01:00
"\n",
2019-12-12 18:41:14 +01:00
"$\\sum_{j} \\sum_{a} \\sum_{m}\n",
2019-12-17 19:03:55 +01:00
" \\hat{T}_{ij}^{ma} \\hat{T}_{ma}^{kj} - \n",
2019-12-12 18:41:14 +01:00
" \\hat{T}_{lj}^{ka} \\hat{T}_{ia}^{lj} + \\\\\n",
"\\sum_{\\bar{j}} \\sum_{\\bar{a}} \\sum_{m}\n",
2019-12-19 19:23:02 +01:00
" \\hat{T}_{i\\bar{j}}^{m\\bar{a}} \\hat{T}_{m\\bar{a}}^{k\\bar{j}} - \n",
" \\hat{T}_{l\\bar{j}}^{k\\bar{a}} \\hat{T}_{i\\bar{a}}^{l\\bar{j}} +\n",
"\\sum_{\\bar{j}} \\sum_{a} \\sum_{\\bar{m}}\n",
" \\hat{T}_{i\\bar{j}}^{a\\bar{m}} \\hat{T}_{a\\bar{m}}^{k\\bar{j}} \n",
2019-12-12 18:41:14 +01:00
"$\n",
2019-12-09 19:37:58 +01:00
"\n",
2019-12-12 16:28:30 +01:00
"$j,l$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"$m$ : orbital indices of virtual MOs, unoccupied both in $|I\\rangle$ and $|J\\rangle$.\n",
2019-12-09 19:37:58 +01:00
"\n",
2019-12-12 18:41:14 +01:00
"$a$ : orbital indices of CABS MOs\n",
"\n",
2019-12-12 16:28:30 +01:00
"\\begin{align}\n",
2019-12-19 19:23:02 +01:00
" \\sum_{a} \\sum_{j} \\sum_{m}\n",
" \\langle i j || m a \\rangle \\left[ m a || k j \\right] - \\\\\n",
" \\sum_{a} \\sum_{j} \\sum_{l}\n",
" \\langle l j || k a \\rangle \\left[ i a || l j \\right] + \\\\\n",
" \\sum_{\\bar{a}} \\sum_{\\bar{j}} \\sum_{m}\n",
" \\langle i \\bar{j} | m \\bar{a} \\rangle \\left[ m \\bar{a} | k \\bar{j} \\right] + \\\\\n",
" \\sum_{\\bar{a}} \\sum_{\\bar{j}} \\sum_{l}\n",
" \\langle l \\bar{j} | k \\bar{a} \\rangle \\left[ i \\bar{a} | l \\bar{j} \\right] - \\\\\n",
" \\sum_{\\bar{a}} \\sum_{\\bar{j}} \\sum_{\\bar{m}}\n",
" \\langle i \\bar{j} | a \\bar{m} \\rangle \\left[ a \\bar{m} | k \\bar{j} \\right] \n",
2019-12-12 16:28:30 +01:00
"\\end{align}"
2019-12-05 16:16:00 +01:00
]
},
2019-12-20 16:09:02 +01:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(*\n",
"let ki = det_I.(6)\n",
"let kj = det_I.(58)\n",
"\n",
"let _ = \n",
" Format.printf \"|I> -> |J> : %a |\\n@.\" Excitation.pp (Excitation.of_det ki kj) ;\n",
"generate_alphas ki kj 1 1 2 2\n",
"|> Array.of_list\n",
"|> Array.mapi (fun kk alpha -> \n",
"\n",
"(*\n",
"let _ = Determinant.to_lists ki\n",
"let _ = Determinant.to_lists alpha\n",
"let _ = Determinant.to_lists kj\n",
"\n",
" \n",
"let _ = \n",
" Format.printf \"|I> -> |J> : %a\\n@.\" Excitation.pp (Excitation.of_det ki kj);\n",
" Format.printf \"|I> -> |a> : %a\\n@.\" Excitation.pp (Excitation.of_det ki alpha);\n",
" Format.printf \"|a> -> |J> : %a\\n@.\" Excitation.pp (Excitation.of_det alpha kj)\n",
"*)\n",
"\n",
" let integral_value ki kj = \n",
" \n",
" let exc0 = Array.init (aux_num+1) (fun _ -> [|\"-\";\"-\"|]) in\n",
" let exc1 = Array.init (aux_num+1) (fun _ -> [|\"-\";\"-\"|]) in \n",
" let exc2 = Array.init (aux_num+1) (fun _ -> [|\"-\";\"-\"|]) in \n",
" \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin } )) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" let spin = function\n",
" | Spin.Alfa -> 0\n",
" | _ -> 1\n",
" in\n",
" exc0.(i).(spin s ) <- \"i\" \n",
" ; exc0.(k).(spin s ) <- \"k\" \n",
" ;\n",
" let s0 = s in\n",
" \n",
" let i, j, k, l, s, s', p1 =\n",
" match Excitation.of_det ki alpha with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" if exc0.(i).(spin s ) = \"-\" then exc0.(i).(spin s ) <- \"n\";\n",
" if exc0.(j).(spin s') = \"-\" then exc0.(j).(spin s') <- \"n\";\n",
" if exc0.(k).(spin s ) = \"-\" then exc0.(k).(spin s ) <- if k > mo_num then \"a\" else \"m\";\n",
" if exc0.(l).(spin s') = \"-\" then exc0.(l).(spin s') <- if l > mo_num then \"a\" else \"m\";\n",
" \n",
" let string_h = \n",
" Printf.sprintf \"h_two %s %s %s %s %s %s *. \" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (if s = s0 then \"s \" else \"s'\")\n",
" (if s' = s0 then \"s \" else \"s'\")\n",
" (*\n",
" (if exc0.(i).(spin s ) = \"i\" || exc0.(k).(spin s ) = \"k\" then \"s \" else \n",
" if exc0.(i).(spin s ) = \"j\" || exc0.(k).(spin s ) = \"l\" then \"s' \" else \"s''\")\n",
" (if exc0.(j).(spin s') = \"i\" || exc0.(l).(spin s') = \"k\" then \"s \" else \n",
" if exc0.(j).(spin s') = \"j\" || exc0.(l).(spin s') = \"l\" then \"s' \" else \"s''\")\n",
" *)\n",
" in \n",
" \n",
" let i, j, k, l, s, s', p2 =\n",
" match Excitation.of_det alpha kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let string_f = \n",
" Printf.sprintf \"f_two %s %s %s %s %s %s\" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (*\n",
" (if exc0.(i).(spin s ) = \"i\" || exc0.(k).(spin s ) = \"k\" then \"s \" else \n",
" if exc0.(i).(spin s ) = \"j\" || exc0.(k).(spin s ) = \"l\" then \"s' \" else \n",
" if exc0.(i).(spin s ) = \"n\" || exc0.(k).(spin s ) = \"n\" then \"s''\" else\n",
" if s = s0 then \"s\" else \"s'\")\n",
" (if exc0.(j).(spin s') = \"i\" || exc0.(l).(spin s') = \"k\" then \"s \" else \n",
" if exc0.(j).(spin s') = \"j\" || exc0.(l).(spin s') = \"l\" then \"s' \" else \n",
" if exc0.(j).(spin s') = \"n\" || exc0.(l).(spin s') = \"n\" then \"s''\" else\n",
" if s' = s0 then \"s\" else \"s'\")\n",
" *)\n",
" (if s = s0 then \"s \" else \"s'\")\n",
" (if s' = s0 then \"s \" else \"s'\")\n",
" in\n",
" \n",
" Format.printf \"|I> -> |a> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det ki alpha) string_h ;\n",
" Format.printf \"|a> -> |J> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det alpha kj) string_f ;\n",
" \n",
" let sign = \n",
" if Phase.add p1 p2 = phase then \"+. \" else \"-. \"\n",
" in\n",
"sign ^ string_h ^ string_f\n",
"(*\n",
" \n",
" let mos, mos' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
"\n",
" let result = \n",
" let k=4 and l=5 in\n",
" let i=1 and j=2 in\n",
" let n=2 and a=7 in\n",
" let s = Spin.Alfa\n",
" and s' = Spin.Alfa\n",
" and s'' = Spin.Beta\n",
" in\n",
" (* \n",
" h_two j n l a s' s'' *. f_two a i n k s s''\n",
" *)\n",
" h_two i n k a s s'' *. f_two j a l n s s''\n",
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" *)\n",
"\n",
"in\n",
"integral_value ki kj\n",
"(*\n",
"let a = (compute_HaaF ki [alpha] kj)\n",
"and b = (integral_value ki kj)\n",
"in\n",
"if kk = 31 then\n",
" Format.printf \"%6d %e %e@.@.\" (kk) a b\n",
" *)\n",
")\n",
"|> Array.to_list\n",
"|> List.sort_uniq compare\n",
"\n",
"let _ = compute_HaaF ki (generate_alphas ki kj 1 1 2 2) kj\n",
"\n",
"let _ = integral_value ki kj\n",
"\n",
"*)"
]
},
2019-12-05 16:16:00 +01:00
{
2019-12-12 16:28:30 +01:00
"cell_type": "code",
"execution_count": null,
"metadata": {
2019-12-20 16:09:02 +01:00
"scrolled": false
2019-12-12 16:28:30 +01:00
},
"outputs": [],
2019-12-05 16:16:00 +01:00
"source": [
2019-12-20 16:09:02 +01:00
"let integral_value ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" (* MOs unoccupied in both I and J *)\n",
" let mos_virt_a, mos_virt_b = \n",
" Array.init mo_num (fun i -> Some (i+1)) , \n",
" Array.init mo_num (fun i -> Some (i+1)) \n",
" in\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a ki);\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a kj);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b ki);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b kj);\n",
" \n",
" let mos_virt_a, mos_virt_b = \n",
" Array.to_list mos_virt_a |> Util.list_some,\n",
" Array.to_list mos_virt_b |> Util.list_some\n",
" in\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
" let mos_virt, mos_virt' =\n",
" match s with\n",
" | Spin.Alfa -> mos_virt_a, mos_virt_b\n",
" | Spin.Beta -> mos_virt_b, mos_virt_a\n",
" in\n",
" \n",
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
" let result = \n",
" let s' = Spin.other s in\n",
" sum mos_cabs (fun a -> \n",
" sum mos_j (fun n -> \n",
" sum mos_virt (fun m -> \n",
" h_two n i a m s s *. f_two m a k n s s \n",
" ))) +.\n",
" sum mos_cabs (fun a' -> \n",
" sum mos_j' (fun n' -> \n",
" sum mos_virt (fun m -> \n",
" h_two i n' m a' s s' *. f_two m a' k n' s s'\n",
" ))) +.\n",
" sum mos_cabs (fun a -> \n",
" sum mos_j' (fun n' -> \n",
" sum mos_virt' (fun m' -> \n",
" h_two i n' a m' s s' *. f_two a m' k n' s s'\n",
" ))) -. \n",
" sum mos_cabs (fun a -> \n",
" sum mos_j (fun n -> \n",
" sum mos_j (fun l -> if l <=n then 0. else\n",
" h_two n l a k s s *. f_two i a l n s s \n",
" ))) -. \n",
" sum mos_cabs (fun a' -> \n",
" sum mos_j' (fun n' -> \n",
" sum mos_j (fun l -> \n",
" h_two l n' k a' s s' *. f_two i a' l n' s s'\n",
" ))) \n",
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"let _ = check 10 integral_value 1 1 2 2\n",
"\n"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 49,
2019-12-20 16:09:02 +01:00
"metadata": {
"scrolled": false
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_1122_va :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1122_v2 :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1122_v3 :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1122_oa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_1122_o :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value_22 : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-20 16:09:02 +01:00
"source": [
2019-12-19 19:23:02 +01:00
"let m_1122_va =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
2019-12-20 16:09:02 +01:00
" h_two j i a m Spin.Alfa Spin.Alfa *.\n",
2019-12-19 19:23:02 +01:00
" f_two m a k j Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
2019-12-20 16:09:02 +01:00
"let m_1122_v2 =\n",
2019-12-19 19:23:02 +01:00
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j m a Spin.Alfa Spin.Beta *.\n",
" f_two m a k j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
2019-12-20 16:09:02 +01:00
"let m_1122_v3 =\n",
2019-12-19 19:23:02 +01:00
" array_4_init mo_num mo_num mo_num mo_num (fun i j k m ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a m Spin.Alfa Spin.Beta *.\n",
" f_two a m k j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
2019-12-20 16:09:02 +01:00
"let m_1122_oa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two j l a k Spin.Alfa Spin.Alfa *.\n",
" f_two i a l j Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
"\n",
"let m_1122_o =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two l j k a Spin.Alfa Spin.Beta *.\n",
" f_two i a l j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
"\n",
2019-12-19 19:23:02 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let integral_value_22 ki kj = \n",
2019-12-12 16:28:30 +01:00
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
2019-12-12 18:41:14 +01:00
" (* MOs unoccupied in both I and J *)\n",
2019-12-12 16:28:30 +01:00
" let mos_virt_a, mos_virt_b = \n",
" Array.init mo_num (fun i -> Some (i+1)) , \n",
" Array.init mo_num (fun i -> Some (i+1)) \n",
" in\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a ki);\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a kj);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b ki);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b kj);\n",
" \n",
" let mos_virt_a, mos_virt_b = \n",
" Array.to_list mos_virt_a |> Util.list_some,\n",
" Array.to_list mos_virt_b |> Util.list_some\n",
" in\n",
"\n",
2019-12-20 16:09:02 +01:00
" let mos_virt, mos_virt' =\n",
2019-12-12 16:28:30 +01:00
" match s with\n",
2019-12-12 18:41:14 +01:00
" | Spin.Alfa -> mos_virt_a, mos_virt_b\n",
" | Spin.Beta -> mos_virt_b, mos_virt_a\n",
2019-12-20 16:09:02 +01:00
" in\n",
2019-12-12 16:28:30 +01:00
" \n",
2019-12-20 16:09:02 +01:00
" let mos_j, mos_j' =\n",
2019-12-12 16:28:30 +01:00
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
2019-12-20 16:09:02 +01:00
" in\n",
" \n",
2019-12-12 16:28:30 +01:00
" let result = \n",
2019-12-12 18:41:14 +01:00
" sum mos_j (fun j -> \n",
" sum mos_virt (fun m -> \n",
2019-12-19 19:23:02 +01:00
" m_1122_va.{i,j,k,m}\n",
" )) +.\n",
2019-12-12 18:41:14 +01:00
" sum mos_j' (fun j -> \n",
" sum mos_virt (fun m -> \n",
2019-12-20 16:09:02 +01:00
" m_1122_v2.{i,j,k,m}\n",
2019-12-19 19:23:02 +01:00
" )) +.\n",
2020-01-06 19:43:55 +01:00
" \n",
2019-12-12 18:41:14 +01:00
" sum mos_j' (fun j -> \n",
" sum mos_virt' (fun m -> \n",
2019-12-20 16:09:02 +01:00
" m_1122_v3.{i,j,k,m}\n",
2019-12-19 19:23:02 +01:00
" )) -.\n",
2019-12-12 18:41:14 +01:00
" sum mos_j (fun j -> \n",
2019-12-20 16:09:02 +01:00
" sum mos_j (fun l -> if l <= j then 0. else\n",
2019-12-19 19:23:02 +01:00
" m_1122_oa.{i,j,k,l}\n",
" )) -. \n",
2019-12-12 18:41:14 +01:00
" sum mos_j' (fun j -> \n",
2019-12-20 16:09:02 +01:00
" sum mos_j (fun l -> \n",
2019-12-19 19:23:02 +01:00
" m_1122_o.{i,j,k,l}\n",
" )) \n",
2019-12-12 16:28:30 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2020-01-06 19:43:55 +01:00
"(*\n",
"let _ = check 100 integral_value_22 1 1 2 2\n",
"*)\n",
2019-12-12 16:28:30 +01:00
"\n",
"\n"
2019-12-05 16:16:00 +01:00
]
},
2020-01-06 19:43:55 +01:00
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"val ki : Determinant.t =\n",
" phase:+1\n",
" a:+1 +------++-------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n",
"val kj : Determinant.t =\n",
" phase:+1\n",
" a:+1 ------+++-------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.029105573460178686\n"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"let ki = det_I.(77) and kj = det_I.(83)\n",
"\n",
"let _ =\n",
"integral_value_11 ki kj\n",
"+. integral_value_12 ki kj\n",
"+. integral_value_21 ki kj\n",
"+. integral_value_22 ki kj "
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-18 12:56:35 +01:00
"# 8. 1 2 22"
2019-12-04 18:13:54 +01:00
]
2019-12-03 18:52:03 +01:00
},
{
"cell_type": "code",
"execution_count": null,
2019-12-04 18:13:54 +01:00
"metadata": {},
2019-12-03 18:52:03 +01:00
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"1_2_22.png\""
2019-12-03 18:52:03 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-04 18:13:54 +01:00
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
"\n",
"$j$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
2019-12-17 19:03:55 +01:00
"$\\sum_{j} \\sum_{a} \\sum_{b}\n",
" \\hat{T}_{ij}^{ab} \\hat{T}_{ab}^{kj} +\n",
"\\sum_{\\bar{j}} \\sum_{a} \\sum_{\\bar{b}}\n",
" \\hat{T}_{i\\bar{j}}^{a\\bar{b}} \\hat{T}_{a\\bar{b}}^{k\\bar{j}} \n",
"$\n",
"\n",
2019-12-04 18:13:54 +01:00
"\n",
"$$\n",
"\\sum_{j} \\sum_{b}\\sum_{a<b}\n",
2019-12-17 19:03:55 +01:00
" \\langle i j || a b \\rangle \\left[ ab || kj \\right] + \n",
"\\sum_{\\bar{j}} \\sum_{\\bar{b}}\\sum_{a}\n",
" \\langle i \\bar{j} | a \\bar{b} \\rangle \\left[ a \\bar{b} | k \\bar{j} \\right] \n",
2019-12-04 18:13:54 +01:00
"$$"
2019-12-03 18:52:03 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
2019-12-03 12:25:31 +01:00
"source": [
2019-12-04 18:13:54 +01:00
"let integral_value ki kj = \n",
2019-12-05 16:16:00 +01:00
" let h, p, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
2019-12-04 18:13:54 +01:00
" in\n",
"\n",
2019-12-05 16:16:00 +01:00
" let mos, mos' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
2019-12-12 16:28:30 +01:00
" \n",
" \n",
2019-12-05 16:16:00 +01:00
"\n",
" let result = \n",
" (* Alpha-Beta *)\n",
2019-12-12 18:41:14 +01:00
" let s' = Spin.other s in\n",
" sum mos_cabs (fun b -> \n",
" sum mos_cabs (fun a -> \n",
" sum mos' (fun j -> h_two h j a b s s' *. f_two a b p j s s')\n",
" ))\n",
2019-12-05 16:16:00 +01:00
" +.\n",
" (* Alpha-Alpha / Beta-Beta *)\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun b -> \n",
" sum mos_cabs (fun a -> if b >= a then 0. else\n",
" sum mos (fun j -> h_two h j a b s s *. f_two a b p j s s)\n",
" )) \n",
2019-12-05 16:16:00 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 1 2 2 2"
2019-12-05 16:16:00 +01:00
]
},
2019-12-19 19:23:02 +01:00
{
"cell_type": "code",
"execution_count": null,
"metadata": {
2019-12-20 16:09:02 +01:00
"scrolled": false
2019-12-19 19:23:02 +01:00
},
"outputs": [],
"source": [
"let m_1222a =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" sum mos_cabs (fun b -> if b > a then 0. else\n",
" h_two i j a b Spin.Alfa Spin.Alfa *.\n",
" f_two a b k j Spin.Alfa Spin.Alfa \n",
" )\n",
" )\n",
" )\n",
"\n",
"let m_1222 =\n",
" array_3_init mo_num mo_num mo_num (fun i j k ->\n",
" sum mos_cabs (fun a ->\n",
" sum mos_cabs (fun b ->\n",
" h_two i j a b Spin.Alfa Spin.Beta *.\n",
" f_two a b k j Spin.Alfa Spin.Beta \n",
" )\n",
" )\n",
" )\n",
" \n",
"\n",
"let integral_value ki kj = \n",
" let i, k, s, phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Single (phase, { hole ; particle ; spin })) ->\n",
" hole, particle, spin, phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" (* MOs unoccupied in both I and J *)\n",
" let mos_j, mos_j' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
" in\n",
"\n",
" let result = \n",
" sum mos_j (fun j -> m_1222a.{i,j,k} ) +.\n",
" sum mos_j' (fun j -> m_1222.{i,j,k} )\n",
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 1 2 2 2\n",
2019-12-19 19:23:02 +01:00
"\n",
"\n"
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-19 19:23:02 +01:00
"# 9. 2 1 12"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"2_1_12.png\""
2019-12-05 16:16:00 +01:00
]
},
2019-12-17 19:03:55 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{ij}^{kl}|I\\rangle$\n",
"\n",
"$m$ : orbital indices of MOs unoccupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"$n$ : orbital indices of MOs occupied in $|I\\rangle$\n",
"\n",
"$\\sum_{a} \n",
" \\hat{T}_{i}^{a} \\hat{T}_{aj}^{kl} +\n",
2019-12-19 19:23:02 +01:00
" \\hat{T}_{j}^{a} \\hat{T}_{ia}^{kl} \n",
2019-12-17 19:03:55 +01:00
"$\n",
"\n",
"\n",
"$$\n",
"\\sum_{a}\n",
" \\left( h_{ia} + \\sum_{n} \\langle i n || a n \\rangle + \\sum_{\\bar{n}} \\langle i \\bar{n} | a \\bar{n} \\rangle \\right) \\left[ a j || k l \\right] + \\\\\n",
"\\sum_{a}\n",
2019-12-19 19:23:02 +01:00
" \\left( h_{ja} + \\sum_{n} \\langle j n || a n \\rangle + \\sum_{\\bar{n}} \\langle j \\bar{n} | a \\bar{n} \\rangle \\right) \\left[ i a || k l \\right] \n",
2019-12-17 19:03:55 +01:00
"$$"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 74,
2019-12-19 19:23:02 +01:00
"metadata": {
"scrolled": true
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val ki : Determinant.t =\n",
" phase:+1\n",
" a:+1 +-++------------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val kj : Determinant.t =\n",
" phase:+1\n",
" a:+1 ---+-++---------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.00102394452584360905\n"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.00102394452584360926\n"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-17 19:03:55 +01:00
"source": [
"let integral_value ki kj = \n",
" let i, j, k, l, s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
" let mos, mos' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
2019-12-19 19:23:02 +01:00
" \n",
" let mos2, mos2' =\n",
" match s' with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
2019-12-17 19:03:55 +01:00
"\n",
" let result = \n",
" sum mos_cabs (fun a -> \n",
2019-12-19 19:23:02 +01:00
" let s'' = Spin.other s in\n",
2019-12-17 19:03:55 +01:00
" ( h_one i a s +.\n",
2019-12-19 19:23:02 +01:00
" sum mos (fun n -> h_two i n a n s s ) +.\n",
" sum mos' (fun n -> h_two i n a n s s'') \n",
" ) *. f_two a j k l s s'\n",
2019-12-17 19:03:55 +01:00
" ) +.\n",
" sum mos_cabs (fun a -> \n",
2019-12-19 19:23:02 +01:00
" let s'' = Spin.other s' in\n",
" ( h_one j a s' +.\n",
" sum mos2 (fun n -> h_two j n a n s' s' ) +.\n",
" sum mos2' (fun n -> h_two j n a n s' s'') \n",
" ) *. f_two i a k l s s'\n",
2019-12-17 19:03:55 +01:00
" ) \n",
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
"\n",
"\n",
2020-01-06 19:43:55 +01:00
"let _ = check 100 integral_value 2 1 1 2\n"
2019-12-17 19:03:55 +01:00
]
},
2019-12-19 19:23:02 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{ij}^{kl}|I\\rangle$\n",
"\n",
"$m$ : orbital indices of MOs unoccupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"$n$ : orbital indices of MOs occupied in $|I\\rangle$\n",
"\n",
"$\\sum_{a} \n",
" \\hat{T}_{i}^{a} \\hat{T}_{aj}^{kl} +\n",
" \\hat{T}_{j}^{a} \\hat{T}_{ia}^{kl} \n",
"$\n",
"\n",
"\n",
"$$\n",
"\\sum_{a}\n",
" \\left( h_{ia} + \\sum_{n} \\langle i n || a n \\rangle + \\sum_{\\bar{n}} \\langle i \\bar{n} | a \\bar{n} \\rangle \\right) \\left[ a j || k l \\right] + \\\\\n",
"\\sum_{a}\n",
" \\left( h_{ja} + \\sum_{n} \\langle j n || a n \\rangle + \\sum_{\\bar{n}} \\langle j \\bar{n} | a \\bar{n} \\rangle \\right) \\left[ i a || k l \\right] \n",
"$$"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 78,
2019-12-19 19:23:02 +01:00
"metadata": {
2019-12-20 16:09:02 +01:00
"scrolled": false
2019-12-19 19:23:02 +01:00
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_2112_1H_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2112_1H_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2112_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2112_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2112_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2112_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val ki : Determinant.t =\n",
" phase:+1\n",
" a:+1 +-++------------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val kj : Determinant.t =\n",
" phase:+1\n",
" a:+1 ---+-++---------------------------------------------------------\n",
" b:+1 +++-------------------------------------------------------------\n",
"\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.00102394452584360905\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"- : float = -0.00102394452584360926\n"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-19 19:23:02 +01:00
"source": [
"let m_2112_1H_2Fa =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j k l Spin.Alfa Spin.Alfa +.\n",
" h_one j a Spin.Alfa *. f_two i a k l Spin.Alfa Spin.Alfa )\n",
" )\n",
"\n",
"let m_2112_1H_2Fb =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_one i a Spin.Alfa *. f_two a j k l Spin.Alfa Spin.Beta +.\n",
" h_one j a Spin.Alfa *. f_two i a k l Spin.Alfa Spin.Beta)\n",
" )\n",
"\n",
"let m_2112_2Ha_2Fa =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i n a n Spin.Alfa Spin.Alfa *.\n",
" f_two a j k l Spin.Alfa Spin.Alfa )\n",
" )\n",
" \n",
"let m_2112_2Hb_2Fa =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i n a n Spin.Alfa Spin.Beta *.\n",
" f_two a j k l Spin.Alfa Spin.Alfa )\n",
" )\n",
" \n",
"let m_2112_2Ha_2Fb =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i n a n Spin.Alfa Spin.Alfa *.\n",
" f_two a j k l Spin.Alfa Spin.Beta )\n",
" )\n",
" \n",
"let m_2112_2Hb_2Fb =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i n a n Spin.Alfa Spin.Beta *.\n",
" f_two a j k l Spin.Alfa Spin.Beta )\n",
" )\n",
" \n",
"let integral_value ki kj = \n",
" let i, j, k, l, s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" let mos, mos' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a ki, mos_b ki\n",
" | Spin.Beta -> mos_b ki, mos_a ki\n",
" in\n",
" \n",
" let result = \n",
" if s = s' then\n",
" m_2112_1H_2Fa.{i,j,k,l} +. \n",
" sum mos (fun n ->\n",
" m_2112_2Ha_2Fa.{i,j,k,l,n} +. m_2112_2Ha_2Fa.{j,i,l,k,n}\n",
" ) +.\n",
" sum mos' (fun n ->\n",
" m_2112_2Hb_2Fa.{i,j,k,l,n} +. m_2112_2Hb_2Fa.{j,i,l,k,n}\n",
" ) \n",
" else\n",
" m_2112_1H_2Fb.{i,j,k,l} +.\n",
2020-01-06 19:43:55 +01:00
" 0. (*\n",
2019-12-19 19:23:02 +01:00
" sum mos (fun n ->\n",
" m_2112_2Ha_2Fb.{i,j,k,l,n} +. m_2112_2Hb_2Fb.{j,i,l,k,n}\n",
" ) +.\n",
" sum mos' (fun n ->\n",
" m_2112_2Hb_2Fb.{i,j,k,l,n} +. m_2112_2Ha_2Fb.{j,i,l,k,n}\n",
" ) \n",
2020-01-06 19:43:55 +01:00
" *)\n",
2019-12-19 19:23:02 +01:00
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 2 1 1 2\n",
2019-12-19 19:23:02 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let ki = det_I.(2)\n",
"let kj = det_I.(33)\n",
"\n",
"let _ = integral_value ki kj\n",
"let _ = \n",
" let alphas = generate_alphas ki kj 2 1 1 2\n",
" in compute_HaaF ki alphas kj\n",
2019-12-19 19:23:02 +01:00
"\n"
]
},
2019-12-18 12:56:35 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 10. 2 1 21"
]
},
2019-12-17 19:03:55 +01:00
{
"cell_type": "code",
"execution_count": null,
2019-12-18 12:56:35 +01:00
"metadata": {},
2019-12-17 19:03:55 +01:00
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"2_1_21.png\""
2019-12-18 12:56:35 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{ij}^{kl}|I\\rangle$\n",
2019-12-17 19:03:55 +01:00
"\n",
2019-12-18 12:56:35 +01:00
"$m$ : orbital indices of MOs unoccupied both in $|I\\rangle$ and $|J\\rangle$.\n",
2019-12-17 19:03:55 +01:00
"\n",
2019-12-19 19:23:02 +01:00
"$n$ : orbital indices of MOs occupied in $|J\\rangle$\n",
2019-12-17 19:03:55 +01:00
"\n",
2019-12-18 12:56:35 +01:00
"$\\sum_{a} \n",
" \\hat{T}_{ij}^{al} \\hat{T}_{a}^{k} +\n",
" \\hat{T}_{ij}^{ka} \\hat{T}_{a}^{l} +\n",
" \\hat{T}_{i\\bar{j}}^{a\\bar{l}} \\hat{T}_{a}^{k} +\n",
" \\hat{T}_{i\\bar{j}}^{k\\bar{a}} \\hat{T}_{\\bar{a}}^{\\bar{l}}\n",
"$\n",
"\n",
"\n",
"$$\n",
"\\sum_{a}\n",
" \\langle i j || a l \\rangle \\left( f_{ak} + \\sum_{n} \\left[ a n || k n \\right] + \\sum_{\\bar{n}} \\left[ a \\bar{n} | k \\bar{n} \\right] \\right) + \\\\\n",
"\\sum_{a}\n",
" \\langle i j || k a \\rangle \\left( f_{al} + \\sum_{n} \\left[ n a || n l \\right] + \\sum_{\\bar{n}} \\left[ \\bar{n} a | \\bar{n} l \\right] \\right) \n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"let integral_value ki kj = \n",
2019-12-17 19:03:55 +01:00
" let i, j, k, l, s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
2019-12-18 12:56:35 +01:00
" hole, hole', particle, particle', spin, spin', phase\n",
2019-12-17 19:03:55 +01:00
" | _ -> assert false\n",
" in\n",
"\n",
2019-12-18 12:56:35 +01:00
" let result = \n",
2019-12-17 19:03:55 +01:00
" \n",
2019-12-18 12:56:35 +01:00
" let mos, mos', s'' =\n",
2019-12-17 19:03:55 +01:00
" match s with\n",
2019-12-18 12:56:35 +01:00
" | Spin.Alfa -> mos_a kj, mos_b kj, Spin.Beta\n",
" | Spin.Beta -> mos_b kj, mos_a kj, Spin.Alfa\n",
2019-12-17 19:03:55 +01:00
" in\n",
2019-12-18 12:56:35 +01:00
" sum mos_cabs (fun a -> \n",
" h_two i j a l s s' *.\n",
" ( f_one a k s +.\n",
" sum mos (fun n -> f_two a n k n s s) +.\n",
" sum mos' (fun n -> f_two a n k n s s'') \n",
" ) ) +.\n",
"\n",
" let mos, mos', s'' =\n",
" match s' with\n",
" | Spin.Alfa -> mos_a kj, mos_b kj, Spin.Beta\n",
" | Spin.Beta -> mos_b kj, mos_a kj, Spin.Alfa\n",
" in\n",
" sum mos_cabs (fun a -> \n",
2019-12-19 19:23:02 +01:00
" h_two j i a k s' s *.\n",
2019-12-18 12:56:35 +01:00
" ( f_one a l s' +.\n",
2019-12-19 19:23:02 +01:00
" sum mos (fun n -> f_two a n l n s' s') +.\n",
" sum mos' (fun n -> f_two a n l n s' s'') \n",
2019-12-18 12:56:35 +01:00
" ) \n",
" ) \n",
2019-12-17 19:03:55 +01:00
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
"\n",
2019-12-18 12:56:35 +01:00
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 2 1 2 1"
2019-12-17 19:03:55 +01:00
]
},
2019-12-19 19:23:02 +01:00
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 81,
2019-12-19 19:23:02 +01:00
"metadata": {
2019-12-20 16:09:02 +01:00
"scrolled": false
2019-12-19 19:23:02 +01:00
},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val m_2121_2Ha_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2121_2Hb_1F :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2121_2Ha_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2121_2Hb_2Fa :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2121_2Ha_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val m_2121_2Hb_2Fb :\n",
" (float, Bigarray.float64_elt, Bigarray.fortran_layout) Bigarray.Genarray.t =\n",
" <abstr>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (25, 59) | 2.096432e-03 2.096432e-03 | 8.673617e-19 | cpu : 0.111770 0.004378\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-19 19:23:02 +01:00
"source": [
"let m_2121_2Ha_1F =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Alfa *. f_one a k Spin.Alfa +.\n",
" h_two i j k a Spin.Alfa Spin.Alfa *. f_one a l Spin.Alfa)\n",
" )\n",
"\n",
"let m_2121_2Hb_1F =\n",
" array_4_init mo_num mo_num mo_num mo_num (fun i j k l ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Beta *. f_one a k Spin.Alfa +.\n",
" h_two i j k a Spin.Alfa Spin.Beta *. f_one a l Spin.Alfa)\n",
" )\n",
"\n",
"let m_2121_2Ha_2Fa =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Alfa *.\n",
" f_two a n k n Spin.Alfa Spin.Alfa )\n",
" )\n",
" \n",
"let m_2121_2Hb_2Fa =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Beta *.\n",
" f_two a n k n Spin.Alfa Spin.Alfa )\n",
" )\n",
" \n",
"let m_2121_2Ha_2Fb =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Alfa *.\n",
" f_two a n k n Spin.Alfa Spin.Beta )\n",
" )\n",
" \n",
"let m_2121_2Hb_2Fb =\n",
" array_5_init mo_num mo_num mo_num mo_num mo_num (fun i j k l n ->\n",
" sum mos_cabs (fun a ->\n",
" h_two i j a l Spin.Alfa Spin.Beta *.\n",
" f_two a n k n Spin.Alfa Spin.Beta )\n",
" )\n",
" \n",
"let integral_value ki kj = \n",
" let i, j, k, l, s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" let mos, mos' =\n",
" match s with\n",
" | Spin.Alfa -> mos_a kj, mos_b kj\n",
" | Spin.Beta -> mos_b kj, mos_a kj\n",
" in\n",
" \n",
" let result = \n",
" if s = s' then\n",
" m_2121_2Ha_1F.{i,j,k,l} +. \n",
" sum mos (fun n ->\n",
" m_2121_2Ha_2Fa.{i,j,k,l,n} +. m_2121_2Ha_2Fa.{j,i,l,k,n}\n",
" ) +.\n",
" sum mos' (fun n ->\n",
" m_2121_2Ha_2Fb.{i,j,k,l,n} +. m_2121_2Ha_2Fb.{j,i,l,k,n}\n",
" ) \n",
" else\n",
" m_2121_2Hb_1F.{i,j,k,l} +.\n",
" sum mos (fun n ->\n",
" m_2121_2Hb_2Fa.{i,j,k,l,n} +. m_2121_2Hb_2Fb.{j,i,l,k,n}\n",
" ) +.\n",
" sum mos' (fun n ->\n",
" m_2121_2Hb_2Fb.{i,j,k,l,n} +. m_2121_2Hb_2Fa.{j,i,l,k,n}\n",
" ) \n",
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 100 integral_value 2 1 2 1\n",
2019-12-19 19:23:02 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"(*\n",
"let ki = det_I.(2)\n",
"let kj = det_I.(33)\n",
"\n",
"let _ = integral_value ki kj\n",
"let _ = \n",
" let alphas = generate_alphas ki kj 2 1 2 1\n",
" in compute_HaaF ki alphas kj\n",
"*)\n",
"\n",
2019-12-19 19:23:02 +01:00
"\n"
]
},
2019-12-05 16:16:00 +01:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-20 16:09:02 +01:00
"# 11. 2 1 22"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-19 19:23:02 +01:00
"let _ = png_image \"2_1_22.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-12-18 12:56:35 +01:00
"$|J\\rangle = \\hat{T}_{ij}^{kl}|I\\rangle$\n",
"\n",
"$m$ : orbital indices of MOs unoccupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
2019-12-19 19:23:02 +01:00
"$n$ : orbital indices of MOs occupied in both $|I\\rangle$ and $|J\\rangle$ .\n",
2019-12-18 12:56:35 +01:00
"\n",
"$\\sum_{a} \n",
" \\hat{T}_{ij}^{am} \\hat{T}_{am}^{kl} +\n",
" \\hat{T}_{ij}^{ma} \\hat{T}_{ma}^{kl} -\n",
" \\hat{T}_{in}^{al} \\hat{T}_{aj}^{kn} -\n",
2019-12-19 19:23:02 +01:00
" \\hat{T}_{nj}^{ka} \\hat{T}_{ia}^{nl} +\n",
" \\sum_{n}\n",
" \\hat{T}_{i\\bar{n}}^{k\\bar{a}} \\hat{T}_{\\bar{a}j}^{\\bar{n}l}\n",
2019-12-18 12:56:35 +01:00
"$\n",
"\n",
"\n",
"$$\n",
"\\sum_{a}\n",
"\\sum_{m} \\langle i j || a m \\rangle \\left[ a m || k l \\right] + \\langle i j || m a \\rangle \\left[ m a || k l \\right] - \\\\\n",
"\\sum_{n} \\langle i n || a l \\rangle \\left[ a j || k n \\right] + \\langle n j || k a \\rangle \\left[ i a || n l \\right] \n",
"$$"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2019-12-18 12:56:35 +01:00
"let integral_value ki kj = \n",
" let i, j, k, l, s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
" let mos_virt_a, mos_virt_b = \n",
" Array.init mo_num (fun i -> Some (i+1)) , \n",
" Array.init mo_num (fun i -> Some (i+1)) \n",
" in\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a ki);\n",
" List.iter (fun i -> mos_virt_a.(i-1) <- None) (mos_a kj);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b ki);\n",
" List.iter (fun i -> mos_virt_b.(i-1) <- None) (mos_b kj);\n",
"\n",
" let mos_virt_a, mos_virt_b = \n",
" Array.to_list mos_virt_a |> Util.list_some,\n",
" Array.to_list mos_virt_b |> Util.list_some\n",
" in\n",
" \n",
" let result = \n",
" \n",
2019-12-20 16:09:02 +01:00
" let mos_virt, mos_virt' =\n",
2019-12-18 12:56:35 +01:00
" match s with\n",
2019-12-20 16:09:02 +01:00
" | Spin.Alfa -> mos_virt_a, mos_virt_b\n",
" | Spin.Beta -> mos_virt_b, mos_virt_a\n",
2019-12-18 12:56:35 +01:00
" in\n",
" \n",
2019-12-20 16:09:02 +01:00
" let mos, mos' =\n",
" let alfa = \n",
" let i = Spindeterminant.bitstring @@ Determinant.alfa ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.alfa kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" let beta = \n",
" let i = Spindeterminant.bitstring @@ Determinant.beta ki in\n",
" let j = Spindeterminant.bitstring @@ Determinant.beta kj in\n",
" Bitstring.to_list (Bitstring.logand i j)\n",
" in\n",
" match s with\n",
" | Spin.Alfa -> alfa, beta\n",
" | Spin.Beta -> beta, alfa\n",
2019-12-18 12:56:35 +01:00
" in\n",
2019-12-20 16:09:02 +01:00
"\n",
" if s = s' then \n",
" let s'' = Spin.other s' in\n",
" sum mos_cabs (fun a -> \n",
2019-12-19 19:23:02 +01:00
" sum mos (fun n ->\n",
2019-12-20 16:09:02 +01:00
" h_two i n a k s s *. f_two j a n l s s \n",
" +. h_two i n a l s s *. f_two j a k n s s \n",
" -. h_two j n a k s s *. f_two i a n l s s \n",
" -. h_two j n a l s s *. f_two i a k n s s\n",
" )\n",
" +. sum mos_virt (fun m ->\n",
" -. h_two i j a m s s *. f_two m a k l s s )\n",
" +. sum mos' (fun n ->\n",
" h_two i n k a s s'' *. f_two j a l n s s''\n",
" +. h_two j n l a s s'' *. f_two i a k n s s''\n",
" -. h_two i n l a s s'' *. f_two j a k n s s''\n",
" -. h_two j n k a s s'' *. f_two i a l n s s''\n",
" )\n",
" )\n",
" else\n",
" sum mos_cabs (fun a ->\n",
" sum mos_virt' (fun m ->\n",
" h_two i j a m s s' *. f_two a m k l s s' ) +.\n",
" sum mos_virt (fun m ->\n",
" h_two i j m a s s' *. f_two m a k l s s' ) +.\n",
" sum mos (fun n ->\n",
" h_two n i a k s s *. f_two a j n l s s'\n",
" +. h_two n j a l s s' *. f_two i a k n s s \n",
" -. h_two n j k a s s' *. f_two i a n l s s'\n",
" ) +.\n",
" sum mos' (fun n -> if n >= j then 0. else \n",
" h_two i n k a s s' *. f_two j a l n s' s'\n",
" +. h_two n j a l s' s' *. f_two i a k n s s' ) +. \n",
" sum mos' (fun n -> if n <= j then 0. else \n",
" -. h_two i n k a s s' *. f_two j a n l s' s' \n",
" -. h_two j n a l s' s' *. f_two i a k n s s' ) +.\n",
2019-12-19 19:23:02 +01:00
" sum mos' (fun n -> \n",
2019-12-20 16:09:02 +01:00
" -. h_two i n a l s s' *. f_two a j k n s s'\n",
" )\n",
" )\n",
2019-12-18 12:56:35 +01:00
" in\n",
"\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
"\n",
"\n",
2019-12-20 16:09:02 +01:00
"let _ = check 300 integral_value 2 1 2 2"
2019-12-19 19:23:02 +01:00
]
},
{
2020-01-06 19:43:55 +01:00
"cell_type": "raw",
2019-12-20 16:09:02 +01:00
"metadata": {
2020-01-06 19:43:55 +01:00
"raw_mimetype": "text/markdown",
2019-12-20 16:09:02 +01:00
"scrolled": false
},
2019-12-19 19:23:02 +01:00
"source": [
2019-12-20 16:09:02 +01:00
"let ki = det_I.(99)\n",
"let kj = det_I.(193)\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
"let alpha_to_string alpha = \n",
2019-12-19 19:23:02 +01:00
" \n",
2019-12-20 16:09:02 +01:00
" let exc0 = Array.init (aux_num+1) (fun _ -> [|\"-\";\"-\"|]) in\n",
" \n",
" let i, j, k, l, s, s', phase =\n",
2019-12-19 19:23:02 +01:00
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
2019-12-20 16:09:02 +01:00
" hole, hole', particle, particle', spin, spin', phase\n",
2019-12-19 19:23:02 +01:00
" | _ -> assert false\n",
2019-12-20 16:09:02 +01:00
" in\n",
" let spin = function\n",
" | Spin.Alfa -> 0\n",
" | _ -> 1\n",
" in\n",
" exc0.(i).(spin s ) <- \"i\" \n",
" ; exc0.(j).(spin s') <- \"j\" \n",
" ; exc0.(k).(spin s ) <- \"k\" \n",
" ; exc0.(l).(spin s') <- \"l\" \n",
" ;\n",
" let s0, s0' = s, s' in\n",
" \n",
" let i, j, k, l, s, s', p1 =\n",
" match Excitation.of_det ki alpha with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" if exc0.(i).(spin s ) = \"-\" then exc0.(i).(spin s ) <- \"n\";\n",
" if exc0.(j).(spin s') = \"-\" then exc0.(j).(spin s') <- \"n\";\n",
" if exc0.(k).(spin s ) = \"-\" then exc0.(k).(spin s ) <- if k > mo_num then \"a\" else \"m\";\n",
" if exc0.(l).(spin s') = \"-\" then exc0.(l).(spin s') <- if l > mo_num then \"a\" else \"m\";\n",
" \n",
" let string_h = \n",
" Printf.sprintf \"h_two %s %s %s %s %s %s *. \" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (if s = s0 then \"s \" else \"s'\")\n",
" (if s' = s0 then \"s \" else \"s'\")\n",
" in \n",
" \n",
" let i, j, k, l, s, s', p2 =\n",
" match Excitation.of_det alpha kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let string_f = \n",
" Printf.sprintf \"f_two %s %s %s %s %s %s\" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (if s = s0 then \"s \" else \"s'\")\n",
" (if s' = s0 then \"s \" else \"s'\")\n",
" in\n",
"(*\n",
" Format.printf \"|I> -> |a> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det ki alpha) string_h ;\n",
" Format.printf \"|a> -> |J> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det alpha kj) string_f ;\n",
" *)\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
" \n",
" let sign = \n",
" if Phase.add p1 p2 = phase then \"+.\" else \"-.\"\n",
2019-12-19 19:23:02 +01:00
" in\n",
2019-12-20 16:09:02 +01:00
" sign ^ string_h ^ string_f\n",
" \n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
"let alpha_debug alpha = \n",
" \n",
" let i, j, k, l, s, s', p1 =\n",
" match Excitation.of_det ki alpha with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" Printf.printf \"%d %d %d %d \" i j k l;\n",
" \n",
" let i, j, k, l, s, s', p2 =\n",
" match Excitation.of_det alpha kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" (*\n",
" Format.printf \"|I> -> |a> : %a | \\n@.\" Excitation.pp (Excitation.of_det ki alpha) ;\n",
" Format.printf \"|a> -> |J> : %a | \\n@.\" Excitation.pp (Excitation.of_det alpha kj) ;\n",
2019-12-19 19:23:02 +01:00
" *)\n",
2019-12-20 16:09:02 +01:00
" Printf.printf \"%d %d %d %d \\n%!\" i j k l\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
" \n",
"let strings = \n",
" Format.printf \"|I> -> |J> : %a |\\n@.\" Excitation.pp (Excitation.of_det ki kj) ;\n",
" generate_alphas ki kj 2 1 2 2\n",
" |> Array.of_list\n",
" |> Array.mapi (fun kk alpha -> alpha_to_string alpha)\n",
" |> Array.to_list\n",
" |> List.sort_uniq compare\n",
" |> Array.of_list\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
"let _ = Array.iteri (fun i x -> Printf.printf \"%d %s \\n%!\" i x) strings\n",
2019-12-19 19:23:02 +01:00
"\n",
2019-12-20 16:09:02 +01:00
"let _ =\n",
" let v =\n",
" let alphas =\n",
" generate_alphas ki kj 2 1 2 2\n",
" (*\n",
" |> List.filter (fun alpha ->\n",
" let x = alpha_to_string alpha in\n",
" x = strings.(6)\n",
" )\n",
" *)\n",
" in\n",
" (*\n",
" List.iter alpha_debug alphas ;\n",
" Printf.printf \"\\n%!\";\n",
" *)\n",
" compute_HaaF ki alphas kj \n",
" in\n",
" let x = (integral_value ki kj) in\n",
" Printf.printf \"%20.8e %20.8e %20.8e\\n%!\" x v (v-. x)\n"
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 12. 2 2 22"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2020-01-06 19:43:55 +01:00
"let _ = png_image \"2_2_22.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{ij}^{kl}|I\\rangle$\n",
"\n",
"$$\n",
"\\sum_{b}\\sum_{a<b}\n",
" \\langle i j || a b \\rangle \n",
" \\left[ ab || kj \\right]\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"let integral_value ki kj = \n",
" let h, h', p, p', s, s', phase =\n",
" match Excitation.of_det ki kj with\n",
" | Excitation.(Double (phase,\n",
" { hole=h ; particle=p ; spin=s },\n",
" { hole=h'; particle=p'; spin=s'}) ) -> h, h', p, p', s, s', phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
" let result = \n",
" if s <> s' then (* Alpha-Beta *)\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun b -> \n",
" sum mos_cabs (fun a -> \n",
" h_two h h' a b s s' *. f_two a b p p' s s'\n",
" )) \n",
2019-12-05 16:16:00 +01:00
" else (* Alpha-Alpha / Beta-Beta *)\n",
2019-12-12 18:41:14 +01:00
" sum mos_cabs (fun b -> \n",
" sum mos_cabs (fun a -> if b >= a then 0. else\n",
" h_two h h' a b s s' *. f_two a b p p' s s'\n",
" )) \n",
2019-12-05 16:16:00 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
"let _ = check 100 integral_value 2 2 2 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 13. *3 1 2 2*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
2020-01-06 19:43:55 +01:00
"let _ = png_image \"3_1_22.png\""
2019-12-05 16:16:00 +01:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|J\\rangle = \\hat{T}_{ijm}^{kln}|I\\rangle$\n",
"\n",
2019-12-18 12:56:35 +01:00
"$\\sum_{a}\n",
" \\hat{T}_{ij}^{al} \\hat{T}_{am}^{kn} \n",
" + \\hat{T}_{ij}^{ka} \\hat{T}_{am}^{ln} \n",
" + \\hat{T}_{im}^{ka} \\hat{T}_{ja}^{ln} \n",
" + \\hat{T}_{im}^{an} \\hat{T}_{aj}^{kl} \n",
" + \\hat{T}_{jm}^{an} \\hat{T}_{ia}^{kl} \n",
" + \\hat{T}_{jm}^{la} \\hat{T}_{ia}^{kn} \n",
"$\n",
"\n",
2019-12-05 16:16:00 +01:00
"$$\n",
2019-12-18 12:56:35 +01:00
"\\sum_{a} \\langle i j || a l \\rangle \\left[ a m || k n \\right] +\n",
" \\langle i j || k a \\rangle \\left[ a m || l n \\right] +\n",
" \\langle i m || k a \\rangle \\left[ j a || l n \\right] +\n",
" \\langle i m || a n \\rangle \\left[ a j || k l \\right] +\n",
" \\langle j m || a n \\rangle \\left[ i a || k l \\right] +\n",
" \\langle j m || l a \\rangle \\left[ i a || k n \\right] \n",
2019-12-05 16:16:00 +01:00
"$$"
]
},
{
"cell_type": "code",
2020-01-06 19:43:55 +01:00
"execution_count": 419,
2019-12-05 16:16:00 +01:00
"metadata": {},
2020-01-06 19:43:55 +01:00
"outputs": [
{
"data": {
"text/plain": [
"val integral_value : Determinant.t -> Determinant.t -> float = <fun>\n"
]
},
"execution_count": 419,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Checking ... \n",
" - 10 %\n",
" - 20 %\n",
" - 30 %\n",
" - 40 %\n",
" - 50 %\n",
" - 60 %\n",
" - 70 %\n",
" - 80 %\n",
" - 90 %\n",
" - 100 %\n",
"OK: (24, 43) | 1.154913e-03 1.154913e-03 | 6.505213e-19 | cpu : 10.122233 0.688825\n"
]
},
{
"data": {
"text/plain": [
"- : unit = ()\n"
]
},
"execution_count": 419,
"metadata": {},
"output_type": "execute_result"
}
],
2019-12-05 16:16:00 +01:00
"source": [
"let integral_value ki kj = \n",
2019-12-18 12:56:35 +01:00
" let i, j, m, k, l, n, s1, s2, s3, phase =\n",
2019-12-05 16:16:00 +01:00
" match Excitation.of_det ki kj with\n",
" | Excitation.(Triple (phase,\n",
" { hole=h1 ; particle=p1 ; spin=s1 },\n",
" { hole=h2 ; particle=p2 ; spin=s2 },\n",
" { hole=h3 ; particle=p3 ; spin=s3 }) ) -> h1, h2, h3, p1, p2, p3, s1, s2, s3, phase\n",
" | _ -> assert false\n",
" in\n",
"\n",
" let result = \n",
2020-01-06 19:43:55 +01:00
" let open Spin in \n",
" match s1, s2, s3 with\n",
" | Alfa, Alfa, Alfa\n",
" | Beta, Beta, Beta -> \n",
" sum mos_cabs (fun a -> \n",
" h_two i j a k s1 s2 *. f_two m a l n s3 s3 \n",
" +. h_two i j a n s1 s2 *. f_two m a k l s3 s2 \n",
" +. h_two i m a l s1 s3 *. f_two j a k n s2 s3 \n",
" +. h_two j m a k s2 s3 *. f_two i a l n s1 s3 \n",
" +. h_two j m a n s2 s3 *. f_two i a k l s1 s2 \n",
" -. h_two i j a l s1 s2 *. f_two m a k n s3 s3 \n",
" -. h_two i m a k s1 s3 *. f_two j a l n s2 s3 \n",
" -. h_two i m a n s1 s3 *. f_two j a k l s2 s2 \n",
" -. h_two j m a l s2 s3 *. f_two i a k n s1 s3 )\n",
" | Alfa, Alfa, Beta\n",
" | Beta, Beta, Alfa -> \n",
" sum mos_cabs (fun a -> \n",
" h_two i j a l s1 s2 *. f_two a m k n s1 s3\n",
" +. h_two i m k a s1 s3 *. f_two j a l n s2 s3\n",
" +. h_two j m a n s2 s3 *. f_two i a k l s1 s2 \n",
" +. h_two j m l a s2 s3 *. f_two i a k n s1 s3\n",
" -. h_two i j a k s1 s2 *. f_two a m l n s1 s3\n",
" -. h_two i m a n s1 s3 *. f_two j a k l s2 s2 \n",
" -. h_two i m l a s1 s3 *. f_two j a k n s2 s3\n",
" -. h_two j m k a s2 s3 *. f_two i a l n s1 s3\n",
2019-12-18 12:56:35 +01:00
" ) \n",
2020-01-06 19:43:55 +01:00
" | Alfa, Beta, Beta\n",
" | Beta, Alfa, Alfa -> \n",
" sum mos_cabs (fun a -> \n",
" h_two i j a l s1 s2 *. f_two a m k n s1 s3 \n",
" +. h_two i m a n s1 s3 *. f_two a j k l s1 s2 \n",
" +. h_two i m k a s1 s3 *. f_two j a l n s2 s3 \n",
" +. h_two j m a n s2 s3 *. f_two i a k l s1 s2 \n",
" -. h_two i j a n s1 s2 *. f_two a m k l s1 s2 \n",
" -. h_two i j k a s1 s2 *. f_two m a l n s2 s3 \n",
" -. h_two i m a l s1 s3 *. f_two a j k n s1 s3 \n",
" -. h_two j m a l s2 s3 *. f_two i a k n s1 s3 \n",
" ) \n",
" | Beta, Alfa, Beta\n",
" | Alfa, Beta, Alfa -> assert false (*TODO *)\n",
2019-12-05 16:16:00 +01:00
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
2019-12-04 18:13:54 +01:00
" \n",
"\n",
2020-01-06 19:43:55 +01:00
"let _ = check 200 integral_value 3 1 2 2"
2019-12-18 12:56:35 +01:00
]
},
{
2020-01-06 19:43:55 +01:00
"cell_type": "code",
"execution_count": null,
2019-12-18 12:56:35 +01:00
"metadata": {
2020-01-06 19:43:55 +01:00
"scrolled": false
2019-12-18 12:56:35 +01:00
},
2020-01-06 19:43:55 +01:00
"outputs": [],
2019-12-18 12:56:35 +01:00
"source": [
2020-01-06 19:43:55 +01:00
"let ki = det_I.(129)\n",
"let kj = det_I.(349)\n",
2019-12-18 12:56:35 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let alpha_to_string alpha = \n",
2019-12-18 12:56:35 +01:00
" \n",
2020-01-06 19:43:55 +01:00
" let exc0 = Array.init (aux_num+1) (fun _ -> [|\"-\";\"-\"|]) in\n",
" \n",
" let i, j, m, k, l, n, s, s', s'', phase =\n",
2019-12-18 12:56:35 +01:00
" match Excitation.of_det ki kj with\n",
2020-01-06 19:43:55 +01:00
" | Excitation.(Triple (phase,\n",
" { hole ; particle ; spin },\n",
" {hole=hole' ; particle=particle' ; spin=spin' }, \n",
" {hole=hole''; particle=particle''; spin=spin''} )) ->\n",
" hole, hole', hole'', particle, particle', particle'', spin, spin', spin'', phase\n",
" | _ -> assert false\n",
" in\n",
" let spin = function\n",
" | Spin.Alfa -> 0\n",
" | _ -> 1\n",
" in\n",
" exc0.(i).(spin s ) <- \"i\" \n",
" ; exc0.(j).(spin s' ) <- \"j\" \n",
" ; exc0.(k).(spin s ) <- \"k\" \n",
" ; exc0.(l).(spin s' ) <- \"l\" \n",
" ; exc0.(m).(spin s'') <- \"m\" \n",
" ; exc0.(n).(spin s'') <- \"n\" \n",
" ;\n",
" let s0, s0', s0'' = s, s', s'' in\n",
" \n",
" let i, j, k, l, s, s', p1 =\n",
" match Excitation.of_det ki alpha with\n",
2019-12-18 12:56:35 +01:00
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
2020-01-06 19:43:55 +01:00
" hole, hole', particle, particle', spin, spin', phase\n",
2019-12-18 12:56:35 +01:00
" | _ -> assert false\n",
2020-01-06 19:43:55 +01:00
" in\n",
" \n",
" if exc0.(i).(spin s ) = \"-\" then exc0.(i).(spin s ) <- \"p\";\n",
" if exc0.(j).(spin s') = \"-\" then exc0.(j).(spin s') <- \"p\";\n",
" if exc0.(k).(spin s ) = \"-\" then exc0.(k).(spin s ) <- if k > mo_num then \"a\" else \"q\";\n",
" if exc0.(l).(spin s') = \"-\" then exc0.(l).(spin s') <- if l > mo_num then \"a\" else \"q\";\n",
" \n",
" let string_h = \n",
" Printf.sprintf \"h_two %s %s %s %s %s %s *. \" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (if s = s0 then \"s \" else if s = s0' then \"s'\" else \"s''\")\n",
" (if s' = s0' then \"s'\" else if s = s0'' then \"s''\" else \"s\" )\n",
" in \n",
" \n",
" let i, j, k, l, s, s', p2 =\n",
" match Excitation.of_det alpha kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" \n",
" let string_f = \n",
" Printf.sprintf \"f_two %s %s %s %s %s %s\" \n",
" exc0.(i).(spin s )\n",
" exc0.(j).(spin s')\n",
" exc0.(k).(spin s )\n",
" exc0.(l).(spin s')\n",
" (if s = s0 then \"s \" else if s = s0' then \"s'\" else \"s''\")\n",
" (if s' = s0' then \"s'\" else if s = s0'' then \"s''\" else \"s\" )\n",
" in\n",
" (*\n",
" Format.printf \"|I> -> |a> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det ki alpha) string_h ;\n",
" Format.printf \"|a> -> |J> : %a | %s\\n@.\" Excitation.pp (Excitation.of_det alpha kj) string_f ;\n",
2019-12-18 12:56:35 +01:00
" *)\n",
"\n",
" \n",
2020-01-06 19:43:55 +01:00
" let sign = \n",
" if Phase.add p1 p2 = phase then \"+.\" else \"-.\"\n",
2019-12-18 12:56:35 +01:00
" in\n",
2020-01-06 19:43:55 +01:00
" sign ^ string_h ^ string_f\n",
" \n",
2019-12-18 12:56:35 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let alpha_debug alpha = \n",
" \n",
" let i, j, k, l, s, s', p1 =\n",
" match Excitation.of_det ki alpha with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" Printf.printf \"%d %d %d %d \" i j k l;\n",
" \n",
" let i, j, k, l, s, s', p2 =\n",
" match Excitation.of_det alpha kj with\n",
" | Excitation.(Double (phase, { hole ; particle ; spin }, {hole=hole' ; particle=particle' ; spin=spin' })) ->\n",
" hole, hole', particle, particle', spin, spin', phase\n",
" | _ -> assert false\n",
" in\n",
" (*\n",
" Format.printf \"|I> -> |a> : %a | \\n@.\" Excitation.pp (Excitation.of_det ki alpha) ;\n",
" Format.printf \"|a> -> |J> : %a | \\n@.\" Excitation.pp (Excitation.of_det alpha kj) ;\n",
" *)\n",
" Printf.printf \"%d %d %d %d \\n%!\" i j k l\n",
2019-12-18 12:56:35 +01:00
"\n",
2020-01-06 19:43:55 +01:00
" \n",
"let strings = \n",
" Format.printf \"|I> -> |J> : %a |\\n@.\" Excitation.pp (Excitation.of_det ki kj) ;\n",
" generate_alphas ki kj 3 1 2 2\n",
" |> Array.of_list\n",
" |> Array.mapi (fun kk alpha -> alpha_to_string alpha)\n",
" |> Array.to_list\n",
" |> List.sort_uniq compare\n",
" |> Array.of_list\n",
2019-12-18 12:56:35 +01:00
"\n",
2020-01-06 19:43:55 +01:00
"let _ = Array.iteri (fun i x -> Printf.printf \"%d %s \\n%!\" i x) strings\n",
"\n",
"let _ =\n",
" let v =\n",
" let alphas =\n",
" generate_alphas ki kj 3 1 2 2\n",
" (*\n",
" |> List.filter (fun alpha ->\n",
" let x = alpha_to_string alpha in\n",
" x = strings.(6)\n",
" )\n",
" *)\n",
" in\n",
" (*\n",
" List.iter alpha_debug alphas ;\n",
" Printf.printf \"\\n%!\";\n",
" *)\n",
" compute_HaaF ki alphas kj \n",
" in\n",
" let x = (integral_value ki kj) in\n",
" Printf.printf \"%20.8e %20.8e %20.8e\\n%!\" x v (v-. x)\n"
2019-11-30 10:41:07 +01:00
]
2020-01-06 19:43:55 +01:00
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
2019-11-30 10:41:07 +01:00
}
],
"metadata": {
2019-12-03 18:52:03 +01:00
"celltoolbar": "Raw Cell Format",
2019-11-30 10:41:07 +01:00
"kernelspec": {
2019-12-09 19:37:58 +01:00
"display_name": "OCaml 4.07.1",
2019-11-30 10:41:07 +01:00
"language": "OCaml",
"name": "ocaml-jupyter"
},
"language_info": {
"codemirror_mode": "text/x-ocaml",
"file_extension": ".ml",
"mimetype": "text/x-ocaml",
"name": "OCaml",
"nbconverter_exporter": null,
"pygments_lexer": "OCaml",
"version": "4.07.1"
}
},
"nbformat": 4,
2019-12-04 18:13:54 +01:00
"nbformat_minor": 4
2019-11-30 10:41:07 +01:00
}