acceleration ER

This commit is contained in:
Anthony Scemama 2020-05-14 15:54:44 +02:00
parent 7e542fc7f2
commit 7ee871c7a9

View File

@ -78,7 +78,7 @@
"(* --------- *)\n",
"\n",
"(*Mettre le bon chemin ici *)\n",
"#cd \"/home/ydamour/QCaml\";;\n",
"#cd \"/home/scemama/QCaml\";;\n",
"\n",
"#use \"topfind\";;\n",
"#require \"jupyter.notebook\";;\n",
@ -161,15 +161,13 @@
},
"outputs": [],
"source": [
"(*\n",
"let xyz_string = \n",
"\"3\n",
"Water\n",
"O 0. 0. 0.\n",
"H -0.756950272703377558 0. -0.585882234512562827\n",
"H 0.756950272703377558 0. -0.585882234512562827\n",
"\"\n",
"*) "
"\""
]
},
{
@ -185,7 +183,7 @@
"metadata": {},
"outputs": [],
"source": [
"\n",
"(*\n",
"let xyz_string = \n",
"\"4\n",
"H4\n",
@ -193,7 +191,8 @@
"H 1.8 0. 0.\n",
"H 3.6 0. 0.\n",
"H 5.4 0. 0.\n",
"\"\n"
"\"\n",
"*)"
]
},
{
@ -203,7 +202,7 @@
"outputs": [],
"source": [
"(* Fonction création chaîne linéaire de n H *)\n",
"\n",
"(*\n",
"let xyz d n = \n",
" let accu = \"\"\n",
" in\n",
@ -219,7 +218,8 @@
" accu\n",
" in string_of_int(n) ^ \"\\nH\" ^ string_of_int(n) ^ \"\\n\" ^ toto accu d n;;\n",
" \n",
"let xyz_string = xyz 1.8 4;;\n"
"let xyz_string = xyz 1.8 4;;\n",
"*)"
]
},
{
@ -250,8 +250,8 @@
},
"outputs": [],
"source": [
"(*\n",
"let basis_string = \n",
"\n",
"\"\n",
"HYDROGEN\n",
"S 6\n",
@ -263,11 +263,10 @@
"6 0.1001124280E+00 0.1303340841E+00\n",
"\n",
"\"\n",
"*)\n",
"\n",
"\n",
"\n",
"\n",
"(*\n",
"let basis_string = \n",
"\"\n",
"HYDROGEN\n",
@ -280,7 +279,6 @@
"1 1.220000E-01 1.000000E+00\n",
"P 1\n",
"1 7.270000E-01 1.0000000\n",
"\"\n",
"\n",
"OXYGEN\n",
"S 9\n",
@ -314,8 +312,7 @@
"1 2.753000E-01 1.000000E+00\n",
"D 1\n",
"1 1.185000E+00 1.0000000\n",
"\n",
"*)"
"\""
]
},
{
@ -1493,6 +1490,7 @@
"let n_mo = Mat.dim2 m_C ;;\n",
"let multipoles = \n",
" AOBasis.multipole ao_basis;;\n",
" \n",
"let sum a = \n",
" Array.fold_left (fun accu x -> accu +. x) 0. a\n",
" \n",
@ -1524,7 +1522,51 @@
" ) (Util.array_range 1 n_ao)\n",
" in sum v\n",
") (Util.array_range 1 n_ao)\n",
"|> sum "
"|> sum \n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"(* 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",
" let n_mo = Mat.dim2 m_C\n",
" in\n",
" (* Fonction de calcul de toutes les intégrales B_12 -> Matrice, dépend de m_C *)\n",
" let m_b12 = Mat.init_cols n_mo n_mo (fun i j -> 0.) in\n",
" let m_a12 = Mat.init_cols n_mo n_mo (fun i j -> 0.) in\n",
" Array.iter (fun a ->\n",
" Array.iter (fun b ->\n",
" let mca = Vec.init n_mo (fun i -> m_C.{a,i} *. m_C.{b,i}) in\n",
" Array.iter (fun e ->\n",
" Array.iter (fun f ->\n",
" let integral = ERI.get_phys ee_ints a e b f in\n",
" Array.iter ( fun i -> \n",
" let mcei = m_C.{e,i} *. m_C.{f,i} in\n",
" Array.iter ( fun j -> \n",
" let x = m_C.{e,i} *. m_C.{f,j} *. integral in\n",
" let mcaij = ( mca.{i} -. mca.{j} ) in\n",
" m_b12.{i,j} <- m_b12.{i,j} +. mcaij *. x;\n",
" m_a12.{i,j} <- m_a12.{i,j} +. m_C.{a,i} *. m_C.{b,j} *. x\n",
" -. 0.25 *. ( mcei -. m_C.{e,j} *. m_C.{f,j} ) *. mcaij *. integral \n",
" ) (Util.array_range 1 n_mo)\n",
" ) (Util.array_range 1 n_mo)\n",
" ) (Util.array_range 1 n_ao)\n",
" ) (Util.array_range 1 n_ao)\n",
" ) (Util.array_range 1 n_ao)\n",
" ) (Util.array_range 1 n_ao);\n",
"\n",
" Mat.init_cols n_mo n_mo ( fun i j -> \n",
" if i= j 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",
"\n",
"f_alpha m_C;; "
]
},
{