Skip to content

Commit 45efa5c

Browse files
committed
working for multiple walkers
1 parent 51e41b2 commit 45efa5c

File tree

3 files changed

+43
-26
lines changed

3 files changed

+43
-26
lines changed

org/qmckl_forces.org

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ qmckl_exit_code qmckl_finite_difference_deriv_n(
395395
assert(rc == QMCKL_SUCCESS);
396396

397397
// Call the provided function
398-
rc = get_function(context, function_values, size);
398+
rc = get_function(context, function_values, walk_num*size);
399399
assert(rc == QMCKL_SUCCESS);
400400

401401
// Accumulate derivative using finite-difference coefficients
@@ -979,7 +979,7 @@ qmckl_exit_code qmckl_provide_forces_jastrow_en_g(qmckl_context context)
979979
| ~aord_num~ | ~int64_t~ | in | Number of coefficients |
980980
| ~a_vector~ | ~double[type_nucl_num][aord_num+1]~ | in | List of coefficients |
981981
| ~rescale_factor_en~ | ~double[type_nucl_num]~ | in | Rescale factor for electron-nucleus |
982-
| ~en_distance~ | ~double[elec_num][nucl_num]~ | in | Electron-nucleus distances |
982+
| ~en_distance~ | ~double[walk_num][elec_num][nucl_num]~ | in | Electron-nucleus distances |
983983
| ~en_distance_rescaled~ | ~double[walk_num][nucl_num][elec_num]~ | in | Electron-nucleus distances |
984984
| ~en_distance_rescaled_gl~ | ~double[walk_num][nucl_num][elec_num][4]~ | in | Electron-nucleus distance derivatives |
985985
| ~forces_jastrow_en_g~ | ~double[walk_num][nucl_num][3][elec_num][3]~ | out | Electron-nucleus forces |
@@ -1002,7 +1002,7 @@ function qmckl_compute_forces_jastrow_en_g_doc( &
10021002
integer (c_int64_t) , intent(in) , value :: aord_num
10031003
real (c_double ) , intent(in) :: a_vector(aord_num+1,type_nucl_num)
10041004
real (c_double ) , intent(in) :: rescale_factor_en(type_nucl_num)
1005-
real (c_double ) , intent(in) :: en_distance(nucl_num, elec_num)
1005+
real (c_double ) , intent(in) :: en_distance(nucl_num,elec_num,walk_num)
10061006
real (c_double ) , intent(in) :: en_distance_rescaled(elec_num,nucl_num,walk_num)
10071007
real (c_double ) , intent(in) :: en_distance_rescaled_gl(4, elec_num,nucl_num,walk_num)
10081008
real (c_double ) , intent(out) :: forces_jastrow_en_g(3,elec_num,3,nucl_num,walk_num)
@@ -1044,8 +1044,8 @@ function qmckl_compute_forces_jastrow_en_g_doc( &
10441044
forces_jastrow_en_g(:,:,:,:,nw) = 0.0d0
10451045
do a = 1, nucl_num
10461046
do i = 1, elec_num
1047-
expk = dexp(rescale_factor_en(type_nucl_vector(a)+1) * en_distance(a,i))
1048-
invdist = 1.d0 / en_distance(a,i)
1047+
expk = dexp(rescale_factor_en(type_nucl_vector(a)+1) * en_distance(a,i,nw))
1048+
invdist = 1.d0 / en_distance(a,i,nw)
10491049
x = en_distance_rescaled(i,a,nw)
10501050
if(abs(x) < 1.d-12) continue
10511051
denom = 1.0d0 + a_vector(2, type_nucl_vector(a)+1) * x
@@ -1395,7 +1395,7 @@ qmckl_exit_code qmckl_provide_forces_jastrow_en_l(qmckl_context context)
13951395
| ~aord_num~ | ~int64_t~ | in | Number of coefficients |
13961396
| ~a_vector~ | ~double[type_nucl_num][aord_num+1]~ | in | List of coefficients |
13971397
| ~rescale_factor_en~ | ~double[type_nucl_num]~ | in | Rescale factor for electron-nucleus |
1398-
| ~en_distance~ | ~double[elec_num][nucl_num]~ | in | Electron-nucleus distances |
1398+
| ~en_distance~ | ~double[walk_num][elec_num][nucl_num]~ | in | Electron-nucleus distances |
13991399
| ~en_distance_rescaled~ | ~double[walk_num][nucl_num][elec_num]~ | in | Electron-nucleus distances |
14001400
| ~en_distance_rescaled_gl~ | ~double[walk_num][nucl_num][elec_num][4]~ | in | Electron-nucleus distance derivatives |
14011401
| ~forces_jastrow_en_l~ | ~double[walk_num][nucl_num][3]~ | out | Electron-nucleus forces |
@@ -1418,7 +1418,7 @@ function qmckl_compute_forces_jastrow_en_l_doc( &
14181418
integer (c_int64_t) , intent(in) , value :: aord_num
14191419
real (c_double ) , intent(in) :: a_vector(aord_num+1,type_nucl_num)
14201420
real (c_double ) , intent(in) :: rescale_factor_en(type_nucl_num)
1421-
real (c_double ) , intent(in) :: en_distance(nucl_num, elec_num)
1421+
real (c_double ) , intent(in) :: en_distance(nucl_num, elec_num, walk_num)
14221422
real (c_double ) , intent(in) :: en_distance_rescaled(elec_num,nucl_num,walk_num)
14231423
real (c_double ) , intent(in) :: en_distance_rescaled_gl(4, elec_num,nucl_num,walk_num)
14241424
real (c_double ) , intent(out) :: forces_jastrow_en_l(3,nucl_num,walk_num)
@@ -1460,8 +1460,8 @@ function qmckl_compute_forces_jastrow_en_l_doc( &
14601460
forces_jastrow_en_l(:,:,nw) = 0.0d0
14611461
do a = 1, nucl_num
14621462
do i = 1, elec_num
1463-
expk = dexp(rescale_factor_en(type_nucl_vector(a)+1) * en_distance(a,i))
1464-
invdist = 1.d0 / en_distance(a,i)
1463+
expk = dexp(rescale_factor_en(type_nucl_vector(a)+1) * en_distance(a,i,nw))
1464+
invdist = 1.d0 / en_distance(a,i,nw)
14651465
x = en_distance_rescaled(i,a,nw)
14661466
if(abs(x) < 1.d-12) continue
14671467
denom = 1.0d0 + a_vector(2, type_nucl_vector(a)+1) * x

org/qmckl_jastrow_champ.org

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7438,7 +7438,7 @@ qmckl_exit_code qmckl_provide_een_rescaled_e_gl(qmckl_context context)
74387438
| ~elec_num~ | ~int64_t~ | in | Number of electrons |
74397439
| ~cord_num~ | ~int64_t~ | in | Order of polynomials |
74407440
| ~rescale_factor_ee~ | ~double~ | in | Factor to rescale ee distances |
7441-
| ~coord_ee~ | ~double[walk_num][elec_num][3]~ | in | Electron coordinates |
7441+
| ~coord_ee~ | ~double[3][walk_num][elec_num]~ | in | Electron coordinates |
74427442
| ~ee_distance~ | ~double[walk_num][elec_num][elec_num]~ | in | Electron-electron distances |
74437443
| ~een_rescaled_e~ | ~double[walk_num][0:cord_num][elec_num][elec_num]~ | in | Electron-electron distances |
74447444
| ~een_rescaled_e_gl~ | ~double[walk_num][0:cord_num][elec_num][4][elec_num]~ | out | Electron-electron rescaled distances |

org/qmckl_jastrow_champ_single.org

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ qmckl_get_single_electron_ee_distance(qmckl_context context,
553553
"distance is a NULL pointer");
554554
}
555555

556-
size_t sze = ctx->electron.num * ctx->electron.walker.num;
556+
int64_t sze = ctx->electron.num * ctx->electron.walker.num;
557557
if (size_max < sze) {
558558
return qmckl_failwith( context,
559559
QMCKL_INVALID_ARG_3,
@@ -821,7 +821,7 @@ qmckl_get_single_electron_en_distance(qmckl_context context,
821821
"distance is a NULL pointer");
822822
}
823823

824-
size_t sze = ctx->nucleus.num * ctx->electron.walker.num;
824+
int64_t sze = ctx->nucleus.num * ctx->electron.walker.num;
825825
if (size_max < sze) {
826826
return qmckl_failwith( context,
827827
QMCKL_INVALID_ARG_3,
@@ -2848,8 +2848,8 @@ qmckl_exit_code qmckl_provide_een_rescaled_single_e_gl(qmckl_context context)
28482848
| ~elec_num~ | ~int64_t~ | in | Number of electrons |
28492849
| ~cord_num~ | ~int64_t~ | in | Order of polynomials |
28502850
| ~rescale_factor_ee~ | ~double~ | in | Factor to rescale ee distances |
2851-
| ~coord~ | ~double[3]~ | in | Single electron coordinates |
2852-
| ~coord_ee~ | ~double[walk_num][3][elec_num]~ | in | Electron coordinates |
2851+
| ~coord~ | ~double[walk_num][3]~ | in | Single electron coordinates |
2852+
| ~coord_ee~ | ~double[3][walk_num][elec_num]~ | in | Electron coordinates |
28532853
| ~single_ee_distance~ | ~double[walk_num][elec_num]~ | in | Electron-electron single distances |
28542854
| ~een_rescaled_single_e~ | ~double[walk_num][0:cord_num][elec_num]~ | in | Electron-electron rescaled single distances |
28552855
| ~een_rescaled_single_e_gl~ | ~double[walk_num][0:cord_num][elec_num][4]~ | out | Electron-electron rescaled single distances derivative |
@@ -2870,7 +2870,7 @@ integer function qmckl_compute_een_rescaled_single_e_gl_doc( &
28702870
integer(c_int64_t) , intent(in), value :: cord_num
28712871
real(c_double) , intent(in), value :: rescale_factor_ee
28722872
real(c_double) , intent(in) :: coord(3,walk_num)
2873-
real(c_double) , intent(in) :: coord_ee(elec_num,3,walk_num)
2873+
real(c_double) , intent(in) :: coord_ee(elec_num,walk_num,3)
28742874
real(c_double) , intent(in) :: single_ee_distance(elec_num,walk_num)
28752875
real(c_double) , intent(in) :: een_rescaled_single_e(elec_num,0:cord_num,walk_num)
28762876
real(c_double) , intent(out) :: een_rescaled_single_e_gl(4,elec_num,0:cord_num,walk_num)
@@ -2912,13 +2912,17 @@ integer function qmckl_compute_een_rescaled_single_e_gl_doc( &
29122912

29132913
do nw = 1, walk_num
29142914
do i = 1, elec_num
2915+
if (i == num) cycle
29152916
rij_inv = 1.0d0 / single_ee_distance(i, nw)
29162917
do ii = 1, 3
2917-
elec_dist_gl(ii, i) = (coord(ii,nw) - coord_ee(i, ii, nw)) * rij_inv
2918+
elec_dist_gl(ii, i) = (coord(ii, nw) - coord_ee(i, nw, ii)) * rij_inv
29182919
end do
29192920
elec_dist_gl(4, i) = 2.0d0 * rij_inv
29202921
end do
29212922

2923+
! print *, single_ee_distance(2, 1), elec_dist_gl(1,2)
2924+
! stop
2925+
29222926
elec_dist_gl(:, num) = 0.0d0
29232927

29242928
do l = 1, cord_num
@@ -3033,6 +3037,13 @@ for (int elec = 0; elec < elec_num; elec++){
30333037
coords[1][elec][1] = new_coords[4];
30343038
coords[1][elec][2] = new_coords[5];
30353039

3040+
//coords[0][0][elec] = new_coords[0];
3041+
//coords[1][0][elec] = new_coords[1];
3042+
//coords[2][0][elec] = new_coords[2];
3043+
//coords[0][1][elec] = new_coords[3];
3044+
//coords[1][1][elec] = new_coords[4];
3045+
//coords[2][1][elec] = new_coords[5];
3046+
30363047
rc = qmckl_set_electron_coord(context, 'N', walk_num, &coords[0][0][0], walk_num*elec_num*3);
30373048
assert (rc == QMCKL_SUCCESS);
30383049

@@ -4934,7 +4945,7 @@ qmckl_exit_code qmckl_get_ee_rescaled_single_gl(qmckl_context context,
49344945
"Array is NULL");
49354946
}
49364947

4937-
size_t sze = 4 * ctx->electron.num * ctx->electron.walker.num;
4948+
int64_t sze = 4 * ctx->electron.num * ctx->electron.walker.num;
49384949
if (size_max < sze) {
49394950
return qmckl_failwith( context,
49404951
QMCKL_INVALID_ARG_3,
@@ -5037,7 +5048,7 @@ qmckl_exit_code qmckl_provide_ee_rescaled_single_gl(qmckl_context context)
50375048
| ~walk_num~ | ~int64_t~ | in | Number of walkers |
50385049
| ~single_ee_distance~ | ~double[elec_num][walk_num]~ | in | Single electron-electron distances |
50395050
| ~elec_coord~ | ~double[3][walk_num][elec_num]~ | in | Electron coordinates |
5040-
| ~coord~ | ~double[3]~ | in | Single electron coordinates |
5051+
| ~coord~ | ~double[walk_num][3]~ | in | Single electron coordinates |
50415052
| ~ee_rescaled_single_gl~ | ~double[walk_num][elec_num][4]~ | out | Electron-electron rescaled single distance derivatives |
50425053
|-------------------------+---------------------------------+--------+--------------------------------------------------------|
50435054

@@ -5055,7 +5066,7 @@ function qmckl_compute_ee_rescaled_single_gl_doc(context, num_in, &
50555066
integer (c_int64_t) , intent(in) , value :: walk_num
50565067
real (c_double ) , intent(in) :: single_ee_distance(elec_num,walk_num)
50575068
real (c_double ) , intent(in) :: elec_coord(elec_num,walk_num,3)
5058-
real (c_double ) , intent(in) :: coord(3)
5069+
real (c_double ) , intent(in) :: coord(3,walk_num)
50595070
real (c_double ) , intent(out) :: ee_rescaled_single_gl(4,elec_num,walk_num)
50605071
integer(qmckl_exit_code) :: info
50615072

@@ -5089,7 +5100,7 @@ function qmckl_compute_ee_rescaled_single_gl_doc(context, num_in, &
50895100
do i = 1, elec_num
50905101
rij_inv = 1.0d0 / single_ee_distance(i, nw)
50915102
do ii = 1, 3
5092-
elel_dist_gl(ii, i) = (elec_coord(i,nw, ii) - coord(ii)) * rij_inv
5103+
elel_dist_gl(ii, i) = (elec_coord(i,nw, ii) - coord(ii,nw)) * rij_inv
50935104
end do
50945105
elel_dist_gl(4, i) = 2.0d0 * rij_inv
50955106
end do
@@ -6322,6 +6333,11 @@ for (int elec = 0; elec < elec_num; elec++){
63226333
assert (rc == QMCKL_SUCCESS);
63236334

63246335
for (int nw = 0; nw < walk_num; nw++) {
6336+
//printf("electron %d walk %d \n", elec, nw);
6337+
//printf("jastrow_en_new %f\n", jastrow_en_new[nw]);
6338+
//printf("jastrow_en_old %f\n", jastrow_en_old[nw]);
6339+
//printf("delta_en %f\n", delta_en[nw]);
6340+
//printf("diff %f\n", jastrow_en_new[nw] - jastrow_en_old[nw] - delta_en[nw]);
63256341
assert(fabs((jastrow_en_new[nw] - jastrow_en_old[nw]) - delta_en[nw]) < 1.e-12);
63266342
}
63276343
}
@@ -6458,7 +6474,7 @@ qmckl_exit_code qmckl_provide_en_rescaled_single_gl(qmckl_context context)
64586474
| ~rescale_factor_en~ | ~double[nucl_num]~ | in | The factors for rescaled distances |
64596475
| ~walk_num~ | ~int64_t~ | in | Number of walkers |
64606476
| ~single_en_distance~ | ~double[walk_num][nucl_num]~ | in | Single electorn distances |
6461-
| ~coord~ | ~double[3]~ | in | Single electron coordinates |
6477+
| ~coord~ | ~double[walk_num][3]~ | in | Single electron coordinates |
64626478
| ~nucl_coord~ | ~double[3][nucl_num]~ | in | Nucleus coordinates |
64636479
| ~en_rescaled_single_gl~ | ~double[walk_num][nucl_num][4]~ | out | Electron-nucleus rescaled single distance derivatives |
64646480
|-------------------------+---------------------------------+--------+-------------------------------------------------------|
@@ -6477,7 +6493,7 @@ integer function qmckl_compute_en_rescaled_single_gl_doc_f(context, nucl_num, &
64776493
double precision , intent(in) :: rescale_factor_en(nucl_num)
64786494
integer*8 , intent(in) :: walk_num
64796495
double precision , intent(in) :: single_en_distance(nucl_num, walk_num)
6480-
double precision , intent(in) :: coord(3)
6496+
double precision , intent(in) :: coord(3,walk_num)
64816497
double precision , intent(in) :: nucl_coord(nucl_num,3)
64826498
double precision , intent(out) :: en_rescaled_single_gl(4,nucl_num,walk_num)
64836499

@@ -6510,7 +6526,7 @@ integer function qmckl_compute_en_rescaled_single_gl_doc_f(context, nucl_num, &
65106526
do a = 1, nucl_num
65116527
ria_inv = 1.0d0 / single_en_distance(a, nw)
65126528
do ii = 1, 3
6513-
elnuc_dist_gl(ii, a) = (coord(ii) - nucl_coord(a, ii)) * ria_inv
6529+
elnuc_dist_gl(ii, a) = (coord(ii,nw) - nucl_coord(a, ii)) * ria_inv
65146530
end do
65156531
elnuc_dist_gl(4, a) = 2.0d0 * ria_inv
65166532
end do
@@ -6611,7 +6627,7 @@ qmckl_exit_code qmckl_compute_en_rescaled_single_gl (
66116627
real (c_double ) , intent(in) :: rescale_factor_en(nucl_num)
66126628
integer (c_int64_t) , intent(in) , value :: walk_num
66136629
real (c_double ) , intent(in) :: single_en_distance(nucl_num,walk_num)
6614-
real (c_double ) , intent(in) :: coord(3)
6630+
real (c_double ) , intent(in) :: coord(3,walk_num)
66156631
real (c_double ) , intent(in) :: nucl_coord(nucl_num,3)
66166632
real (c_double ) , intent(out) :: en_rescaled_single_gl(4,nucl_num,walk_num)
66176633

@@ -7133,7 +7149,8 @@ qmckl_get_jastrow_champ_single_accept_alt(qmckl_context context)
71337149

71347150
double metric[4] = {-1.0, -1.0, -1.0, 1.0};
71357151

7136-
int old_date, do_update;
7152+
uint64_t old_date;
7153+
int do_update;
71377154

71387155
int shift1, shift2, shift3, shift4, shift5, shift6, shift7;
71397156

@@ -7736,7 +7753,7 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
77367753

77377754
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
77387755
for (int k = 0; k < 3; k++) {
7739-
ctx->point.coord.data[nw*3*ctx->electron.num + k*ctx->electron.num + ctx->single_point.num] = ctx->single_point.coord.data[nw*3 + k];
7756+
ctx->point.coord.data[k*ctx->electron.walker.num*ctx->electron.num + nw*ctx->electron.num + ctx->single_point.num] = ctx->single_point.coord.data[nw*3 + k];
77407757
}
77417758
}
77427759

0 commit comments

Comments
 (0)