diff --git a/Notebooks/F12_matrix.ipynb b/Notebooks/F12_matrix.ipynb index 8b1b0c6..7ba560b 100644 --- a/Notebooks/F12_matrix.ipynb +++ b/Notebooks/F12_matrix.ipynb @@ -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_{ja} \\sum_{i} \\sum_{j -. 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" },