1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-06-13 16:55:35 +02:00

Added AO_factor to AOs

This commit is contained in:
Anthony Scemama 2021-07-13 09:54:43 +02:00
parent 75a93d12c6
commit cdf92e2464

View File

@ -3188,7 +3188,7 @@ end function test_qmckl_ao_polynomial_vgl
* Combining radial and polynomial parts * Combining radial and polynomial parts
*** TODO Get *** Get
#+begin_src c :comments org :tangle (eval h_func) :noweb yes #+begin_src c :comments org :tangle (eval h_func) :noweb yes
qmckl_exit_code qmckl_get_ao_vgl(qmckl_context context, double* const ao_vgl); qmckl_exit_code qmckl_get_ao_vgl(qmckl_context context, double* const ao_vgl);
@ -3230,7 +3230,7 @@ qmckl_exit_code qmckl_get_ao_vgl(qmckl_context context, double* const ao_vgl) {
end interface end interface
#+end_src #+end_src
*** TODO Provide *** Provide
#+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_provide_ao_vgl(qmckl_context context); qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context);
@ -3302,6 +3302,7 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context)
ctx->ao_basis.nucleus_range, ctx->ao_basis.nucleus_range,
ctx->ao_basis.nucleus_max_ang_mom, ctx->ao_basis.nucleus_max_ang_mom,
ctx->ao_basis.shell_ang_mom, ctx->ao_basis.shell_ang_mom,
ctx->ao_basis.ao_factor,
ctx->ao_basis.shell_vgl, ctx->ao_basis.shell_vgl,
ctx->ao_basis.ao_vgl); ctx->ao_basis.ao_vgl);
if (rc != QMCKL_SUCCESS) { if (rc != QMCKL_SUCCESS) {
@ -3315,7 +3316,7 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context)
} }
#+end_src #+end_src
*** TODO Compute *** Compute
:PROPERTIES: :PROPERTIES:
:Name: qmckl_compute_ao_vgl :Name: qmckl_compute_ao_vgl
:CRetType: qmckl_exit_code :CRetType: qmckl_exit_code
@ -3336,6 +3337,7 @@ qmckl_exit_code qmckl_provide_ao_vgl(qmckl_context context)
| ~double~ | ~nucleus_range[nucl_num]~ | in | Range beyond which all is zero | | ~double~ | ~nucleus_range[nucl_num]~ | in | Range beyond which all is zero |
| ~int32_t~ | ~nucleus_max_ang_mom[nucl_num]~ | in | Maximum angular momentum per nucleus | | ~int32_t~ | ~nucleus_max_ang_mom[nucl_num]~ | in | Maximum angular momentum per nucleus |
| ~int32_t~ | ~shell_ang_mom[shell_num]~ | in | Angular momentum of each shell | | ~int32_t~ | ~shell_ang_mom[shell_num]~ | in | Angular momentum of each shell |
| ~double~ | ~ao_factor[ao_num]~ | in | Normalization factor of the AOs |
| ~double~ | ~shell_vgl[5][walk_num][elec_num][shell_num]~ | in | Value, gradients and Laplacian of the shells | | ~double~ | ~shell_vgl[5][walk_num][elec_num][shell_num]~ | in | Value, gradients and Laplacian of the shells |
| ~double~ | ~ao_vgl[5][walk_num][elec_num][ao_num]~ | out | Value, gradients and Laplacian of the AOs | | ~double~ | ~ao_vgl[5][walk_num][elec_num][ao_num]~ | out | Value, gradients and Laplacian of the AOs |
@ -3344,7 +3346,7 @@ integer function qmckl_compute_ao_vgl_f(context, &
ao_num, shell_num, elec_num, nucl_num, walk_num, & ao_num, shell_num, elec_num, nucl_num, walk_num, &
elec_coord, nucl_coord, nucleus_index, nucleus_shell_num, & elec_coord, nucl_coord, nucleus_index, nucleus_shell_num, &
nucleus_range, nucleus_max_ang_mom, shell_ang_mom, & nucleus_range, nucleus_max_ang_mom, shell_ang_mom, &
shell_vgl, ao_vgl) & ao_factor, shell_vgl, ao_vgl) &
result(info) result(info)
use qmckl use qmckl
implicit none implicit none
@ -3361,6 +3363,7 @@ integer function qmckl_compute_ao_vgl_f(context, &
double precision , intent(in) :: nucleus_range(nucl_num) double precision , intent(in) :: nucleus_range(nucl_num)
integer , intent(in) :: nucleus_max_ang_mom(nucl_num) integer , intent(in) :: nucleus_max_ang_mom(nucl_num)
integer , intent(in) :: shell_ang_mom(shell_num) integer , intent(in) :: shell_ang_mom(shell_num)
double precision , intent(in) :: ao_factor(ao_num)
double precision , intent(in) :: shell_vgl(shell_num,elec_num,walk_num,5) double precision , intent(in) :: shell_vgl(shell_num,elec_num,walk_num,5)
double precision , intent(out) :: ao_vgl(ao_num,elec_num,walk_num,5) double precision , intent(out) :: ao_vgl(ao_num,elec_num,walk_num,5)
@ -3422,32 +3425,36 @@ integer function qmckl_compute_ao_vgl_f(context, &
do il = lstart(l), lstart(l+1)-1 do il = lstart(l), lstart(l+1)-1
! Value ! Value
ao_vgl(k,ielec,iwalk,1) = & ao_vgl(k,ielec,iwalk,1) = &
poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,1) poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,1) * ao_factor(k)
! Grad_x ! Grad_x
ao_vgl(k,ielec,iwalk,2) = & ao_vgl(k,ielec,iwalk,2) = ( &
poly_vgl(2,il) * shell_vgl(ishell,ielec,iwalk,1) + & poly_vgl(2,il) * shell_vgl(ishell,ielec,iwalk,1) + &
poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,2) poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,2) &
) * ao_factor(k)
! Grad_y ! Grad_y
ao_vgl(k,ielec,iwalk,3) = & ao_vgl(k,ielec,iwalk,3) = ( &
poly_vgl(3,il) * shell_vgl(ishell,ielec,iwalk,1) + & poly_vgl(3,il) * shell_vgl(ishell,ielec,iwalk,1) + &
poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,3) poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,3) &
) * ao_factor(k)
! Grad_z ! Grad_z
ao_vgl(k,ielec,iwalk,4) = & ao_vgl(k,ielec,iwalk,4) = ( &
poly_vgl(4,il) * shell_vgl(ishell,ielec,iwalk,1) + & poly_vgl(4,il) * shell_vgl(ishell,ielec,iwalk,1) + &
poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,4) poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,4) &
) * ao_factor(k)
! Lapl_z ! Lapl_z
ao_vgl(k,ielec,iwalk,5) = & ao_vgl(k,ielec,iwalk,5) = ( &
poly_vgl(5,il) * shell_vgl(ishell,ielec,iwalk,1) + & poly_vgl(5,il) * shell_vgl(ishell,ielec,iwalk,1) + &
poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,5) + & poly_vgl(1,il) * shell_vgl(ishell,ielec,iwalk,5) + &
2.d0 * ( & 2.d0 * ( &
poly_vgl(2,il) * shell_vgl(ishell,ielec,iwalk,2) + & poly_vgl(2,il) * shell_vgl(ishell,ielec,iwalk,2) + &
poly_vgl(3,il) * shell_vgl(ishell,ielec,iwalk,3) + & poly_vgl(3,il) * shell_vgl(ishell,ielec,iwalk,3) + &
poly_vgl(4,il) * shell_vgl(ishell,ielec,iwalk,4) ) poly_vgl(4,il) * shell_vgl(ishell,ielec,iwalk,4) ) &
) * ao_factor(k)
k = k+1 k = k+1
end do end do
end do end do
@ -3477,6 +3484,7 @@ end function qmckl_compute_ao_vgl_f
const double* nucleus_range, const double* nucleus_range,
const int32_t* nucleus_max_ang_mom, const int32_t* nucleus_max_ang_mom,
const int32_t* shell_ang_mom, const int32_t* shell_ang_mom,
const double* ao_factor,
const double* shell_vgl, const double* shell_vgl,
double* const ao_vgl ); double* const ao_vgl );
#+end_src #+end_src
@ -3499,6 +3507,7 @@ end function qmckl_compute_ao_vgl_f
nucleus_range, & nucleus_range, &
nucleus_max_ang_mom, & nucleus_max_ang_mom, &
shell_ang_mom, & shell_ang_mom, &
ao_factor, &
shell_vgl, & shell_vgl, &
ao_vgl) & ao_vgl) &
bind(C) result(info) bind(C) result(info)
@ -3519,6 +3528,7 @@ end function qmckl_compute_ao_vgl_f
real (c_double ) , intent(in) :: nucleus_range(nucl_num) real (c_double ) , intent(in) :: nucleus_range(nucl_num)
integer (c_int32_t) , intent(in) :: nucleus_max_ang_mom(nucl_num) integer (c_int32_t) , intent(in) :: nucleus_max_ang_mom(nucl_num)
integer (c_int32_t) , intent(in) :: shell_ang_mom(shell_num) integer (c_int32_t) , intent(in) :: shell_ang_mom(shell_num)
real (c_double ) , intent(in) :: ao_factor(ao_num)
real (c_double ) , intent(in) :: shell_vgl(shell_num,elec_num,walk_num,5) real (c_double ) , intent(in) :: shell_vgl(shell_num,elec_num,walk_num,5)
real (c_double ) , intent(out) :: ao_vgl(ao_num,elec_num,walk_num,5) real (c_double ) , intent(out) :: ao_vgl(ao_num,elec_num,walk_num,5)
@ -3537,6 +3547,7 @@ end function qmckl_compute_ao_vgl_f
nucleus_range, & nucleus_range, &
nucleus_max_ang_mom, & nucleus_max_ang_mom, &
shell_ang_mom, & shell_ang_mom, &
ao_factor, &
shell_vgl, & shell_vgl, &
ao_vgl) ao_vgl)
@ -3617,7 +3628,7 @@ print ( "[1][0][26][224] : %25.15e"%(df(a,x,y,1)* (x[2] - y[2]) * (x[2] - y[2]))
[1][0][26][224] : -3.843880138733679e-09 [1][0][26][224] : -3.843880138733679e-09
#+end_example #+end_example
*** TODO Test *** Test
#+begin_src c :tangle (eval c_test) :exports none #+begin_src c :tangle (eval c_test) :exports none
{ {