From 9e39302fcf736d32412197b46054e1fa718f3544 Mon Sep 17 00:00:00 2001 From: yann Date: Thu, 7 May 2020 23:45:41 +0200 Subject: [PATCH] Work : choix methode calcul alpha et cc (manque B boyls) --- Work.ipynb | 126 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 111 insertions(+), 15 deletions(-) diff --git a/Work.ipynb b/Work.ipynb index 4424726..877a68c 100644 --- a/Work.ipynb +++ b/Work.ipynb @@ -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" ] }, {