mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2025-04-30 04:15:00 +02:00
tests and fixes
This commit is contained in:
parent
145d537c66
commit
4964221bad
@ -552,7 +552,7 @@ qmckl_exit_code qmckl_provide_single_ee_distance(qmckl_context context)
|
||||
return rc;
|
||||
}
|
||||
|
||||
ctx->single_point.single_ee_distance_date = ctx->date;
|
||||
ctx->single_point.single_ee_distance_date = ctx->single_point.date;
|
||||
}
|
||||
|
||||
// printf("single_ee_distance_date %u\n", ctx->single_point.single_ee_distance_date);
|
||||
@ -589,7 +589,7 @@ integer(qmckl_exit_code) function qmckl_compute_single_ee_distance(context, &
|
||||
integer(qmckl_context), intent(in) :: context
|
||||
integer (c_int64_t) , intent(in) , value :: elec_num, num_in
|
||||
integer (c_int64_t) , intent(in) , value :: walk_num
|
||||
real (c_double ) , intent(in) :: coord(elec_num,3,walk_num)
|
||||
real (c_double ) , intent(in) :: coord(elec_num,walk_num,3)
|
||||
real (c_double ) , intent(in) :: single_coord(3,walk_num)
|
||||
real (c_double ) , intent(out) :: single_ee_distance(elec_num,walk_num)
|
||||
|
||||
@ -618,7 +618,7 @@ integer(qmckl_exit_code) function qmckl_compute_single_ee_distance(context, &
|
||||
do k=1,walk_num
|
||||
info = qmckl_distance(context, 'N', 'T', 1_8, elec_num, &
|
||||
single_coord(1,k), 3_8, &
|
||||
coord(1,1,k), elec_num, &
|
||||
coord(1,k,1), elec_num, &
|
||||
single_ee_distance(1,k), 1_8)
|
||||
if (info /= QMCKL_SUCCESS) then
|
||||
exit
|
||||
@ -6390,6 +6390,7 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
|
||||
assert (ctx != NULL);
|
||||
|
||||
|
||||
double metric[4] = {-1.0, -1.0, -1.0, 1.0};
|
||||
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
|
||||
ctx->jastrow_champ.factor_en[nw] = ctx->jastrow_champ.factor_en[nw] + ctx->single_point.delta_en[nw];
|
||||
ctx->jastrow_champ.factor_ee[nw] = ctx->jastrow_champ.factor_ee[nw] + ctx->single_point.delta_ee[nw];
|
||||
@ -6451,7 +6452,7 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
|
||||
+ i*ctx->electron.num*4
|
||||
+ ctx->single_point.num*4
|
||||
+ k] =
|
||||
ctx->single_point.ee_rescaled_single_gl[nw*ctx->electron.num*4
|
||||
metric[k] * ctx->single_point.ee_rescaled_single_gl[nw*ctx->electron.num*4
|
||||
+ i*4
|
||||
+ k];
|
||||
|
||||
@ -6476,8 +6477,17 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
|
||||
+ ctx->single_point.num] =
|
||||
ctx->single_point.een_rescaled_single_e_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4
|
||||
+ l*ctx->electron.num*4
|
||||
+ i*4 + k];
|
||||
ctx->jastrow_champ.een_rescaled_e_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4*ctx->electron.num + l*ctx->electron.num*4*ctx->electron.num + ctx->single_point.num*4*ctx->electron.num + k*ctx->electron.num + i] = ctx->single_point.een_rescaled_single_e_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4+ l*ctx->electron.num*4 + i*4 + k];
|
||||
+ i*4
|
||||
+ k];
|
||||
ctx->jastrow_champ.een_rescaled_e_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4*ctx->electron.num
|
||||
+ l*ctx->electron.num*4*ctx->electron.num
|
||||
+ ctx->single_point.num*4*ctx->electron.num
|
||||
+ k*ctx->electron.num
|
||||
+ i] =
|
||||
metric[k] * ctx->single_point.een_rescaled_single_e_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4
|
||||
+ l*ctx->electron.num*4
|
||||
+ i*4
|
||||
+ k];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6581,7 +6591,28 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
|
||||
}
|
||||
}
|
||||
|
||||
//ctx->date = ctx->date + 1UL;
|
||||
rc = qmckl_context_touch(context);
|
||||
if (rc != QMCKL_SUCCESS) return rc;
|
||||
|
||||
ctx->jastrow_champ.dtmp_c_date = ctx->date;
|
||||
ctx->jastrow_champ.ee_distance_rescaled_date = ctx->date;
|
||||
ctx->jastrow_champ.ee_distance_rescaled_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.een_rescaled_e_date = ctx->date;
|
||||
ctx->jastrow_champ.een_rescaled_e_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.een_rescaled_n_date = ctx->date;
|
||||
ctx->jastrow_champ.een_rescaled_n_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.en_distance_rescaled_date = ctx->date;
|
||||
ctx->jastrow_champ.en_distance_rescaled_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_ee_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_ee_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_een_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_een_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_en_date = ctx->date;
|
||||
ctx->jastrow_champ.factor_en_gl_date = ctx->date;
|
||||
ctx->jastrow_champ.tmp_c_date = ctx->date;
|
||||
ctx->electron.ee_distance_date = ctx->date;
|
||||
ctx->electron.en_distance_date = ctx->date;
|
||||
|
||||
ctx->single_point.date = ctx->date;
|
||||
ctx->single_point.een_rescaled_single_e_date = ctx->date;
|
||||
ctx->single_point.een_rescaled_single_n_date = ctx->date;
|
||||
@ -6602,8 +6633,8 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
|
||||
ctx->single_point.delta_en_gl_date = ctx->date;
|
||||
ctx->single_point.delta_ee_gl_date = ctx->date;
|
||||
|
||||
// TODO iets met de normale unrescaled afstanden
|
||||
|
||||
//rc = qmckl_context_touch(context);
|
||||
//if (rc != QMCKL_SUCCESS) return rc;
|
||||
|
||||
return QMCKL_SUCCESS;
|
||||
}
|
||||
@ -6924,6 +6955,226 @@ for (int a = 0; a < nucl_num; a++){
|
||||
#+end_src
|
||||
|
||||
|
||||
#+begin_src c :tangle (eval c_test)
|
||||
|
||||
|
||||
/* Check if Jastrow is properly initialized */
|
||||
assert(qmckl_jastrow_champ_provided(context));
|
||||
|
||||
rc = qmckl_set_point(context, 'N', elec_num, elec_coord, walk_num*elec_num*3);
|
||||
assert(rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en(context, &jastrow_en_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee(context, &jastrow_ee_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een(context, &jastrow_een_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en_gl(context, &en_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee_gl(context, &ee_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een_gl(context, &een_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_electron_en_distance(context, &en_distance[0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled(context, &ee_rescaled[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled_gl(context, &ee_rescaled_gl[0][0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
|
||||
|
||||
rc = qmckl_get_electron_coord(context, 'N', &coords[0][0][0], walk_num*elec_num*3);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_set_single_point(context, 'N', 2, new_coords, 3);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_single_en(context, &delta_en[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_ee(context, &delta_ee[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_een(context, &delta_een[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_single_en_gl(context, &delta_en_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_ee_gl(context, &delta_ee_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_een_gl(context, &delta_een_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_single_electron_ee_distance(context, &single_ee_distance[0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_single_electron_en_distance(context, &single_en_distance[0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_ee_rescaled_single(context, &single_ee_rescaled[0][0], walk_num*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_ee_rescaled_single_gl(context, &single_ee_rescaled_gl[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
coords[0][2][0] = new_coords[0];
|
||||
coords[0][2][1] = new_coords[1];
|
||||
coords[0][2][2] = new_coords[2];
|
||||
|
||||
rc = qmckl_get_jastrow_champ_single_accept(context);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
//rc = qmckl_context_touch(context);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en(context, &jastrow_en_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee(context, &jastrow_ee_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een(context, &jastrow_een_old[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en_gl(context, &en_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee_gl(context, &ee_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een_gl(context, &een_gl_old[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_electron_en_distance(context, &en_distance[0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled(context, &ee_rescaled[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled_gl(context, &ee_rescaled_gl[0][0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
|
||||
|
||||
double new_coords2[3] = {3.0,2.0,1.0};
|
||||
|
||||
|
||||
rc = qmckl_set_single_point(context, 'N', 1, new_coords2, 3);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_single_en(context, &delta_en[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_ee(context, &delta_ee[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_een(context, &delta_een[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_single_en_gl(context, &delta_en_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_ee_gl(context, &delta_ee_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_single_een_gl(context, &delta_een_gl[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_single_electron_ee_distance(context, &single_ee_distance[0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_single_electron_en_distance(context, &single_en_distance[0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_ee_rescaled_single(context, &single_ee_rescaled[0][0], walk_num*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_ee_rescaled_single_gl(context, &single_ee_rescaled_gl[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_electron_coord(context, 'N', &coords[0][0][0], walk_num*elec_num*3);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
coords[0][1][0] = new_coords2[0];
|
||||
coords[0][1][1] = new_coords2[1];
|
||||
coords[0][1][2] = new_coords2[2];
|
||||
|
||||
rc = qmckl_set_point(context, 'N', elec_num, &coords[0][0][0], walk_num*elec_num*3);
|
||||
rc = qmckl_context_touch(context);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en(context, &jastrow_en_new[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee(context, &jastrow_ee_new[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een(context, &jastrow_een_new[0], walk_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_factor_en_gl(context, &en_gl_new[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_ee_gl(context, &ee_gl_new[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_factor_een_gl(context, &een_gl_new[0][0][0], walk_num*4*elec_num);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_electron_ee_distance(context, &ee_distance[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_electron_en_distance(context, &en_distance[0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled(context, &ee_rescaled[0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
rc = qmckl_get_jastrow_champ_ee_distance_rescaled_gl(context, &ee_rescaled_gl[0][0][0][0]);
|
||||
assert (rc == QMCKL_SUCCESS);
|
||||
|
||||
for (int nw = 0; nw < walk_num; nw++) {
|
||||
//printf("jastrow_en_new[%d] = %f\t", nw, jastrow_en_new[nw]);
|
||||
//printf("jastrow_en_old[%d] = %f\t", nw, jastrow_en_old[nw]);
|
||||
//printf("delta_en[%d] = %f\n", nw, delta_en[nw]);
|
||||
//printf("jastrow_ee_new[%d] = %f\t", nw, jastrow_ee_new[nw]);
|
||||
//printf("jastrow_ee_old[%d] = %f\t", nw, jastrow_ee_old[nw]);
|
||||
//printf("delta_ee[%d] = %f\n", nw, delta_ee[nw]);
|
||||
assert(fabs((jastrow_en_new[nw] - jastrow_en_old[nw]) - delta_en[nw]) < 1.e-12);
|
||||
assert(fabs((jastrow_ee_new[nw] - jastrow_ee_old[nw]) - delta_ee[nw]) < 1.e-12);
|
||||
assert(fabs((jastrow_een_new[nw] - jastrow_een_old[nw]) - delta_een[nw]) < 1.e-12);
|
||||
for (int i = 0; i < elec_num; i++){
|
||||
for (int k = 0; k < 4; k++){
|
||||
//printf("ee_gl_new[%d][%d][%d] = %f\n", nw, k, i, ee_gl_new[nw][k][i]);
|
||||
//printf("ee_gl_old[%d][%d][%d] = %f\n", nw, k, i, ee_gl_old[nw][k][i]);
|
||||
//printf("delta_ee_gl[%d][%d][%d] = %f\n", nw, i, k, delta_ee_gl[nw][i][k]);
|
||||
assert(fabs((en_gl_new[nw][k][i] - en_gl_old[nw][k][i]) - delta_en_gl[nw][i][k]) < 1.e-12);
|
||||
assert(fabs((ee_gl_new[nw][k][i] - ee_gl_old[nw][k][i]) - delta_ee_gl[nw][i][k]) < 1.e-12);
|
||||
assert(fabs((een_gl_new[nw][k][i] - een_gl_old[nw][k][i]) - delta_een_gl[nw][k][i]) < 1.e-12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int nw = 0; nw < walk_num; nw++){
|
||||
for (int i = 0; i < elec_num; i++) {
|
||||
if (i == 2) continue;
|
||||
//printf("ee_distance[%d][1][%d] = %f\n", nw, i, ee_distance[nw][1][i]);
|
||||
//printf("single_ee_distance[%d][%d] = %f\n", nw, i, single_ee_distance[nw][i]);
|
||||
assert(fabs((ee_distance[nw][1][i]-single_ee_distance[nw][i])) < 1.e-12);
|
||||
}
|
||||
}
|
||||
|
||||
for (int a = 0; a < nucl_num; a++){
|
||||
assert(fabs((en_distance[1][a]-single_en_distance[a])) < 1.e-12);
|
||||
}
|
||||
for (int nw = 0; nw < walk_num; nw++) {
|
||||
for (int i = 0; i < elec_num; i++){
|
||||
assert(fabs(ee_rescaled[nw][1][i]-single_ee_rescaled[nw][i]) < 1.e-12);
|
||||
}
|
||||
}
|
||||
|
||||
for (int nw = 0; nw < walk_num; nw++) {
|
||||
for (int i = 0; i < elec_num; i++) {
|
||||
for (int m = 0; m < 4; m++) {
|
||||
if (i == 1) continue;
|
||||
//printf("%f\n", ee_rescaled_gl[nw][1][i][m]);
|
||||
//printf("%f\n", single_ee_rescaled_gl[nw][i][m]);
|
||||
assert(fabs(ee_rescaled_gl[nw][1][i][m] - single_ee_rescaled_gl[nw][i][m]) < 1.e-12);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#+end_src
|
||||
|
||||
|
||||
* End of files :noexport:
|
||||
|
||||
#+begin_src c :tangle (eval h_private_type)
|
||||
|
Loading…
x
Reference in New Issue
Block a user