1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2025-04-30 04:15:00 +02:00

optimizations

This commit is contained in:
Emiel Slootman 2024-12-18 00:32:21 +01:00
parent 5270ee4f58
commit 467411c230

View File

@ -6484,87 +6484,111 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
double metric[4] = {-1.0, -1.0, -1.0, 1.0};
int shift1, shift2, shift3, shift4, shift5, shift6, shift7;
int shift8, shift9, shift10, shift11, shift12, shift13, shift14;
if (ctx->jastrow_champ.cord_num > 0) {
shift1 = (ctx->jastrow_champ.cord_num+1)*ctx->electron.num*ctx->electron.num;
shift2 = ctx->electron.num*ctx->electron.num;
shift3 = (ctx->jastrow_champ.cord_num+1)*ctx->electron.num;
shift4 = (ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4*ctx->electron.num;
shift5 = ctx->electron.num*4*ctx->electron.num;
shift6 = ctx->electron.num*4;
shift7 = (ctx->jastrow_champ.cord_num+1)*ctx->electron.num*4;
shift8 = (ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*ctx->electron.num;
shift9 = (ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num;
shift10 = (ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*4*ctx->electron.num;
shift11 = ctx->nucleus.num*4*ctx->electron.num;
shift12 = (ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*4;
shift13 = ctx->nucleus.num*4;
shift14 = ctx->nucleus.num*ctx->electron.num;
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
ctx->jastrow_champ.factor_een[nw] = ctx->jastrow_champ.factor_een[nw] + ctx->single_point.delta_een[nw];
}
for (int i = 0; i < (ctx->electron.walker.num*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*ctx->electron.num*ctx->jastrow_champ.cord_num); i++) {
ctx->jastrow_champ.tmp_c[i] = ctx->jastrow_champ.tmp_c[i] + ctx->single_point.delta_p[i];
}
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int l = 0; l <= ctx->jastrow_champ.cord_num; l++){
for (int a = 0; a < ctx->nucleus.num; a++){
ctx->jastrow_champ.een_rescaled_n[nw*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*ctx->electron.num
+ l*ctx->nucleus.num*ctx->electron.num
+ a*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_n[nw*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num
+ l*ctx->nucleus.num
+ a];
}
for (int i = 0; i < ctx->electron.num; i++) {
ctx->jastrow_champ.een_rescaled_e[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*ctx->electron.num
+ l*ctx->electron.num*ctx->electron.num
ctx->jastrow_champ.een_rescaled_e[nw*shift1
+ l*shift2
+ i*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_e[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num
ctx->single_point.een_rescaled_single_e[nw*shift3
+ l*ctx->electron.num
+ i];
ctx->jastrow_champ.een_rescaled_e[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num*ctx->electron.num
+ l*ctx->electron.num*ctx->electron.num
ctx->jastrow_champ.een_rescaled_e[nw*shift1
+ l*shift2
+ ctx->single_point.num*ctx->electron.num
+ i] =
ctx->single_point.een_rescaled_single_e[nw*(ctx->jastrow_champ.cord_num+1)*ctx->electron.num
ctx->single_point.een_rescaled_single_e[nw*shift3
+ l*ctx->electron.num
+ i];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.een_rescaled_e_gl[nw*shift4
+ l*shift5
+ i*shift6
+ k*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_e_gl[nw*shift7
+ l*shift6
+ i*4
+ k];
ctx->jastrow_champ.een_rescaled_e_gl[nw*shift4
+ l*shift5
+ ctx->single_point.num*shift6
+ k*ctx->electron.num
+ i] =
metric[k] * ctx->single_point.een_rescaled_single_e_gl[nw*shift7
+ l*shift6
+ i*4
+ k];
}
}
for (int a = 0; a < ctx->nucleus.num; a++){
ctx->jastrow_champ.een_rescaled_n[nw*shift8
+ l*shift14
+ a*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_n[nw*shift9
+ l*ctx->nucleus.num
+ a];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.een_rescaled_n_gl[nw*shift10
+ l*shift11
+ a*shift6
+ k*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_n_gl[nw*shift12
+ l*shift13
+ a*4
+ k];
}
}
}
}
for (int i = 0; i < ctx->electron.walker.num * 4 * ctx->electron.num; i++) {
ctx->jastrow_champ.factor_een_gl[i] = ctx->jastrow_champ.factor_een_gl[i] + ctx->single_point.delta_een_gl[i];
}
for (int i = 0; i < (ctx->electron.walker.num*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*ctx->electron.num*ctx->jastrow_champ.cord_num); i++) {
ctx->jastrow_champ.tmp_c[i] = ctx->jastrow_champ.tmp_c[i] + ctx->single_point.delta_p[i];
}
/*
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int l = 0; l <= ctx->jastrow_champ.cord_num; l++){
for (int i = 0; i < ctx->electron.num; i++) {
for (int k = 0; k < 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
+ i*4*ctx->electron.num
+ k*ctx->electron.num
+ 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] =
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];
}
}
}
}
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int a = 0; a < ctx->nucleus.num; a++) {
for (int k = 0; k < 4; k++){
for (int l = 0; l <= ctx->jastrow_champ.cord_num; l++) {
ctx->jastrow_champ.een_rescaled_n_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*4*ctx->electron.num
+ l*ctx->nucleus.num*4*ctx->electron.num
+ a*4*ctx->electron.num
+ k*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.een_rescaled_single_n_gl[nw*(ctx->jastrow_champ.cord_num+1)*ctx->nucleus.num*4
+ l*ctx->nucleus.num*4
+ a*4
+ k];
for (int i = 0; i < ctx->electron.num; i++) {
for (int m = 0; m < ctx->jastrow_champ.cord_num; m++){
for (int m = 0; m < ctx->jastrow_champ.cord_num; m++){
for (int l = 0; l <= ctx->jastrow_champ.cord_num; l++) {
for (int a = 0; a < ctx->nucleus.num; a++) {
for (int k = 0; k < 4; k++){
for (int i = 0; i < ctx->electron.num; i++) {
ctx->jastrow_champ.dtmp_c[nw*ctx->electron.num*4*ctx->nucleus.num*ctx->jastrow_champ.cord_num*(ctx->jastrow_champ.cord_num+1)
+ m*ctx->electron.num*4*ctx->nucleus.num*(ctx->jastrow_champ.cord_num+1)
+ l*ctx->electron.num*4*ctx->nucleus.num
@ -6589,106 +6613,125 @@ qmckl_get_jastrow_champ_single_accept(qmckl_context context)
}
}
}
*/
for (int nw = 0; nw < ctx->electron.walker.num*(ctx->jastrow_champ.cord_num+1)*ctx->jastrow_champ.cord_num; nw++) {
for (int a = 0; a < ctx->nucleus.num; a++) {
for (int k = 0; k < 4; k++){
for (int i = 0; i < ctx->electron.num; i++) {
ctx->jastrow_champ.dtmp_c[nw*shift11
+ a*shift6
+ k*ctx->electron.num
+ i] =
ctx->jastrow_champ.dtmp_c[nw*shift11
+ a*shift6
+ k*ctx->electron.num
+ i] +
ctx->single_point.delta_p_gl[nw*shift11
+ k*shift14
+ a*ctx->electron.num
+ i];
}
}
}
}
}
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];
}
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int i = 0; i < ctx->electron.num; i++) {
ctx->electron.ee_distance[nw*ctx->electron.num*ctx->electron.num
+ i*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.single_ee_distance[nw*ctx->electron.num
+ i];
ctx->electron.ee_distance[nw*ctx->electron.num*ctx->electron.num
+ ctx->single_point.num*ctx->electron.num
+ i] =
ctx->single_point.single_ee_distance[nw*ctx->electron.num
+ i];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.ee_distance_rescaled_gl[nw*ctx->electron.num*ctx->electron.num*4
+ i*ctx->electron.num*4
+ ctx->single_point.num*4
+ k] =
metric[k] * ctx->single_point.ee_rescaled_single_gl[nw*ctx->electron.num*4
+ i*4
+ k];
ctx->jastrow_champ.ee_distance_rescaled_gl[nw*ctx->electron.num*ctx->electron.num*4
+ ctx->single_point.num*ctx->electron.num*4
+ i*4
+ k] =
ctx->single_point.ee_rescaled_single_gl[nw*ctx->electron.num*4
+ i*4
+ k];
}
}
}
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int a = 0; a < ctx->nucleus.num; a++) {
ctx->electron.en_distance[nw*ctx->electron.num*ctx->nucleus.num
ctx->electron.en_distance[nw*shift14
+ ctx->single_point.num*ctx->nucleus.num
+ a] =
ctx->single_point.single_en_distance[nw*ctx->nucleus.num
+ a];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.en_distance_rescaled_gl[nw*ctx->nucleus.num*4*ctx->electron.num
+ a*ctx->electron.num*4
+ ctx->single_point.num*4
+ k] =
ctx->single_point.en_rescaled_single_gl[nw*ctx->nucleus.num*4
+ a*4
+ k];
}
ctx->jastrow_champ.en_distance_rescaled[nw*ctx->nucleus.num*ctx->electron.num
ctx->jastrow_champ.en_distance_rescaled[nw*shift14
+ a*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.en_rescaled_single[nw*ctx->nucleus.num
+ a];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.en_distance_rescaled_gl[nw*shift11
+ a*shift6
+ ctx->single_point.num*4
+ k] =
ctx->single_point.en_rescaled_single_gl[nw*shift13
+ a*4
+ k];
}
}
for (int i = 0; i < ctx->electron.num; i++) {
ctx->jastrow_champ.ee_distance_rescaled[nw*ctx->electron.num*ctx->electron.num
ctx->jastrow_champ.ee_distance_rescaled[nw*shift2
+ i*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.ee_rescaled_single[nw*ctx->electron.num
+ i];
ctx->jastrow_champ.ee_distance_rescaled[nw*ctx->electron.num*ctx->electron.num
ctx->jastrow_champ.ee_distance_rescaled[nw*shift2
+ ctx->single_point.num*ctx->electron.num
+ i] =
ctx->single_point.ee_rescaled_single[nw*ctx->electron.num
+ i];
ctx->electron.ee_distance[nw*shift2
+ i*ctx->electron.num
+ ctx->single_point.num] =
ctx->single_point.single_ee_distance[nw*ctx->electron.num
+ i];
ctx->electron.ee_distance[nw*shift2
+ ctx->single_point.num*ctx->electron.num
+ i] =
ctx->single_point.single_ee_distance[nw*ctx->electron.num
+ i];
for (int k = 0; k < 4; k++){
ctx->jastrow_champ.factor_ee_gl[nw*4*ctx->electron.num
ctx->jastrow_champ.ee_distance_rescaled_gl[nw*shift5
+ i*shift6
+ ctx->single_point.num*4
+ k] =
metric[k] * ctx->single_point.ee_rescaled_single_gl[nw*shift6
+ i*4
+ k];
ctx->jastrow_champ.ee_distance_rescaled_gl[nw*shift5
+ ctx->single_point.num*shift6
+ i*4
+ k] =
ctx->single_point.ee_rescaled_single_gl[nw*shift6
+ i*4
+ k];
}
}
for (int k = 0; k < 4; k++){
for (int i = 0; i < ctx->electron.num; i++) {
ctx->jastrow_champ.factor_ee_gl[nw*shift6
+ k*ctx->electron.num
+ i] =
ctx->jastrow_champ.factor_ee_gl[nw*4*ctx->electron.num
ctx->jastrow_champ.factor_ee_gl[nw*shift6
+ k*ctx->electron.num
+ i] +
ctx->single_point.delta_ee_gl[nw*4*ctx->electron.num
ctx->single_point.delta_ee_gl[nw*shift6
+ i*4
+ k];
ctx->jastrow_champ.factor_en_gl[nw*4*ctx->electron.num
ctx->jastrow_champ.factor_en_gl[nw*shift6
+ k*ctx->electron.num
+ i] =
ctx->jastrow_champ.factor_en_gl[nw*4*ctx->electron.num
ctx->jastrow_champ.factor_en_gl[nw*shift6
+ k*ctx->electron.num
+ i] +
ctx->single_point.delta_en_gl[nw*4*ctx->electron.num
ctx->single_point.delta_en_gl[nw*shift6
+ i*4
+ k];
}
}
}
for (int nw = 0; nw < ctx->electron.walker.num; nw++) {
for (int k = 0; k < 3; k++) {
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];