mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-11-03 20:54:09 +01:00
Fixed bug in 3-body Jastrow. Tested in CHAMP->correct
This commit is contained in:
parent
fc7d8b2af5
commit
4133a6ba0e
@ -42,7 +42,7 @@
|
|||||||
\sum_{p=2}^{N_{\text{ord}}}
|
\sum_{p=2}^{N_{\text{ord}}}
|
||||||
\sum_{k=0}^{p-1}
|
\sum_{k=0}^{p-1}
|
||||||
\sum_{l=0}^{p-k-2\delta_{k,0}}
|
\sum_{l=0}^{p-k-2\delta_{k,0}}
|
||||||
c_{lkp\alpha} \left[ g_\text{ee}({r}_{ij}) \right]^k
|
c_{lkp\alpha} \left[ g_\text{e}({r}_{ij}) \right]^k
|
||||||
\left[ \left[ g_\alpha({R}_{i\alpha}) \right]^l + \left[ g_\alpha({R}_{j\alpha}) \right]^l \right]
|
\left[ \left[ g_\alpha({R}_{i\alpha}) \right]^l + \left[ g_\alpha({R}_{j\alpha}) \right]^l \right]
|
||||||
\left[ g_\alpha({R}_{i\,\alpha}) \, g_\alpha({R}_{j\alpha}) \right]^{(p-k-l)/2}
|
\left[ g_\alpha({R}_{i\,\alpha}) \, g_\alpha({R}_{j\alpha}) \right]^{(p-k-l)/2}
|
||||||
\]
|
\]
|
||||||
@ -60,7 +60,7 @@
|
|||||||
$J_{\text{ee}}$ and $J_{\text{eN}}$ have an asymptotic value of zero.
|
$J_{\text{ee}}$ and $J_{\text{eN}}$ have an asymptotic value of zero.
|
||||||
|
|
||||||
The eN and eeN parameters are the same of all identical nuclei.
|
The eN and eeN parameters are the same of all identical nuclei.
|
||||||
The types of nuclei use zero-based indexing.
|
Warning: The types of nuclei use zero-based indexing.
|
||||||
|
|
||||||
* Headers :noexport:
|
* Headers :noexport:
|
||||||
#+begin_src elisp :noexport :results none
|
#+begin_src elisp :noexport :results none
|
||||||
@ -581,12 +581,12 @@ qmckl_set_jastrow_champ_type_nucl_vector(qmckl_context context,
|
|||||||
for (int i=0 ; i<nucl_num ; ++i) {
|
for (int i=0 ; i<nucl_num ; ++i) {
|
||||||
if (type_nucl_vector[i] < 0) {
|
if (type_nucl_vector[i] < 0) {
|
||||||
return qmckl_failwith( context, QMCKL_INVALID_ARG_2,
|
return qmckl_failwith( context, QMCKL_INVALID_ARG_2,
|
||||||
"qmckl_set_type_nucl_vector",
|
"qmckl_set_jastrow_champ_type_nucl_vector",
|
||||||
"Inconsistent values of type_nucl_vector (<0)" );
|
"Inconsistent values of type_nucl_vector (<0)" );
|
||||||
}
|
}
|
||||||
if (type_nucl_vector[i] >= type_nucl_num) {
|
if (type_nucl_vector[i] >= type_nucl_num) {
|
||||||
return qmckl_failwith( context, QMCKL_INVALID_ARG_2,
|
return qmckl_failwith( context, QMCKL_INVALID_ARG_2,
|
||||||
"qmckl_set_type_nucl_vector",
|
"qmckl_set_jastrow_champ_type_nucl_vector",
|
||||||
"Inconsistent values of type_nucl_vector (>=nucl_num). Values should use 0-based indexing as in C." );
|
"Inconsistent values of type_nucl_vector (>=nucl_num). Values should use 0-based indexing as in C." );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -595,7 +595,7 @@ qmckl_set_jastrow_champ_type_nucl_vector(qmckl_context context,
|
|||||||
qmckl_exit_code rc = qmckl_free(context, ctx->jastrow_champ.type_nucl_vector);
|
qmckl_exit_code rc = qmckl_free(context, ctx->jastrow_champ.type_nucl_vector);
|
||||||
if (rc != QMCKL_SUCCESS) {
|
if (rc != QMCKL_SUCCESS) {
|
||||||
return qmckl_failwith( context, rc,
|
return qmckl_failwith( context, rc,
|
||||||
"qmckl_set_type_nucl_vector",
|
"qmckl_set_jastrow_champ_type_nucl_vector",
|
||||||
"Unable to free ctx->jastrow_champ.type_nucl_vector");
|
"Unable to free ctx->jastrow_champ.type_nucl_vector");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -676,7 +676,7 @@ qmckl_set_jastrow_champ_a_vector(qmckl_context context,
|
|||||||
if(new_array == NULL) {
|
if(new_array == NULL) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_ALLOCATION_FAILED,
|
QMCKL_ALLOCATION_FAILED,
|
||||||
"qmckl_set_jastrow_champ_coefficient",
|
"qmckl_set_jastrow_champ_a_vector",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -736,7 +736,7 @@ qmckl_set_jastrow_champ_b_vector(qmckl_context context,
|
|||||||
if(new_array == NULL) {
|
if(new_array == NULL) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_ALLOCATION_FAILED,
|
QMCKL_ALLOCATION_FAILED,
|
||||||
"qmckl_set_jastrow_champ_coefficient",
|
"qmckl_set_jastrow_champ_b_vector",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,7 +807,7 @@ qmckl_set_jastrow_champ_c_vector(qmckl_context context,
|
|||||||
if(new_array == NULL) {
|
if(new_array == NULL) {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
QMCKL_ALLOCATION_FAILED,
|
QMCKL_ALLOCATION_FAILED,
|
||||||
"qmckl_set_jastrow_champ_coefficient",
|
"qmckl_set_jastrow_champ_c_vector",
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2008,7 +2008,7 @@ rc = qmckl_check(context,
|
|||||||
);
|
);
|
||||||
assert(rc == QMCKL_SUCCESS);
|
assert(rc == QMCKL_SUCCESS);
|
||||||
rc = qmckl_check(context,
|
rc = qmckl_check(context,
|
||||||
qmckl_set_jastrow_champ_c_vector(context, c_vector,dim_c_vector*type_nucl_num)
|
qmckl_set_jastrow_champ_c_vector(context, c_vector, dim_c_vector*type_nucl_num)
|
||||||
);
|
);
|
||||||
assert(rc == QMCKL_SUCCESS);
|
assert(rc == QMCKL_SUCCESS);
|
||||||
|
|
||||||
@ -7589,15 +7589,15 @@ qmckl_exit_code qmckl_provide_dtmp_c(qmckl_context context)
|
|||||||
:END:
|
:END:
|
||||||
|
|
||||||
#+NAME: qmckl_factor_c_vector_full_args
|
#+NAME: qmckl_factor_c_vector_full_args
|
||||||
| Variable | Type | In/Out | Description |
|
| Variable | Type | In/Out | Description |
|
||||||
|--------------------+----------------------------------------+--------+------------------------------|
|
|--------------------+---------------------------------------+--------+------------------------------|
|
||||||
| ~context~ | ~qmckl_context~ | in | Global state |
|
| ~context~ | ~qmckl_context~ | in | Global state |
|
||||||
| ~nucl_num~ | ~int64_t~ | in | Number of atoms |
|
| ~nucl_num~ | ~int64_t~ | in | Number of atoms |
|
||||||
| ~dim_c_vector~ | ~int64_t~ | in | dimension of cord full table |
|
| ~dim_c_vector~ | ~int64_t~ | in | dimension of cord full table |
|
||||||
| ~type_nucl_num~ | ~int64_t~ | in | dimension of cord full table |
|
| ~type_nucl_num~ | ~int64_t~ | in | dimension of cord full table |
|
||||||
| ~type_nucl_vector~ | ~int64_t[nucl_num]~ | in | dimension of cord full table |
|
| ~type_nucl_vector~ | ~int64_t[nucl_num]~ | in | dimension of cord full table |
|
||||||
| ~c_vector~ | ~double[dim_c_vector][type_nucl_num]~ | in | dimension of cord full table |
|
| ~c_vector~ | ~double[dim_c_vector][type_nucl_num]~ | in | dimension of cord full table |
|
||||||
| ~c_vector_full~ | ~double[dim_c_vector][nucl_num]~ | out | Full list of coefficients |
|
| ~c_vector_full~ | ~double[nucl_num][dim_c_vector]~ | out | Full list of coefficients |
|
||||||
|
|
||||||
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
||||||
integer function qmckl_compute_c_vector_full_doc_f( &
|
integer function qmckl_compute_c_vector_full_doc_f( &
|
||||||
@ -7611,8 +7611,8 @@ integer function qmckl_compute_c_vector_full_doc_f( &
|
|||||||
integer*8 , intent(in) :: dim_c_vector
|
integer*8 , intent(in) :: dim_c_vector
|
||||||
integer*8 , intent(in) :: type_nucl_num
|
integer*8 , intent(in) :: type_nucl_num
|
||||||
integer*8 , intent(in) :: type_nucl_vector(nucl_num)
|
integer*8 , intent(in) :: type_nucl_vector(nucl_num)
|
||||||
double precision , intent(in) :: c_vector(type_nucl_num, dim_c_vector)
|
double precision , intent(in) :: c_vector(dim_c_vector, type_nucl_num)
|
||||||
double precision , intent(out) :: c_vector_full(nucl_num,dim_c_vector)
|
double precision , intent(out) :: c_vector_full(nucl_num, dim_c_vector)
|
||||||
double precision :: x
|
double precision :: x
|
||||||
integer*8 :: i, a, k, l, nw
|
integer*8 :: i, a, k, l, nw
|
||||||
|
|
||||||
@ -7625,7 +7625,7 @@ integer function qmckl_compute_c_vector_full_doc_f( &
|
|||||||
if (info /= QMCKL_SUCCESS) return
|
if (info /= QMCKL_SUCCESS) return
|
||||||
|
|
||||||
do a = 1, nucl_num
|
do a = 1, nucl_num
|
||||||
c_vector_full(a,1:dim_c_vector) = c_vector(type_nucl_vector(a)+1,1:dim_c_vector)
|
c_vector_full(a,1:dim_c_vector) = c_vector(1:dim_c_vector, type_nucl_vector(a)+1)
|
||||||
end do
|
end do
|
||||||
|
|
||||||
end function qmckl_compute_c_vector_full_doc_f
|
end function qmckl_compute_c_vector_full_doc_f
|
||||||
@ -7677,7 +7677,7 @@ qmckl_exit_code qmckl_compute_c_vector_full_hpc (
|
|||||||
|
|
||||||
for (int i=0; i < dim_c_vector; ++i) {
|
for (int i=0; i < dim_c_vector; ++i) {
|
||||||
for (int a=0; a < nucl_num; ++a){
|
for (int a=0; a < nucl_num; ++a){
|
||||||
c_vector_full[a + i*nucl_num] = c_vector[(type_nucl_vector[a])+i*type_nucl_num];
|
c_vector_full[a + i*nucl_num] = c_vector[i + type_nucl_vector[a]*dim_c_vector];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7746,7 +7746,7 @@ qmckl_exit_code qmckl_compute_c_vector_full (
|
|||||||
:FRetType: qmckl_exit_code
|
:FRetType: qmckl_exit_code
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
#+NAME: qmckl_factor_lkpm_combined_index_args
|
#+NAME: lkpm_combined_index_args
|
||||||
| Variable | Type | In/Out | Description |
|
| Variable | Type | In/Out | Description |
|
||||||
|-----------------------+----------------------------+--------+-------------------------------|
|
|-----------------------+----------------------------+--------+-------------------------------|
|
||||||
| ~context~ | ~qmckl_context~ | in | Global state |
|
| ~context~ | ~qmckl_context~ | in | Global state |
|
||||||
@ -7755,7 +7755,7 @@ qmckl_exit_code qmckl_compute_c_vector_full (
|
|||||||
| ~lkpm_combined_index~ | ~int64_t[4][dim_c_vector]~ | out | Full list of combined indices |
|
| ~lkpm_combined_index~ | ~int64_t[4][dim_c_vector]~ | out | Full list of combined indices |
|
||||||
|
|
||||||
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
||||||
integer function qmckl_compute_lkpm_combined_index_f( &
|
integer function qmckl_compute_lkpm_combined_index_doc_f( &
|
||||||
context, cord_num, dim_c_vector, lkpm_combined_index) &
|
context, cord_num, dim_c_vector, lkpm_combined_index) &
|
||||||
result(info)
|
result(info)
|
||||||
use qmckl
|
use qmckl
|
||||||
@ -7777,13 +7777,13 @@ integer function qmckl_compute_lkpm_combined_index_f( &
|
|||||||
kk = 0
|
kk = 0
|
||||||
do p = 2, cord_num
|
do p = 2, cord_num
|
||||||
do k = p - 1, 0, -1
|
do k = p - 1, 0, -1
|
||||||
if (k .ne. 0) then
|
if (k /= 0) then
|
||||||
lmax = p - k
|
lmax = p - k
|
||||||
else
|
else
|
||||||
lmax = p - k - 2
|
lmax = p - k - 2
|
||||||
end if
|
end if
|
||||||
do l = lmax, 0, -1
|
do l = lmax, 0, -1
|
||||||
if (iand(p - k - l, 1_8) .eq. 1) cycle
|
if (iand(p - k - l, 1_8) .eq. 1_8) cycle
|
||||||
m = (p - k - l)/2
|
m = (p - k - l)/2
|
||||||
kk = kk + 1
|
kk = kk + 1
|
||||||
lkpm_combined_index(kk, 1) = l
|
lkpm_combined_index(kk, 1) = l
|
||||||
@ -7794,11 +7794,11 @@ integer function qmckl_compute_lkpm_combined_index_f( &
|
|||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
end function qmckl_compute_lkpm_combined_index_f
|
end function qmckl_compute_lkpm_combined_index_doc_f
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src c :comments org :tangle (eval c) :noweb yes
|
#+begin_src c :comments org :tangle (eval c) :noweb yes
|
||||||
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
qmckl_exit_code qmckl_compute_lkpm_combined_index_hpc (
|
||||||
const qmckl_context context,
|
const qmckl_context context,
|
||||||
const int64_t cord_num,
|
const int64_t cord_num,
|
||||||
const int64_t dim_c_vector,
|
const int64_t dim_c_vector,
|
||||||
@ -7834,8 +7834,85 @@ qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
|||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
# #+CALL: generate_c_header(table=qmckl_factor_lkpm_combined_index_args,rettyp=get_value("CRetType"),fname=get_value("Name"))
|
#+CALL: generate_c_interface(table=lkpm_combined_index_args,rettyp=get_value("CRetType"),fname="qmckl_compute_lkpm_combined_index_doc")
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
#+begin_src f90 :tangle (eval f) :comments org :exports none
|
||||||
|
integer(c_int32_t) function qmckl_compute_lkpm_combined_index_doc &
|
||||||
|
(context, cord_num, dim_c_vector, lkpm_combined_index) &
|
||||||
|
bind(C) result(info)
|
||||||
|
|
||||||
|
use, intrinsic :: iso_c_binding
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
integer (c_int64_t) , intent(in) , value :: context
|
||||||
|
integer (c_int64_t) , intent(in) , value :: cord_num
|
||||||
|
integer (c_int64_t) , intent(in) , value :: dim_c_vector
|
||||||
|
integer (c_int64_t) , intent(out) :: lkpm_combined_index(dim_c_vector,4)
|
||||||
|
|
||||||
|
integer(c_int32_t), external :: qmckl_compute_lkpm_combined_index_doc_f
|
||||||
|
info = qmckl_compute_lkpm_combined_index_doc_f &
|
||||||
|
(context, cord_num, dim_c_vector, lkpm_combined_index)
|
||||||
|
|
||||||
|
end function qmckl_compute_lkpm_combined_index_doc
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src c :comments org :tangle (eval c) :noweb yes
|
||||||
|
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
||||||
|
const qmckl_context context,
|
||||||
|
const int64_t cord_num,
|
||||||
|
const int64_t dim_c_vector,
|
||||||
|
int64_t* const lkpm_combined_index ) {
|
||||||
|
|
||||||
|
#ifdef HAVE_HPC
|
||||||
|
return qmckl_compute_lkpm_combined_index_hpc(context, cord_num, dim_c_vector, lkpm_combined_index);
|
||||||
|
#else
|
||||||
|
return qmckl_compute_lkpm_combined_index_doc(context, cord_num, dim_c_vector, lkpm_combined_index);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
#+CALL: generate_c_header(table=lkpm_combined_index_args,rettyp=get_value("CRetType"),fname=get_value("Name"))
|
||||||
|
|
||||||
|
#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none
|
||||||
|
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
||||||
|
const qmckl_context context,
|
||||||
|
const int64_t cord_num,
|
||||||
|
const int64_t dim_c_vector,
|
||||||
|
int64_t* const lkpm_combined_index );
|
||||||
|
#+end_src
|
||||||
|
#+CALL: generate_c_header(table=lkpm_combined_index_args,rettyp=get_value("CRetType"),fname="qmckl_compute_lkpm_combined_index_doc")
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
#+begin_src c :tangle (eval h_func) :comments org
|
||||||
|
qmckl_exit_code qmckl_compute_lkpm_combined_index_doc (
|
||||||
|
const qmckl_context context,
|
||||||
|
const int64_t cord_num,
|
||||||
|
const int64_t dim_c_vector,
|
||||||
|
int64_t* const lkpm_combined_index );
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+CALL: generate_c_header(table=lkpm_combined_index_args,rettyp=get_value("CRetType"),fname="qmckl_compute_lkpm_combined_index_hpc")
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
#+begin_src c :tangle (eval h_func) :comments org
|
||||||
|
qmckl_exit_code qmckl_compute_lkpm_combined_index_hpc (
|
||||||
|
const qmckl_context context,
|
||||||
|
const int64_t cord_num,
|
||||||
|
const int64_t dim_c_vector,
|
||||||
|
int64_t* const lkpm_combined_index );
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none
|
||||||
|
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
||||||
|
const qmckl_context context,
|
||||||
|
const int64_t cord_num,
|
||||||
|
const int64_t dim_c_vector,
|
||||||
|
int64_t* const lkpm_combined_index );
|
||||||
|
#+end_src
|
||||||
|
#+CALL: generate_c_header(table=lkpm_combined_index_args,rettyp=get_value("CRetType"),fname=get_value("Name"))
|
||||||
|
|
||||||
#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none
|
#+begin_src c :comments org :tangle (eval h_private_func) :noweb yes :exports none
|
||||||
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
qmckl_exit_code qmckl_compute_lkpm_combined_index (
|
||||||
const qmckl_context context,
|
const qmckl_context context,
|
||||||
@ -8526,6 +8603,20 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
|
|||||||
ctx->jastrow_champ.factor_een = factor_een;
|
ctx->jastrow_champ.factor_een = factor_een;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
rc = qmckl_compute_jastrow_champ_factor_een_naive(context,
|
||||||
|
ctx->electron.walker.num,
|
||||||
|
ctx->electron.num,
|
||||||
|
ctx->nucleus.num,
|
||||||
|
ctx->jastrow_champ.cord_num,
|
||||||
|
ctx->jastrow_champ.dim_c_vector,
|
||||||
|
ctx->jastrow_champ.c_vector_full,
|
||||||
|
ctx->jastrow_champ.lkpm_combined_index,
|
||||||
|
ctx->jastrow_champ.een_rescaled_e,
|
||||||
|
ctx->jastrow_champ.een_rescaled_n,
|
||||||
|
ctx->jastrow_champ.factor_een);
|
||||||
|
*/
|
||||||
|
|
||||||
rc = qmckl_compute_jastrow_champ_factor_een(context,
|
rc = qmckl_compute_jastrow_champ_factor_een(context,
|
||||||
ctx->electron.walker.num,
|
ctx->electron.walker.num,
|
||||||
ctx->electron.num,
|
ctx->electron.num,
|
||||||
@ -8566,8 +8657,8 @@ qmckl_exit_code qmckl_provide_jastrow_champ_factor_een(qmckl_context context)
|
|||||||
| ~dim_c_vector~ | ~int64_t~ | in | dimension of full coefficient vector |
|
| ~dim_c_vector~ | ~int64_t~ | in | dimension of full coefficient vector |
|
||||||
| ~c_vector_full~ | ~double[dim_c_vector][nucl_num]~ | in | full coefficient vector |
|
| ~c_vector_full~ | ~double[dim_c_vector][nucl_num]~ | in | full coefficient vector |
|
||||||
| ~lkpm_combined_index~ | ~int64_t[4][dim_c_vector]~ | in | combined indices |
|
| ~lkpm_combined_index~ | ~int64_t[4][dim_c_vector]~ | in | combined indices |
|
||||||
| ~een_rescaled_e~ | ~double[walk_num][elec_num][elec_num][0:cord_num]~ | in | Electron-nucleus rescaled |
|
| ~een_rescaled_e~ | ~double[walk_num][0:cord_num][elec_num][elec_num]~ | in | Electron-nucleus rescaled |
|
||||||
| ~een_rescaled_n~ | ~double[walk_num][elec_num][nucl_num][0:cord_num]~ | in | Electron-nucleus rescaled factor |
|
| ~een_rescaled_n~ | ~double[walk_num][0:cord_num][nucl_num][elec_num]~ | in | Electron-nucleus rescaled factor |
|
||||||
| ~factor_een~ | ~double[walk_num]~ | out | Electron-nucleus jastrow |
|
| ~factor_een~ | ~double[walk_num]~ | out | Electron-nucleus jastrow |
|
||||||
|
|
||||||
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
||||||
@ -8582,8 +8673,8 @@ integer function qmckl_compute_jastrow_champ_factor_een_naive_f( &
|
|||||||
integer*8 , intent(in) :: walk_num, elec_num, cord_num, nucl_num, dim_c_vector
|
integer*8 , intent(in) :: walk_num, elec_num, cord_num, nucl_num, dim_c_vector
|
||||||
integer*8 , intent(in) :: lkpm_combined_index(dim_c_vector,4)
|
integer*8 , intent(in) :: lkpm_combined_index(dim_c_vector,4)
|
||||||
double precision , intent(in) :: c_vector_full(nucl_num, dim_c_vector)
|
double precision , intent(in) :: c_vector_full(nucl_num, dim_c_vector)
|
||||||
double precision , intent(in) :: een_rescaled_e(0:cord_num, elec_num, elec_num, walk_num)
|
double precision , intent(in) :: een_rescaled_e(elec_num, elec_num, 0:cord_num, walk_num)
|
||||||
double precision , intent(in) :: een_rescaled_n(0:cord_num, nucl_num, elec_num, walk_num)
|
double precision , intent(in) :: een_rescaled_n(elec_num, nucl_num, 0:cord_num, walk_num)
|
||||||
double precision , intent(out) :: factor_een(walk_num)
|
double precision , intent(out) :: factor_een(walk_num)
|
||||||
|
|
||||||
integer*8 :: i, a, j, l, k, p, m, n, nw
|
integer*8 :: i, a, j, l, k, p, m, n, nw
|
||||||
@ -8597,34 +8688,58 @@ integer function qmckl_compute_jastrow_champ_factor_een_naive_f( &
|
|||||||
if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4
|
if (nucl_num <= 0) info = QMCKL_INVALID_ARG_4
|
||||||
if (cord_num < 0) info = QMCKL_INVALID_ARG_5
|
if (cord_num < 0) info = QMCKL_INVALID_ARG_5
|
||||||
if (info /= QMCKL_SUCCESS) return
|
if (info /= QMCKL_SUCCESS) return
|
||||||
|
|
||||||
factor_een = 0.0d0
|
|
||||||
|
! do nw =1, walk_num
|
||||||
|
! factor_een(nw) = 0.0d0
|
||||||
|
! do n = 1, dim_c_vector
|
||||||
|
! l = lkpm_combined_index(n, 1)
|
||||||
|
! k = lkpm_combined_index(n, 2)
|
||||||
|
! p = lkpm_combined_index(n, 3)
|
||||||
|
! m = lkpm_combined_index(n, 4)
|
||||||
|
|
||||||
|
! do a = 1, nucl_num
|
||||||
|
! accu2 = 0.0d0
|
||||||
|
! cn = c_vector_full(a, n)
|
||||||
|
! do j = 1, elec_num
|
||||||
|
! accu = 0.0d0
|
||||||
|
! do i = 1, elec_num
|
||||||
|
|
||||||
|
! accu = accu + een_rescaled_e(i,j,k,nw) * &
|
||||||
|
! een_rescaled_n(i,a,m,nw)
|
||||||
|
! end do
|
||||||
|
! accu2 = accu2 + accu * een_rescaled_n(j,a,m + l,nw)
|
||||||
|
! end do
|
||||||
|
! factor_een(nw) = factor_een(nw) + accu2 * cn
|
||||||
|
! end do
|
||||||
|
! end do
|
||||||
|
! end do
|
||||||
|
|
||||||
do nw =1, walk_num
|
do nw =1, walk_num
|
||||||
do n = 1, dim_c_vector
|
factor_een(nw) = 0.d0
|
||||||
l = lkpm_combined_index(n, 1)
|
do n = 1, dim_c_vector
|
||||||
k = lkpm_combined_index(n, 2)
|
l = lkpm_combined_index(n, 1)
|
||||||
p = lkpm_combined_index(n, 3)
|
k = lkpm_combined_index(n, 2)
|
||||||
m = lkpm_combined_index(n, 4)
|
p = lkpm_combined_index(n, 3)
|
||||||
|
m = lkpm_combined_index(n, 4)
|
||||||
|
|
||||||
do a = 1, nucl_num
|
do a = 1, nucl_num
|
||||||
accu2 = 0.0d0
|
accu2 = 0.0d0
|
||||||
cn = c_vector_full(a, n)
|
cn = c_vector_full(a, n)
|
||||||
do j = 1, elec_num
|
print *, a, l, k, p, cn
|
||||||
accu = 0.0d0
|
do j = 1, elec_num
|
||||||
do i = 1, elec_num
|
accu = 0.0d0
|
||||||
accu = accu + een_rescaled_e(k,i,j,nw) * &
|
do i = 1, j-1
|
||||||
een_rescaled_n(m,a,i,nw)
|
|
||||||
!if(nw .eq. 1) then
|
accu = accu + een_rescaled_e(i,j,k,nw) * &
|
||||||
! print *,l,k,p,m,j,i,een_rescaled_e(k,i,j,nw), een_rescaled_n(m,a,i,nw), accu
|
(een_rescaled_n(i,a,l,nw) + een_rescaled_n(j,a,l,nw)) * &
|
||||||
!endif
|
(een_rescaled_n(i,a,m,nw) * een_rescaled_n(j,a,m,nw))
|
||||||
|
end do
|
||||||
|
accu2 = accu2 + accu
|
||||||
|
end do
|
||||||
|
factor_een(nw) = factor_een(nw) + accu2 * cn
|
||||||
end do
|
end do
|
||||||
accu2 = accu2 + accu * een_rescaled_n(m + l,a,j,nw)
|
end do
|
||||||
!print *, l,m,nw,accu, accu2, een_rescaled_n(m + l, a, j, nw), cn, factor_een(nw)
|
|
||||||
end do
|
|
||||||
factor_een(nw) = factor_een(nw) + accu2 * cn
|
|
||||||
end do
|
|
||||||
end do
|
|
||||||
end do
|
end do
|
||||||
|
|
||||||
end function qmckl_compute_jastrow_champ_factor_een_naive_f
|
end function qmckl_compute_jastrow_champ_factor_een_naive_f
|
||||||
@ -8786,11 +8901,12 @@ qmckl_compute_jastrow_champ_factor_een_doc (const qmckl_context context,
|
|||||||
const int64_t dim_c_vector,
|
const int64_t dim_c_vector,
|
||||||
const double* c_vector_full,
|
const double* c_vector_full,
|
||||||
const int64_t* lkpm_combined_index,
|
const int64_t* lkpm_combined_index,
|
||||||
const double* een_rescaled_e,
|
const double* tmp_c,
|
||||||
const double* een_rescaled_n,
|
const double* een_rescaled_n,
|
||||||
double* const factor_een );
|
double* const factor_een );
|
||||||
|
|
||||||
qmckl_exit_code
|
qmckl_exit_code
|
||||||
|
|
||||||
qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
|
qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
|
||||||
const int64_t walk_num,
|
const int64_t walk_num,
|
||||||
const int64_t elec_num,
|
const int64_t elec_num,
|
||||||
@ -8799,7 +8915,7 @@ qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
|
|||||||
const int64_t dim_c_vector,
|
const int64_t dim_c_vector,
|
||||||
const double* c_vector_full,
|
const double* c_vector_full,
|
||||||
const int64_t* lkpm_combined_index,
|
const int64_t* lkpm_combined_index,
|
||||||
const double* een_rescaled_e,
|
const double* tmp_c,
|
||||||
const double* een_rescaled_n,
|
const double* een_rescaled_n,
|
||||||
double* const factor_een );
|
double* const factor_een );
|
||||||
#+end_src
|
#+end_src
|
||||||
@ -8814,17 +8930,17 @@ qmckl_compute_jastrow_champ_factor_een (const qmckl_context context,
|
|||||||
const int64_t dim_c_vector,
|
const int64_t dim_c_vector,
|
||||||
const double* c_vector_full,
|
const double* c_vector_full,
|
||||||
const int64_t* lkpm_combined_index,
|
const int64_t* lkpm_combined_index,
|
||||||
const double* een_rescaled_e,
|
const double* tmp_c,
|
||||||
const double* een_rescaled_n,
|
const double* een_rescaled_n,
|
||||||
double* const factor_een )
|
double* const factor_een )
|
||||||
{
|
{
|
||||||
#ifdef HAVE_HPC
|
#ifdef HAVE_HPC
|
||||||
return qmckl_compute_jastrow_champ_factor_een_doc (context, walk_num, elec_num, nucl_num, cord_num, dim_c_vector,
|
return qmckl_compute_jastrow_champ_factor_een_doc (context, walk_num, elec_num, nucl_num, cord_num, dim_c_vector,
|
||||||
c_vector_full, lkpm_combined_index, een_rescaled_e, een_rescaled_n,
|
c_vector_full, lkpm_combined_index, tmp_c, een_rescaled_n,
|
||||||
factor_een );
|
factor_een );
|
||||||
#else
|
#else
|
||||||
return qmckl_compute_jastrow_champ_factor_een_doc (context, walk_num, elec_num, nucl_num, cord_num, dim_c_vector,
|
return qmckl_compute_jastrow_champ_factor_een_doc (context, walk_num, elec_num, nucl_num, cord_num, dim_c_vector,
|
||||||
c_vector_full, lkpm_combined_index, een_rescaled_e, een_rescaled_n,
|
c_vector_full, lkpm_combined_index, tmp_c, een_rescaled_n,
|
||||||
factor_een );
|
factor_een );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user