Work : choix methode calcul alpha et cc (manque B boyls)

This commit is contained in:
Yann Damour 2020-05-07 23:45:41 +02:00
parent 008f439667
commit 9e39302fcf

View File

@ -1063,11 +1063,10 @@
"metadata": {},
"outputs": [],
"source": [
"(*\n",
"(* Test Boys *)\n",
"(* Fonction calcul alpha Boys *)\n",
"\n",
"let n_ao = Mat.dim1 m_C ;;\n",
"let n_mo = n_ao - 1;;\n",
"let n_mo = Mat.dim2 m_C ;;\n",
"\n",
"let multipoles = \n",
" AOBasis.multipole ao_basis;;\n",
@ -1096,17 +1095,15 @@
" in \n",
" let m_a12 =\n",
" let a12 g = Mat.init_cols n_ao n_ao ( fun i j -> \n",
" g.{i,j} *. g.{i,j} \n",
" -. (1. /. 4.) *. (g.{i,i} -. g.{j,j} *. g.{i,i} -. g.{j,j}))\n",
" g.{i,j} *. g.{i,j} -. 0.25 *. (g.{i,i} -. g.{j,j} *. g.{i,i} -. g.{j,j}))\n",
" 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",
" asin(m_b12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
" 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"
]
},
{
@ -1564,6 +1561,8 @@
"let m_C = MOBasis.mo_coef mo_basis;;\n",
"let n_ao = Mat.dim1 m_C ;;\n",
"let n_mo = Mat.dim2 m_C ;;\n",
"let multipoles = \n",
" AOBasis.multipole ao_basis;;\n",
"let sum a = \n",
" Array.fold_left (fun accu x -> accu +. x) 0. a\n",
" \n",
@ -1604,7 +1603,7 @@
"metadata": {},
"outputs": [],
"source": [
"(* Fonction de calcul de tous les alpha -> Matrice, dépend de m_a12, m_b12 qui dépendent de m_C *)\n",
"(* Fonction de calcul de tous les alpha ER -> Matrice, dépend de m_a12, m_b12 qui dépendent de m_C *)\n",
"let f_alpha m_C =\n",
"\n",
" (* Fonction de calcul de toutes les intégrales B_12 -> Matrice, dépend de m_C *)\n",
@ -1628,9 +1627,8 @@
" then 0. \n",
" else 0.25 *. (acos(-. m_a12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.)))));;\n",
"\n",
"(*\n",
"f_alpha m_C;; \n",
"*) "
" "
]
},
{
@ -1639,7 +1637,7 @@
"metadata": {},
"outputs": [],
"source": [
"(* Calcul de D *)\n",
"(* Calcul de D -> critère à maximiser dans ER*)\n",
"let s_D m_C = \n",
" let v_D = \n",
" let m_D = Mat.init_cols n_ao n_ao (fun i j ->\n",
@ -1649,9 +1647,107 @@
" in Vec.init n_ao ( fun i -> m_D.{i,1} )\n",
" in Vec.sum v_D ;;\n",
"\n",
"(*\n",
"s_D m_C;;\n",
"*)"
"\n",
"s_D m_C;;\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Fonction calcul alpha Boys *)\n",
"let f_alpha_boys multipoles = \n",
"\n",
" let phi_x_phi =\n",
" Multipole.matrix_x multipoles \n",
" |> MOBasis.mo_matrix_of_ao_matrix ~mo_coef \n",
" in \n",
" let phi_y_phi =\n",
" Multipole.matrix_y multipoles \n",
" |> MOBasis.mo_matrix_of_ao_matrix ~mo_coef \n",
" in\n",
" let phi_z_phi =\n",
" Multipole.matrix_y multipoles \n",
" |> MOBasis.mo_matrix_of_ao_matrix ~mo_coef\n",
" in \n",
"\n",
" let m_b12= \n",
" let b12 g = Mat.init_cols n_ao n_ao ( fun i j ->\n",
" (g.{i,i} -. g.{j,j}) *. g.{i,j})\n",
"\n",
" in \n",
" Mat.add (b12 phi_x_phi) ( Mat.add (b12 phi_y_phi) (b12 phi_z_phi))\n",
" in \n",
" let m_a12 =\n",
" let a12 g = Mat.init_cols n_ao n_ao ( fun i j -> \n",
" g.{i,j} *. g.{i,j} -. 0.25 *. (g.{i,i} -. g.{j,j} *. g.{i,i} -. g.{j,j}))\n",
" 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 *. asin(m_b12.{i,j} /. sqrt((m_a12.{i,j}**2.) +. (m_b12.{i,j}**2.) )));;\n",
"\n",
"\n",
"f_alpha_boys multipoles;;\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Test méthode de calcul de alpha *)\n",
"let calcul_alpha_2 methode = \n",
"\n",
"let alpha_boys = f_alpha_boys multipoles\n",
"in\n",
"let alpha_er = f_alpha m_C\n",
"in\n",
"let alpha methode =\n",
" match methode with \n",
" | \"Boys\"\n",
" | \"boys\" -> alpha_boys\n",
" | \"ER\"\n",
" | \"er\" -> alpha_er\n",
" | _ -> invalid_arg \"Unknown method, please enter Boys or ER\"\n",
"\n",
"in \n",
"alpha methode;;\n",
"\n",
"calcul_alpha_2 \"ER\" ;;\n",
"calcul_alpha_2 \"Boys\" ;;\n",
"let methode = \"ER\";;\n",
"let m_alpha = calcul_alpha_2 methode;;"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* Test méthode de calcul du critère de convergence *)\n",
"let calcul_cc methode = \n",
"\n",
"let b_boys = 2.\n",
"in\n",
"let d_er = s_D m_C\n",
"in\n",
"let cc methode =\n",
" match methode with \n",
" | \"Boys\"\n",
" | \"boys\" -> b_boys\n",
" | \"ER\"\n",
" | \"er\" -> d_er\n",
" | _ -> invalid_arg \"Unknown method, please enter Boys or ER\"\n",
"\n",
"in \n",
"cc methode;;\n",
"\n",
"calcul_cc \"ER\";;\n"
]
},
{