mirror of
https://gitlab.com/scemama/qmcchem.git
synced 2024-11-06 22:23:39 +01:00
General diag
This commit is contained in:
parent
ca21d44409
commit
09bf6140c8
@ -264,14 +264,15 @@ BEGIN_PROVIDER [ double precision, E_loc ]
|
|||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, E_loc_zv, (3) ]
|
BEGIN_PROVIDER [ double precision, E_loc_zv, ((pdmc_n_diag+1)*2) ]
|
||||||
implicit none
|
implicit none
|
||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Zero-variance parameter on E_loc
|
! Zero-variance parameter on E_loc
|
||||||
END_DOC
|
END_DOC
|
||||||
E_loc_zv(1) = E_loc + (E_trial-E_loc) * dmc_zv_weight_half
|
! E_loc_zv(1) = E_loc + (E_trial-E_loc) * dmc_zv_weight_half
|
||||||
E_loc_zv(2) = E_loc + (E_trial-E_loc) * dmc_zv_weight
|
! E_loc_zv(2) = E_loc + (E_trial-E_loc) * dmc_zv_weight
|
||||||
E_loc_zv(3) = dmc_zv_weight_half
|
! E_loc_zv(3) = dmc_zv_weight_half
|
||||||
|
E_loc_zv(:) = 0.d0
|
||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ BEGIN_PROVIDER [ double precision, pop_weight ]
|
|||||||
if (qmc_method == t_SRMC) then
|
if (qmc_method == t_SRMC) then
|
||||||
pop_weight = srmc_pop_weight_mult
|
pop_weight = srmc_pop_weight_mult
|
||||||
else if (qmc_method == t_PDMC) then
|
else if (qmc_method == t_PDMC) then
|
||||||
pop_weight = pdmc_pop_weight_mult(1)
|
pop_weight = pdmc_pop_weight_mult(pdmc_n_diag)
|
||||||
endif
|
endif
|
||||||
pop_weight_min = min(pop_weight,pop_weight_min)
|
pop_weight_min = min(pop_weight,pop_weight_min)
|
||||||
pop_weight_max = max(pop_weight,pop_weight_max)
|
pop_weight_max = max(pop_weight,pop_weight_max)
|
||||||
|
@ -111,7 +111,7 @@ END_SHELL
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
integer :: info
|
integer :: info
|
||||||
double precision :: H(0:pdmc_n_diag/2,0:pdmc_n_diag/2), S(0:pdmc_n_diag/2,0:pdmc_n_diag/2), w(0:pdmc_n_diag/2), work(3*pdmc_n_diag+1)
|
double precision :: H(0:pdmc_n_diag/2,0:pdmc_n_diag/2), S(0:pdmc_n_diag/2,0:pdmc_n_diag/2), w(0:pdmc_n_diag/2), work(3*pdmc_n_diag+1)
|
||||||
H = 0.d0
|
H = 0.d0
|
||||||
S = 0.d0
|
S = 0.d0
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ END_SHELL
|
|||||||
logical :: accepted
|
logical :: accepted
|
||||||
call brownian_step(p,q,accepted,delta_x)
|
call brownian_step(p,q,accepted,delta_x)
|
||||||
|
|
||||||
if ( psi_value * psi_value_save(i_walk) >= 0.d0 ) then
|
! if ( psi_value * psi_value_save(i_walk) >= 0.d0 ) then
|
||||||
delta = ((E_loc+E_loc_save(i_walk))*0.5d0 - E_ref) * p
|
delta = ((E_loc+E_loc_save(i_walk))*0.5d0 - E_ref) * p
|
||||||
if ( delta > thr ) then
|
if ( delta > thr ) then
|
||||||
pdmc_weight(i_walk) = dexp(-dtime_step*thr)
|
pdmc_weight(i_walk) = dexp(-dtime_step*thr)
|
||||||
@ -185,6 +185,11 @@ END_SHELL
|
|||||||
endif
|
endif
|
||||||
TOUCH dmc_zv_weight dmc_zv_weight_half
|
TOUCH dmc_zv_weight dmc_zv_weight_half
|
||||||
|
|
||||||
|
do i=1,pdmc_n_diag+1
|
||||||
|
E_loc_zv(i) = E_loc * pdmc_pop_weight_mult(i-1) * pdmc_weight(i_walk) * dmc_zv_weight + (E_trial-E_loc) * dmc_zv_weight
|
||||||
|
E_loc_zv(i+pdmc_n_diag+1) = pdmc_pop_weight_mult(i-1) * pdmc_weight(i_walk) * dmc_zv_weight
|
||||||
|
enddo
|
||||||
|
|
||||||
BEGIN_SHELL [ /usr/bin/python ]
|
BEGIN_SHELL [ /usr/bin/python ]
|
||||||
from properties import *
|
from properties import *
|
||||||
t = """
|
t = """
|
||||||
@ -221,9 +226,6 @@ END_SHELL
|
|||||||
|
|
||||||
block_weight += pdmc_pop_weight_mult(pdmc_n_diag) * pdmc_weight(i_walk)
|
block_weight += pdmc_pop_weight_mult(pdmc_n_diag) * pdmc_weight(i_walk)
|
||||||
|
|
||||||
H(0,0) += E_loc
|
|
||||||
S(0,0) += 1.d0
|
|
||||||
|
|
||||||
pdmc_pop_weight_mult(0) = 1.d0/pdmc_weight(i_walk)
|
pdmc_pop_weight_mult(0) = 1.d0/pdmc_weight(i_walk)
|
||||||
do k=0,pdmc_n_diag/2
|
do k=0,pdmc_n_diag/2
|
||||||
do l=0,pdmc_n_diag/2
|
do l=0,pdmc_n_diag/2
|
||||||
@ -231,14 +233,13 @@ END_SHELL
|
|||||||
S(k,l) += pdmc_pop_weight_mult(k+l) * pdmc_weight(i_walk)
|
S(k,l) += pdmc_pop_weight_mult(k+l) * pdmc_weight(i_walk)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
H = H + (E_trial - E_loc)
|
||||||
|
|
||||||
H = H+E_trial-E_loc
|
! else
|
||||||
|
! pdmc_weight(i_walk) = 1.d0
|
||||||
else
|
! pdmc_pop_weight(:,:) = 1.d0
|
||||||
pdmc_weight(i_walk) = 1.d0
|
! pdmc_pop_weight_mult(:) = 1.d0
|
||||||
pdmc_pop_weight(:,:) = 1.d0
|
! endif
|
||||||
pdmc_pop_weight_mult(:) = 1.d0
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
do k=1,pdmc_n_diag
|
do k=1,pdmc_n_diag
|
||||||
@ -303,17 +304,22 @@ for p in properties:
|
|||||||
print t.replace("$X",p[1])
|
print t.replace("$X",p[1])
|
||||||
END_SHELL
|
END_SHELL
|
||||||
|
|
||||||
|
H = 0.d0
|
||||||
|
H(0,0) = E_loc_zv_pdmc_block_walk(1)
|
||||||
|
H(1,0) = E_loc_zv_pdmc_block_walk(3)
|
||||||
|
H(0,1) = E_loc_zv_pdmc_block_walk(3)
|
||||||
|
H(1,1) = E_loc_zv_pdmc_block_walk(5)
|
||||||
|
|
||||||
|
S = 0.d0
|
||||||
|
S(0,0) = E_loc_zv_pdmc_block_walk(6)
|
||||||
|
S(1,0) = E_loc_zv_pdmc_block_walk(8)
|
||||||
|
S(0,1) = E_loc_zv_pdmc_block_walk(8)
|
||||||
|
S(1,1) = E_loc_zv_pdmc_block_walk(10)
|
||||||
|
S(2,2) = 1.d0
|
||||||
|
|
||||||
call dsygv(1, 'N', 'U', pdmc_n_diag/2+1, H, pdmc_n_diag/2+1, S, pdmc_n_diag/2+1, w, work, 3*(pdmc_n_diag+1), info)
|
call dsygv(1, 'N', 'U', pdmc_n_diag/2+1, H, pdmc_n_diag/2+1, S, pdmc_n_diag/2+1, w, work, 3*(pdmc_n_diag+1), info)
|
||||||
E_loc_zv_diag_pdmc_block_walk = w(0)
|
E_loc_zv_diag_pdmc_block_walk = w(0)
|
||||||
print *, info, w
|
|
||||||
! E_loc_zv_diag_pdmc_block_walk = 0.5d0 * (sqrt( &
|
|
||||||
! E_loc_zv_pdmc_block_walk(2)*E_loc_zv_pdmc_block_walk(2) &
|
|
||||||
! - 2.d0*E_trial*E_loc_zv_pdmc_block_walk(2) &
|
|
||||||
! + 5.d0*E_trial*E_trial &
|
|
||||||
! - 8.d0*E_loc_zv_pdmc_block_walk(1)*E_trial &
|
|
||||||
! + 4.d0*E_loc_zv_pdmc_block_walk(1)*E_loc_zv_pdmc_block_walk(1) &
|
|
||||||
! ) - E_loc_zv_pdmc_block_walk(2) - E_trial)
|
|
||||||
|
|
||||||
deallocate ( elec_coord_tmp, psi_grad_psi_inv_save, psi_grad_psi_inv_save_tmp )
|
deallocate ( elec_coord_tmp, psi_grad_psi_inv_save, psi_grad_psi_inv_save_tmp )
|
||||||
|
|
||||||
@ -359,7 +365,7 @@ BEGIN_PROVIDER [ integer, pdmc_n_diag ]
|
|||||||
BEGIN_DOC
|
BEGIN_DOC
|
||||||
! Size of the matrix to diagonalize
|
! Size of the matrix to diagonalize
|
||||||
END_DOC
|
END_DOC
|
||||||
pdmc_n_diag = 2
|
pdmc_n_diag = 8
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user