1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-06-30 00:44:52 +02:00

Added proper tests for ee and en rescaled distances. #17

This commit is contained in:
vijay gopal chilkuri 2021-06-22 18:26:05 +05:30
parent 45670c83d6
commit fc8cb4a5a8

View File

@ -1019,6 +1019,15 @@ assert(fabs(ee_distance[elec_num*elec_num+1]-6.5517646321055665) < 1.e-12);
** Electron-electron rescaled distances ** Electron-electron rescaled distances
~ee_distance_rescaled~ stores the matrix of the rescaled distances between all
pairs of electrons:
\[
C_{ij} = \left( 1 - \exp{-\kappa C_{ij}}\right)/\kappa
\]
where \(C_{ij}\) is the matrix of electron-electron distances.
*** Get *** Get
#+begin_src c :comments org :tangle (eval h_func) :noweb yes #+begin_src c :comments org :tangle (eval h_func) :noweb yes
@ -1203,53 +1212,54 @@ qmckl_exit_code qmckl_compute_ee_distance_rescaled (
#+begin_src python :results output :exports none #+begin_src python :results output :exports none
import numpy as np import numpy as np
kappa = 1.0
elec_1_w1 = np.array( [ -2.26995253563, -5.15737533569, -2.22940072417 ]) elec_1_w1 = np.array( [ -2.26995253563, -5.15737533569, -2.22940072417 ])
elec_2_w1 = np.array( [ 3.51983380318, -1.08717381954, -1.19617708027 ]) elec_2_w1 = np.array( [ 3.51983380318, -1.08717381954, -1.19617708027 ])
elec_1_w2 = np.array( [ -2.34410619736, -3.20016115904, -1.53496759012 ]) elec_1_w2 = np.array( [ -2.34410619736, -3.20016115904, -1.53496759012 ])
elec_2_w2 = np.array( [ 3.17996025085, -1.40260577202, 1.49473607540 ]) elec_2_w2 = np.array( [ 3.17996025085, -1.40260577202, 1.49473607540 ])
print ( "[0][0][0] : ", np.linalg.norm(elec_1_w1-elec_1_w1) ) print ( "[0][0][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w1-elec_1_w1)) )/kappa )
print ( "[0][1][0] : ", np.linalg.norm(elec_1_w1-elec_2_w1) ) print ( "[0][1][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w1-elec_2_w1)) )/kappa )
print ( "[1][0][0] : ", np.linalg.norm(elec_2_w1-elec_1_w1) ) print ( "[1][0][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_2_w1-elec_1_w1)) )/kappa )
print ( "[0][0][1] : ", np.linalg.norm(elec_1_w2-elec_1_w2) ) print ( "[0][0][1] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w2-elec_1_w2)) )/kappa )
print ( "[0][1][1] : ", np.linalg.norm(elec_1_w2-elec_2_w2) ) print ( "[0][1][1] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w2-elec_2_w2)) )/kappa )
print ( "[1][0][1] : ", np.linalg.norm(elec_2_w2-elec_1_w2) ) print ( "[1][0][1] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_2_w2-elec_1_w2)) )/kappa )
#+end_src #+end_src
#+RESULTS: #+RESULTS:
: [0][0][0] : 0.0 : [0][0][0] : 0.0
: [0][1][0] : 7.152322512964209 : [0][1][0] : 0.9992169566605263
: [1][0][0] : 7.152322512964209 : [1][0][0] : 0.9992169566605263
: [0][0][1] : 0.0 : [0][0][1] : 0.0
: [0][1][1] : 6.5517646321055665 : [0][1][1] : 0.9985724058042633
: [1][0][1] : 6.5517646321055665 : [1][0][1] : 0.9985724058042633
#+begin_src c :tangle (eval c_test) #+begin_src c :tangle (eval c_test)
assert(qmckl_electron_provided(context)); assert(qmckl_electron_provided(context));
double ee_distance_rescaled[walk_num * elec_num * elec_num]; double ee_distance_rescaled[walk_num * elec_num * elec_num];
rc = qmckl_get_electron_ee_distance_rescaled(context, ee_distance); rc = qmckl_get_electron_ee_distance_rescaled(context, ee_distance_rescaled);
// TODO: Get exact values // (e1,e2,w)
//// (e1,e2,w) // (0,0,0) == 0.
//// (0,0,0) == 0. assert(ee_distance_rescaled[0] == 0.);
//assert(ee_distance[0] == 0.);
// // (1,0,0) == (0,1,0)
//// (1,0,0) == (0,1,0) assert(ee_distance_rescaled[1] == ee_distance_rescaled[elec_num]);
//assert(ee_distance[1] == ee_distance[elec_num]);
// // value of (1,0,0)
//// value of (1,0,0) assert(fabs(ee_distance_rescaled[1]-0.9992169566605263) < 1.e-12);
//assert(fabs(ee_distance[1]-7.152322512964209) < 1.e-12);
// // (0,0,1) == 0.
//// (0,0,1) == 0. assert(ee_distance_rescaled[elec_num*elec_num] == 0.);
//assert(ee_distance[elec_num*elec_num] == 0.);
// // (1,0,1) == (0,1,1)
//// (1,0,1) == (0,1,1) assert(ee_distance_rescaled[elec_num*elec_num+1] == ee_distance_rescaled[elec_num*elec_num+elec_num]);
//assert(ee_distance[elec_num*elec_num+1] == ee_distance[elec_num*elec_num+elec_num]);
// // value of (1,0,1)
//// value of (1,0,1) assert(fabs(ee_distance_rescaled[elec_num*elec_num+1]-0.9985724058042633) < 1.e-12);
//assert(fabs(ee_distance[elec_num*elec_num+1]-6.5517646321055665) < 1.e-12);
#+end_src #+end_src
@ -1957,6 +1967,8 @@ qmckl_exit_code qmckl_compute_en_distance_rescaled (
#+begin_src python :results output :exports none #+begin_src python :results output :exports none
import numpy as np import numpy as np
kappa = 1.0
elec_1_w1 = np.array( [ -2.26995253563, -5.15737533569, -2.22940072417 ]) elec_1_w1 = np.array( [ -2.26995253563, -5.15737533569, -2.22940072417 ])
elec_2_w1 = np.array( [ 3.51983380318, -1.08717381954, -1.19617708027 ]) elec_2_w1 = np.array( [ 3.51983380318, -1.08717381954, -1.19617708027 ])
elec_1_w2 = np.array( [ -2.34410619736, -3.20016115904, -1.53496759012 ]) elec_1_w2 = np.array( [ -2.34410619736, -3.20016115904, -1.53496759012 ])
@ -1964,21 +1976,22 @@ elec_2_w2 = np.array( [ 3.17996025085, -1.40260577202, 1.49473607540 ])
nucl_1 = np.array( [ 1.096243353458458e+00, 8.907054016973815e-01, 7.777092280258892e-01 ] ) nucl_1 = np.array( [ 1.096243353458458e+00, 8.907054016973815e-01, 7.777092280258892e-01 ] )
nucl_2 = np.array( [ 1.168459237342663e+00, 1.125660720053393e+00, 2.833370314829343e+00 ] ) nucl_2 = np.array( [ 1.168459237342663e+00, 1.125660720053393e+00, 2.833370314829343e+00 ] )
print ( "[0][0][0] : ", np.linalg.norm(elec_1_w1-nucl_1) ) print ( "[0][0][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w1-nucl_1)) )/kappa )
print ( "[0][1][0] : ", np.linalg.norm(elec_1_w1-nucl_2) ) print ( "[0][1][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w1-nucl_2)) )/kappa )
print ( "[0][0][1] : ", np.linalg.norm(elec_2_w1-nucl_1) ) print ( "[0][0][1] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_2_w1-nucl_1)) )/kappa )
print ( "[1][0][0] : ", np.linalg.norm(elec_1_w2-nucl_1) ) print ( "[1][0][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w2-nucl_1)) )/kappa )
print ( "[1][1][0] : ", np.linalg.norm(elec_1_w2-nucl_2) ) print ( "[1][1][0] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_1_w2-nucl_2)) )/kappa )
print ( "[1][0][1] : ", np.linalg.norm(elec_2_w2-nucl_1) ) print ( "[1][0][1] : ", (1.0 - np.exp(-kappa * np.linalg.norm(elec_2_w2-nucl_1)) )/kappa )
#+end_src #+end_src
#+RESULTS: #+RESULTS:
: [0][0][0] : 7.546738741619978 : [0][0][0] : 0.9994721712909764
: [0][1][0] : 8.77102435246984 : [0][1][0] : 0.9998448354439821
: [0][0][1] : 3.698922010513608 : [0][0][1] : 0.9752498074577688
: [1][0][0] : 5.824059436060509 : [1][0][0] : 0.9970444172399963
: [1][1][0] : 7.080482110317645 : [1][1][0] : 0.9991586325813303
: [1][0][1] : 3.1804527583077356 : [1][0][1] : 0.9584331688679852
#+begin_src c :tangle (eval c_test) #+begin_src c :tangle (eval c_test)
@ -2000,28 +2013,27 @@ assert(qmckl_nucleus_provided(context));
double en_distance_rescaled[walk_num][nucl_num][elec_num]; double en_distance_rescaled[walk_num][nucl_num][elec_num];
rc = qmckl_get_electron_en_distance_rescaled(context, &(en_distance[0][0][0])); rc = qmckl_get_electron_en_distance_rescaled(context, &(en_distance_rescaled[0][0][0]));
assert (rc == QMCKL_SUCCESS); assert (rc == QMCKL_SUCCESS);
// TODO: check exact values // (e,n,w) in Fortran notation
//// (e,n,w) in Fortran notation // (1,1,1)
//// (1,1,1) assert(fabs(en_distance_rescaled[0][0][0] - 0.9994721712909764) < 1.e-12);
//assert(fabs(en_distance[0][0][0] - 7.546738741619978) < 1.e-12);
// // (1,2,1)
//// (1,2,1) assert(fabs(en_distance_rescaled[0][1][0] - 0.9998448354439821) < 1.e-12);
//assert(fabs(en_distance[0][1][0] - 8.77102435246984) < 1.e-12);
// // (2,1,1)
//// (2,1,1) assert(fabs(en_distance_rescaled[0][0][1] - 0.9752498074577688) < 1.e-12);
//assert(fabs(en_distance[0][0][1] - 3.698922010513608) < 1.e-12);
// // (1,1,2)
//// (1,1,2) assert(fabs(en_distance_rescaled[1][0][0] - 0.9970444172399963) < 1.e-12);
//assert(fabs(en_distance[1][0][0] - 5.824059436060509) < 1.e-12);
// // (1,2,2)
//// (1,2,2) assert(fabs(en_distance_rescaled[1][1][0] - 0.9991586325813303) < 1.e-12);
//assert(fabs(en_distance[1][1][0] - 7.080482110317645) < 1.e-12);
// // (2,1,2)
//// (2,1,2) assert(fabs(en_distance_rescaled[1][0][1] - 0.9584331688679852) < 1.e-12);
//assert(fabs(en_distance[1][0][1] - 3.1804527583077356) < 1.e-12);
#+end_src #+end_src