Work : correction Boys calcul alpha boucle

This commit is contained in:
Yann Damour 2020-05-11 15:25:39 +02:00
parent 8910042833
commit 47b659829d

View File

@ -1071,6 +1071,7 @@
"metadata": {},
"outputs": [],
"source": [
"(*\n",
"(* Fonction calcul alpha Boys *)\n",
"\n",
"let n_ao = Mat.dim1 m_C ;;\n",
@ -1111,7 +1112,8 @@
" 0.25 *. asin(m_b12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
"\n",
"\n",
"m_alpha_boys multipoles;;\n"
"m_alpha_boys multipoles;;\n",
"*)"
]
},
{
@ -1634,7 +1636,7 @@
"Mat.init_cols n_ao n_ao ( fun i j -> \n",
" if i= j \n",
" then 0. \n",
" else 0.25 *. (acos(-. m_a12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.)))));;\n",
" else 0.25 *. (acos(-. m_a12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.)))));;\n",
"\n",
"(*********************)\n",
"\n",
@ -1669,7 +1671,7 @@
"outputs": [],
"source": [
"(* Fonction calcul alpha Boys *)\n",
"let f_alpha_boys multipoles = \n",
"let f_alpha_boys mo_coef = \n",
"\n",
" let phi_x_phi =\n",
" Multipole.matrix_x multipoles \n",
@ -1697,12 +1699,14 @@
" in\n",
" Mat.add (a12 phi_x_phi) ( Mat.add (a12 phi_y_phi) (a12 phi_z_phi))\n",
" in\n",
" Mat.init_cols n_ao n_ao ( fun i j ->\n",
" 0.25 *. acos( -. m_a12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
" Mat.init_cols n_ao n_ao ( fun i j -> \n",
" if i=j \n",
" then 0.\n",
" else 0.25 *. asin( m_b12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
"\n",
"(****************************)\n",
"\n",
"f_alpha_boys multipoles;;\n"
"f_alpha_boys m_C;;\n"
]
},
{
@ -1713,7 +1717,7 @@
"source": [
"(* Fonction de calcul de D Boys *)\n",
"\n",
"let d_boys multipoles = \n",
"let d_boys mo_coef = \n",
"\n",
" let phi_x2_phi =\n",
" Multipole.matrix_x2 multipoles \n",
@ -1745,7 +1749,7 @@
"\n",
"(*************************)\n",
"\n",
"d_boys multipoles;;"
"d_boys m_C;;"
]
},
{
@ -1757,7 +1761,7 @@
"(* Test méthode de calcul de alpha *)\n",
"let calcul_alpha_2 methode = \n",
"\n",
"let alpha_boys = f_alpha_boys multipoles\n",
"let alpha_boys = f_alpha_boys m_C\n",
"in\n",
"let alpha_er = f_alpha m_C\n",
"in\n",
@ -1791,7 +1795,7 @@
"(* Test méthode de calcul du critère de convergence *)\n",
"let calcul_cc methode = \n",
"\n",
"let b_boys = d_boys multipoles\n",
"let b_boys = d_boys m_C\n",
"in\n",
"let d_er = s_D m_C\n",
"in\n",
@ -1832,11 +1836,11 @@
"d : float;\n",
"}\n",
"\n",
"let m_alpha_d methode m_C multipoles = \n",
"let m_alpha_d methode m_C = \n",
"\n",
"let alpha_boys = f_alpha_boys multipoles\n",
"let alpha_boys = f_alpha_boys m_C\n",
"in\n",
"let d_boys = d_boys multipoles\n",
"let d_boys = d_boys m_C\n",
"in\n",
"let alpha_er = f_alpha m_C\n",
"in\n",
@ -2095,7 +2099,7 @@
"(* Localisation de Edminstion ou de Boys *)\n",
"let n_rec_alpha = 10;;\n",
"(* Calcul de la nouvelle matrice des coefficient après n rotation d'orbitales *)\n",
"let rec final_m_C m_C multipoles methode n =\n",
"let rec final_m_C m_C methode n =\n",
"\n",
" Printf.printf \"%i\\n%!\" n;\n",
"\n",
@ -2106,9 +2110,9 @@
" else\n",
" \n",
" (* Fonction de calcul de la nouvelle matrice de coef après rotation d'un angle alpha *)\n",
" let new_m_C m_C multipoles methode =\n",
" let new_m_C m_C methode =\n",
" \n",
" let alphad = m_alpha_d methode m_C multipoles\n",
" let alphad = m_alpha_d methode m_C \n",
" in\n",
" \n",
" (* D critère à maximiser *)\n",
@ -2176,14 +2180,14 @@
" (* Matrice après rotation *)\n",
" Mat.add m_Psi_tilde m_interm\n",
" in\n",
" let m_new_m_C = new_m_C m_C multipoles methode (* Fonction -> constante *)\n",
" let m_new_m_C = new_m_C m_C methode (* Fonction -> constante *)\n",
"\n",
"in\n",
"\n",
"Util.debug_matrix \"new_alpha_m\" (f_alpha m_C);\n",
"Util.debug_matrix \"m_new_m_C\" m_new_m_C;\n",
"\n",
"final_m_C m_new_m_C multipoles methode (n-1);;"
"final_m_C m_new_m_C methode (n-1);;"
]
},
{
@ -2192,7 +2196,16 @@
"metadata": {},
"outputs": [],
"source": [
"final_m_C m_C multipoles \"ER\" 10;;"
"final_m_C m_C \"ER\" 1;;"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"final_m_C m_C \"Boys\" 10;;"
]
},
{