Working on F12 notebook

This commit is contained in:
Anthony Scemama 2019-12-09 19:37:58 +01:00
parent 2e6ccb1770
commit 56b6bb41a6
1 changed files with 204 additions and 25 deletions

View File

@ -864,6 +864,8 @@
"source": [
"$i,j$ : orbital indices of MOs occupied in $|I\\rangle$.\n",
"\n",
"$\\sum_i \\sum_a \\hat{T}_{i}^{a} \\hat{T}_{a}^{i}$\n",
"\n",
"\\begin{align}\n",
"\\sum_{a} \\sum_{i}\n",
" \\left( h_{ia} +\n",
@ -943,6 +945,9 @@
"\n",
"$k$ : orbital indices of MOs unoccupied in $|I\\rangle$.\n",
"\n",
"$\\sum_i \\sum_a \\sum_j \\sum_k \\hat{T}_{ij}^{ak} \\hat{T}_{ak}^{ij}$\n",
"\n",
"\n",
"\\begin{align}\n",
"\\sum_{a} \\sum_{k} \\sum_{i} \\sum_{j<i}\n",
" \\langle i j || a k \\rangle \n",
@ -1047,6 +1052,8 @@
"source": [
"$i,j$ : orbital indices of MOs occupied in $|I\\rangle$.\n",
"\n",
"$\\sum_i \\sum_a \\sum_j \\sum_b \\hat{T}_{ij}^{ab} \\hat{T}_{ab}^{ij}$\n",
"\n",
"\\begin{align}\n",
"\\sum_{a} \\sum_{b>a} \\sum_{i} \\sum_{j<i}\n",
" \\langle i j || a b \\rangle \n",
@ -1099,7 +1106,7 @@
" ) 0. [ (mos_a ki,Spin.Alfa) ; (mos_b ki,Spin.Beta)]\n",
" \n",
"let _ =\n",
" check 100 integral_value 0 2 2 2\n",
" check 0 integral_value 0 2 2 2\n",
" "
]
},
@ -1127,12 +1134,14 @@
"\n",
"$j$ : orbital indices of MOs occupied both in $|I\\rangle$ and $|J\\rangle$.\n",
"\n",
"$\\sum_a \\hat{T}_{i}^{a} \\hat{T}_{a}^{k}$\n",
"\n",
"\\begin{align}\n",
" \\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",
" \\sum_{\\bar{j}} \\left[ a \\bar{j} | k \\bar{j} \\right]\\right) \n",
" \\sum_{\\bar{j}} \\left[ a \\bar{j} | k \\bar{j} \\right]\\right) \\\\\n",
"\\end{align}"
]
},
@ -1177,33 +1186,14 @@
" | Phase.Neg -> -. result\n",
" \n",
"\n",
"let _ = check 50 integral_value 1 1 1 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"let ki = det_I.(0)\n",
"let kj = det_I.(0)\n",
"\n",
"\n",
"let _ =\n",
" let alphas =\n",
" generate_alphas ki kj 0 1 2 2\n",
" in\n",
" compute_HaaF ki alphas kj\n",
"\n",
"let _ = integral_value ki kj"
"let _ = check 0 integral_value 1 1 1 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 5. *1 1 12*"
"# 5. 1 1 12"
]
},
{
@ -1219,7 +1209,22 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# 6. *1 1 21*"
"$|J\\rangle = \\hat{T}_{i}^{k}|I\\rangle$\n",
"\n",
"$\\sum_{j} \\sum_a \\hat{T}_{j}^{a} \\hat{T}_{ai}^{jk}$\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",
" \\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}"
]
},
{
@ -1227,10 +1232,184 @@
"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",
" 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",
" let s' = Spin.other s in\n",
" List.fold_left (fun accu a -> accu +.\n",
" List.fold_left (fun accu j -> accu +.\n",
" (h_one j a s +. \n",
" (List.fold_left (fun accu m -> accu +. h_two j m a m s s ) 0. mos_i ) +.\n",
" (List.fold_left (fun accu m -> accu +. h_two j m a m s s') 0. mos_i') ) *.\n",
" (f_two a i j k s s )\n",
" ) 0. mos_j\n",
" +.\n",
" List.fold_left (fun accu j -> accu +.\n",
" (h_one j a s +. \n",
" (List.fold_left (fun accu m -> accu +. h_two j m a m s' s ) 0. mos_i ) +.\n",
" (List.fold_left (fun accu m -> accu +. h_two j m a m s' s') 0. mos_i') ) *.\n",
" (f_two a i j k s' s )\n",
" ) 0. mos_j'\n",
" ) 0. mos_cabs\n",
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
"let _ = check 0 integral_value 1 1 1 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 6. *1 1 21*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"png_image \"1_1_21.png\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$|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}"
]
},
{
"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",
" 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",
" List.fold_left (fun accu a -> accu +.\n",
" List.fold_left (fun accu j -> accu +.\n",
" (h_two i j k a s s ) *.\n",
" (f_one a j s +. \n",
" (List.fold_left (fun accu m -> accu +. h_two m a m j s s) 0. mos_i ) +.\n",
" (List.fold_left (fun accu m -> accu +. h_two m a m j s' s) 0. mos_i') ) \n",
" ) 0. mos_i\n",
" +.\n",
" List.fold_left (fun accu j -> accu +.\n",
" (h_two i j k a s s') *.\n",
" (f_one a j s' +. \n",
" (List.fold_left (fun accu m -> accu +. h_two m a m j s s') 0. mos_i ) +.\n",
" (List.fold_left (fun accu m -> accu +. h_two m a m j s' s') 0. mos_i') ) \n",
" ) 0. mos_i'\n",
" ) 0. mos_cabs\n",
" in\n",
" match phase with\n",
" | Phase.Pos -> result\n",
" | Phase.Neg -> -. result\n",
" \n",
"\n",
"let _ = check 11 integral_value 1 1 2 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"let ki = det_I.(0)\n",
"let kj = det_I.(10)\n",
"\n",
"\n",
"let _ =\n",
" let alphas =\n",
" generate_alphas ki kj 1 1 2 1\n",
" in\n",
" compute_HaaF ki alphas kj\n",
"\n",
"let _ = integral_value ki kj"
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -1525,7 +1704,7 @@
"metadata": {
"celltoolbar": "Raw Cell Format",
"kernelspec": {
"display_name": "OCaml default",
"display_name": "OCaml 4.07.1",
"language": "OCaml",
"name": "ocaml-jupyter"
},