Work: modif ER range matrice

This commit is contained in:
Yann Damour 2020-04-30 11:07:37 +02:00
parent 1268019bc2
commit 0e3bc52a88

View File

@ -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",