Work : pattern matching ER/Boys

This commit is contained in:
Yann Damour 2020-05-11 10:58:04 +02:00
parent 7b24683ea3
commit 8910042833

View File

@ -1698,7 +1698,7 @@
" 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 *. asin(m_b12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
" 0.25 *. acos( -. m_a12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
"\n",
"(****************************)\n",
"\n",
@ -1774,10 +1774,12 @@
"\n",
"(*************************)\n",
"\n",
"(*\n",
"calcul_alpha_2 \"ER\" ;;\n",
"calcul_alpha_2 \"Boys\" ;;\n",
"let methode = \"ER\";;\n",
"let m_alpha = calcul_alpha_2 methode;;"
"let m_alpha = calcul_alpha_2 methode;;\n",
"*)"
]
},
{
@ -1806,7 +1808,63 @@
"\n",
"(*************************)\n",
"\n",
"calcul_cc \"boys\";;"
"(*\n",
"calcul_cc \"boys\";;\n",
"*)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Test méthode de calcul de alpha et de D ensemble *)\n",
"type alphad = {\n",
"m_alpha : Mat.t;\n",
"d : float;\n",
"}\n",
"\n",
"let m_alpha_d methode m_C multipoles = \n",
"\n",
"let alpha_boys = f_alpha_boys multipoles\n",
"in\n",
"let d_boys = d_boys multipoles\n",
"in\n",
"let alpha_er = f_alpha m_C\n",
"in\n",
"let d_er = s_D m_C\n",
"in\n",
"let alpha methode =\n",
" match methode with \n",
" | \"Boys\"\n",
" | \"boys\" -> {m_alpha = alpha_boys; d = d_boys}\n",
" | \"ER\"\n",
" | \"er\" -> {m_alpha = alpha_er; d = d_er}\n",
" | _ -> invalid_arg \"Unknown method, please enter Boys or ER\"\n",
"\n",
"in \n",
"alpha methode;;\n",
"\n",
"(*************************)\n",
"(*\n",
"m_alpha_d \"ER\" ;;\n",
"m_alpha_d \"Boys\" ;;\n",
"\n",
"let methode = \"ER\";;\n",
"\n",
"let alphad = m_alpha_d methode ;;\n",
"\n",
"let m_alpha = alphad.m_alpha;;\n",
"let d = alphad.d;;\n",
"*)"
]
},
{
@ -2021,6 +2079,122 @@
"*)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Boucle localisation avec choix de la méthode de localisation"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* 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",
"\n",
" Printf.printf \"%i\\n%!\" n;\n",
"\n",
" Util.debug_matrix \"m_C\" m_C;\n",
"\n",
"if n == 0 \n",
" then m_C\n",
" 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",
" \n",
" let alphad = m_alpha_d methode m_C multipoles\n",
" in\n",
" \n",
" (* D critère à maximiser *)\n",
" let critere_D = alphad.d \n",
" in\n",
" Printf.printf \"%f\\n%!\" critere_D;\n",
" \n",
" (* Matrice des alphas *)\n",
" let m_alpha = alphad.m_alpha\n",
" in\n",
"\n",
" Util.debug_matrix \"m_alpha\" m_alpha;\n",
"\n",
" (* alphaij contient le alpha max ainsi que ses indices i et j *)\n",
" let alphaij = new_m_alpha m_alpha n_rec_alpha (* Fonction -> constante *)\n",
" in\n",
"\n",
" (* Valeur de alpha max après calcul *)\n",
" let alpha = alphaij.alpha_max (* Fonction -> constante *)\n",
" in\n",
"\n",
" (* Indice i et j du alpha max après calcul *)\n",
" let indice_i = alphaij.indice_ii (* Fonction -> constante *)\n",
" in\n",
" let indice_j = alphaij.indice_jj (* Fonction -> constante *)\n",
" in\n",
"\n",
" Printf.printf \"%i %i\\n%!\" indice_i indice_j;\n",
"\n",
" (* Matrice de rotaion *)\n",
" let m_R = f_R alpha (* Fonction -> constante *)\n",
" in\n",
"\n",
" Util.debug_matrix \"m_R\" m_R;\n",
"\n",
" (* Matrice qui va subir la rotation *)\n",
" let m_Ksi = f_Ksi indice_i indice_j m_C (* Fonction -> constante *)\n",
" in\n",
"\n",
" Util.debug_matrix \"m_Ksi\" m_Ksi;\n",
"\n",
" (* Matrice ayant subit la rotation *)\n",
" let m_Ksi_tilde = f_Ksi_tilde m_R m_Ksi (* Fonction -> constante *)\n",
" in\n",
"\n",
" Util.debug_matrix \"m_Ksi_tilde\" m_Ksi_tilde;\n",
"\n",
" (* Matrice pour supprimerles coef des orbitales i et j dans la matrice des coef *)\n",
" let m_Psi = f_Psi m_Ksi indice_i indice_j (* Fonction -> constante *)\n",
" in\n",
"\n",
" Util.debug_matrix \"m_Psi\" m_Psi;\n",
"\n",
" (* Matrice pour ajouter les coef des orbitales i~ et j~ dans la matrice des coef *)\n",
" let m_Psi_tilde = f_Psi_tilde m_Ksi_tilde indice_i indice_j (* Fonction -> constante *)\n",
" in\n",
"\n",
" Util.debug_matrix \"m_Psi_tilde\" m_Psi_tilde;\n",
"\n",
" (* Matrice avec les coef des orbitales i et j remplacés par 0 *)\n",
" let m_interm = f_interm m_C m_Psi (* Fonction -> constante *)\n",
" in\n",
" Util.debug_matrix \"m_interm\" m_interm;\n",
" \n",
" (* 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",
"\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);;"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"final_m_C m_C multipoles \"ER\" 10;;"
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -2133,6 +2307,13 @@
"final_m_C m_C 10;;"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,