diff --git a/Work.ipynb b/Work.ipynb index 0bfa62f..aafb06c 100644 --- a/Work.ipynb +++ b/Work.ipynb @@ -952,7 +952,15 @@ "\n", "Le but est de minimiser la matrice $D(\\theta)$ il faut donc faire une rotation des orbitales i et j donnants le plus grand élément de la matrice $D(\\theta)$\n", "\n", - "Si je comprends bien, on doit prendre le plus grand élément $D(i,j)$ de la matrice $D(\\theta)$ pour $\\theta = 0$ au départ et d'appliquer des rotation en faisant varier $\\theta$ pour minimiser $D(i,j)$ puis recommencer avec le nouveau $D(i,j)max$\n", + "Si je comprends bien, on doit prendre le plus grand élément $D(i,j)$ de la matrice $D(\\theta)$ pour $\\theta = 0$ au départ et d'appliquer des rotation en faisant varier $\\theta$ pour minimiser $D(i,j)$ sachant que les extrema de $D(\\theta)$ sont de la forme :\n", + "\n", + "$Tan(\\theta) = - \\frac{\\gamma}{\\beta}$\n", + "\n", + "$D(\\theta]$ à 4 extrema :\n", + "\n", + "$4\\theta; \\;\\; 4\\theta +\\pi; \\;\\; 4\\theta+ 2\\pi; \\;\\; 4\\theta+ 3\\pi$\n", + "\n", + "Puis recommencer avec le nouveau $D(i,j)max$\n", "\n", "\n" ] @@ -962,7 +970,22 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "(*let multipoles = \n", + " AOBasis.multipole ao_basis\n", + " in\n", + "\n", + " let phi_x_phi =\n", + " Multipole.matrix_x multipoles \n", + " |> MOBasis.mo_matrix_of_ao_matrix ~mo_coef \n", + " in\n", + " \n", + " let phi_y_phi =\n", + " Multipole.matrix_y multipoles \n", + " |> MOBasis.mo_matrix_of_ao_matrix ~mo_coef \n", + " in\n", + "*)" + ] }, { "cell_type": "markdown", @@ -1278,11 +1301,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "jupyter": { - "outputs_hidden": true - } - }, + "metadata": {}, "outputs": [], "source": [ "let m_Phi = m_C\n", @@ -1296,7 +1315,7 @@ "pour appliquer R afin d'effectuer la rotation des orbitales *) (* {1,2} -> 1ere ligne, 2e colonne *)\n", "let p = indice_i;;\n", "let q = indice_j;;\n", - "let m_Ksi = Mat.init_cols n 2 (fun i j -> if j=1 then m_Phi.{i,p} else m_Phi.{i,q} );;\n", + "let m_Ksi = Mat.init_cols n_ao 2 (fun i j -> if j=1 then m_Phi.{i,p} else m_Phi.{i,q} );;\n", "\n", "(* Fonction de calcul de ksi~ (matrice n par 2), nouvelle matrice par application de la matrice de rotation dans laquelle on\n", "obtient les deux orbitales que l'on va réinjecter dans la matrice Phi*)\n", @@ -1322,13 +1341,13 @@ "celle contenant i~ et j~ *)\n", "\n", "(* Matrice intérmédiare pour l'injection de ksi~ (i~ et j~) dans la matrice Phi *)\n", - "let m_Psi_tilde = Mat.init_cols n_mo n_mo (fun i j -> if j=q then m_Ksi_tilde.{i,p}\n", - " else if j=p then m_Ksi_tilde.{i,q}\n", + "let m_Psi_tilde = Mat.init_cols n_ao n_mo (fun i j -> if j=q then m_Ksi_tilde.{i,1}\n", + " else if j=p then m_Ksi_tilde.{i,2}\n", " else 0.);;\n", - " \n", + " (* p q verif*) \n", "(* Matrice intermédiaire pour supprimer ksi (i et j) dans la matrice Phi *) \n", - "let m_Psi = Mat.init_cols n_mo n_mo (fun i j -> if j=q then m_Ksi.{i,p}\n", - " else if j=p then m_Ksi.{i,q}\n", + "let m_Psi = Mat.init_cols n_ao n_mo (fun i j -> if j=q then m_Ksi.{i,1}\n", + " else if j=p then m_Ksi.{i,2}\n", " else 0.);;\n", " \n", "(* Matrice intérmédiaire où les orbitales i et j ont été supprimées et remplacées par des 0, par soustraction de la matrice Phi\n", @@ -1462,7 +1481,7 @@ " in\n", " let q = indice_j\n", " in\n", - " let m_Ksi = Mat.init_cols n 2 (fun i j -> if j=1 then m_Phi.{i,p} else m_Phi.{i,q} )\n", + " let m_Ksi = Mat.init_cols n_ao 2 (fun i j -> if j=1 then m_Phi.{i,p} else m_Phi.{i,q} )\n", " in\n", " gemm m_Ksi m_R\n", "\n", @@ -1475,13 +1494,13 @@ " let m_interm = \n", "\n", " (* Matrice intérmédiare pour l'injection de ksi~ (i~ et j~) dans la matrice Phi *)\n", - " let m_Psi_tilde = Mat.init_cols n_mo n_mo (fun i j -> if j=q then m_Ksi_tilde.{i,p}\n", - " else if j=p then m_Ksi_tilde.{i,q}\n", + " let m_Psi_tilde = Mat.init_cols n_ao n_mo (fun i j -> if j=q then m_Ksi_tilde.{i,1}\n", + " else if j=p then m_Ksi_tilde.{i,2}\n", " else 0.)\n", " in\n", " (* Matrice intermédiaire pour supprimer ksi (i et j) dans la matrice Phi *) \n", - " let m_Psi = Mat.init_cols n_mo n_mo (fun i j -> if j=q then m_Ksi.{i,p}\n", - " else if j=p then m_Ksi.{i,q}\n", + " let m_Psi = Mat.init_cols n_ao n_mo (fun i j -> if j=q then m_Ksi.{i,1}\n", + " else if j=p then m_Ksi.{i,2}\n", " else 0.)\n", "\n", " in\n",