mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2025-01-10 13:08:29 +01:00
Finished KE. #41
This commit is contained in:
parent
9722f09221
commit
9d542238e3
@ -307,8 +307,8 @@ qmckl_exit_code qmckl_provide_kinetic_energy(qmckl_context context) {
|
|||||||
ctx->det.mo_index_beta,
|
ctx->det.mo_index_beta,
|
||||||
ctx->mo_basis.mo_num,
|
ctx->mo_basis.mo_num,
|
||||||
ctx->mo_basis.mo_vgl,
|
ctx->mo_basis.mo_vgl,
|
||||||
ctx->det.det_vgl_alpha,
|
ctx->det.det_adj_matrix_alpha,
|
||||||
ctx->det.det_vgl_beta,
|
ctx->det.det_adj_matrix_beta,
|
||||||
ctx->local_energy.e_kin);
|
ctx->local_energy.e_kin);
|
||||||
} else {
|
} else {
|
||||||
return qmckl_failwith( context,
|
return qmckl_failwith( context,
|
||||||
@ -326,7 +326,8 @@ qmckl_exit_code qmckl_provide_kinetic_energy(qmckl_context context) {
|
|||||||
return QMCKL_SUCCESS;
|
return QMCKL_SUCCESS;
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Compute alpha
|
|
||||||
|
*** Compute kinetic enregy
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:Name: qmckl_compute_kinetic_energy
|
:Name: qmckl_compute_kinetic_energy
|
||||||
:CRetType: qmckl_exit_code
|
:CRetType: qmckl_exit_code
|
||||||
@ -345,14 +346,14 @@ qmckl_exit_code qmckl_provide_kinetic_energy(qmckl_context context) {
|
|||||||
| ~int64_t~ | ~mo_index_beta[det_num_beta][walk_num][beta_num]~ | in | MO indices for electrons |
|
| ~int64_t~ | ~mo_index_beta[det_num_beta][walk_num][beta_num]~ | in | MO indices for electrons |
|
||||||
| ~int64_t~ | ~mo_num~ | in | Number of MOs |
|
| ~int64_t~ | ~mo_num~ | in | Number of MOs |
|
||||||
| ~double~ | ~mo_vgl[5][walk_num][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs |
|
| ~double~ | ~mo_vgl[5][walk_num][elec_num][mo_num]~ | in | Value, gradients and Laplacian of the MOs |
|
||||||
| ~double~ | ~det_vgl_alpha[det_num_alpha][walk_num][5][alpha_num][alpha_num]~ | in | Value, gradients and Laplacian of the Det |
|
| ~double~ | ~det_adj_matrix_alpha[det_num_alpha][walk_num][alpha_num][alpha_num]~ | in | Value, gradients and Laplacian of the Det |
|
||||||
| ~double~ | ~det_vgl_beta[det_num_beta][walk_num][5][beta_num][beta_num]~ | in | Value, gradients and Laplacian of the Det |
|
| ~double~ | ~det_adj_matrix_beta[det_num_beta][walk_num][beta_num][beta_num]~ | in | Value, gradients and Laplacian of the Det |
|
||||||
| ~double~ | ~e_kin[walk_num]~ | out | Kinetic energy |
|
| ~double~ | ~e_kin[walk_num]~ | out | Kinetic energy |
|
||||||
|
|
||||||
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
|
||||||
integer function qmckl_compute_kinetic_energy_f(context, walk_num, &
|
integer function qmckl_compute_kinetic_energy_f(context, walk_num, &
|
||||||
det_num_alpha, det_num_beta, alpha_num, beta_num, elec_num, mo_index_alpha, mo_index_beta, &
|
det_num_alpha, det_num_beta, alpha_num, beta_num, elec_num, mo_index_alpha, mo_index_beta, &
|
||||||
mo_num, mo_vgl, det_vgl_alpha, det_vgl_beta, e_kin) &
|
mo_num, mo_vgl, det_adj_matrix_alpha, det_adj_matrix_beta, e_kin) &
|
||||||
result(info)
|
result(info)
|
||||||
use qmckl
|
use qmckl
|
||||||
implicit none
|
implicit none
|
||||||
@ -367,8 +368,8 @@ integer function qmckl_compute_kinetic_energy_f(context, walk_num, &
|
|||||||
integer*8, intent(in) :: mo_index_alpha(alpha_num, walk_num, det_num_alpha)
|
integer*8, intent(in) :: mo_index_alpha(alpha_num, walk_num, det_num_alpha)
|
||||||
integer*8, intent(in) :: mo_index_beta(beta_num, walk_num, det_num_beta)
|
integer*8, intent(in) :: mo_index_beta(beta_num, walk_num, det_num_beta)
|
||||||
double precision, intent(in) :: mo_vgl(mo_num, elec_num, walk_num, 5)
|
double precision, intent(in) :: mo_vgl(mo_num, elec_num, walk_num, 5)
|
||||||
double precision, intent(in) :: det_vgl_alpha(alpha_num, alpha_num, 5, walk_num, det_num_alpha)
|
double precision, intent(in) :: det_adj_matrix_alpha(alpha_num, alpha_num, walk_num, det_num_alpha)
|
||||||
double precision, intent(in) :: det_vgl_beta(beta_num, beta_num, 5, walk_num, det_num_beta)
|
double precision, intent(in) :: det_adj_matrix_beta(beta_num, beta_num, walk_num, det_num_beta)
|
||||||
double precision, intent(inout) :: e_kin(walk_num)
|
double precision, intent(inout) :: e_kin(walk_num)
|
||||||
integer*8 :: idet, iwalk, ielec, mo_id, imo
|
integer*8 :: idet, iwalk, ielec, mo_id, imo
|
||||||
|
|
||||||
@ -399,12 +400,25 @@ integer function qmckl_compute_kinetic_energy_f(context, walk_num, &
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
idet = 1
|
|
||||||
e_kin = 0.0d0
|
e_kin = 0.0d0
|
||||||
|
do idet = 1, det_num_alpha
|
||||||
do iwalk = 1, walk_num
|
do iwalk = 1, walk_num
|
||||||
! Alpha part
|
! Alpha part
|
||||||
|
do imo = 1, alpha_num
|
||||||
do ielec = 1, alpha_num
|
do ielec = 1, alpha_num
|
||||||
|
mo_id = mo_index_alpha(ielec, iwalk, idet)
|
||||||
|
e_kin(iwalk) = e_kin(iwalk) - 0.5d0 * det_adj_matrix_alpha(imo, ielec, iwalk, idet) * &
|
||||||
|
mo_vgl(mo_id, ielec, iwalk, 5)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
! Beta part
|
||||||
|
do imo = 1, beta_num
|
||||||
|
do ielec = 1, beta_num
|
||||||
mo_id = mo_index_beta(ielec, iwalk, idet)
|
mo_id = mo_index_beta(ielec, iwalk, idet)
|
||||||
|
e_kin(iwalk) = e_kin(iwalk) - 0.5d0 * det_adj_matrix_beta(imo, ielec, iwalk, idet) * &
|
||||||
|
mo_vgl(mo_id, alpha_num + ielec, iwalk, 5)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
@ -427,8 +441,8 @@ end function qmckl_compute_kinetic_energy_f
|
|||||||
const int64_t* mo_index_beta,
|
const int64_t* mo_index_beta,
|
||||||
const int64_t mo_num,
|
const int64_t mo_num,
|
||||||
const double* mo_vgl,
|
const double* mo_vgl,
|
||||||
const double* det_vgl_alpha,
|
const double* det_adj_matrix_alpha,
|
||||||
const double* det_vgl_beta,
|
const double* det_adj_matrix_beta,
|
||||||
double* const e_kin );
|
double* const e_kin );
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
@ -448,8 +462,8 @@ end function qmckl_compute_kinetic_energy_f
|
|||||||
mo_index_beta, &
|
mo_index_beta, &
|
||||||
mo_num, &
|
mo_num, &
|
||||||
mo_vgl, &
|
mo_vgl, &
|
||||||
det_vgl_alpha, &
|
det_adj_matrix_alpha, &
|
||||||
det_vgl_beta, &
|
det_adj_matrix_beta, &
|
||||||
e_kin) &
|
e_kin) &
|
||||||
bind(C) result(info)
|
bind(C) result(info)
|
||||||
|
|
||||||
@ -467,8 +481,8 @@ end function qmckl_compute_kinetic_energy_f
|
|||||||
integer (c_int64_t) , intent(in) :: mo_index_beta(beta_num,walk_num,det_num_beta)
|
integer (c_int64_t) , intent(in) :: mo_index_beta(beta_num,walk_num,det_num_beta)
|
||||||
integer (c_int64_t) , intent(in) , value :: mo_num
|
integer (c_int64_t) , intent(in) , value :: mo_num
|
||||||
real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,walk_num,5)
|
real (c_double ) , intent(in) :: mo_vgl(mo_num,elec_num,walk_num,5)
|
||||||
real (c_double ) , intent(in) :: det_vgl_alpha(alpha_num,alpha_num,5,walk_num,det_num_alpha)
|
real (c_double ) , intent(in) :: det_adj_matrix_alpha(alpha_num,alpha_num,walk_num,det_num_alpha)
|
||||||
real (c_double ) , intent(in) :: det_vgl_beta(beta_num,beta_num,5,walk_num,det_num_beta)
|
real (c_double ) , intent(in) :: det_adj_matrix_beta(beta_num,beta_num,walk_num,det_num_beta)
|
||||||
real (c_double ) , intent(out) :: e_kin(walk_num)
|
real (c_double ) , intent(out) :: e_kin(walk_num)
|
||||||
|
|
||||||
integer(c_int32_t), external :: qmckl_compute_kinetic_energy_f
|
integer(c_int32_t), external :: qmckl_compute_kinetic_energy_f
|
||||||
@ -484,8 +498,8 @@ end function qmckl_compute_kinetic_energy_f
|
|||||||
mo_index_beta, &
|
mo_index_beta, &
|
||||||
mo_num, &
|
mo_num, &
|
||||||
mo_vgl, &
|
mo_vgl, &
|
||||||
det_vgl_alpha, &
|
det_adj_matrix_alpha, &
|
||||||
det_vgl_beta, &
|
det_adj_matrix_beta, &
|
||||||
e_kin)
|
e_kin)
|
||||||
|
|
||||||
end function qmckl_compute_kinetic_energy
|
end function qmckl_compute_kinetic_energy
|
||||||
|
Loading…
Reference in New Issue
Block a user