ZV estimator

This commit is contained in:
Anthony Scemama 2016-05-26 19:58:43 +02:00
parent 09bf6140c8
commit 605ee8018c
2 changed files with 25 additions and 24 deletions

View File

@ -264,15 +264,15 @@ BEGIN_PROVIDER [ double precision, E_loc ]
END_PROVIDER
BEGIN_PROVIDER [ double precision, E_loc_zv, ((pdmc_n_diag+1)*2) ]
!BEGIN_PROVIDER [ double precision, E_loc_zv, ((pdmc_n_diag+1)*2) ]
BEGIN_PROVIDER [ double precision, E_loc_zv ]
implicit none
BEGIN_DOC
! Zero-variance parameter on E_loc
END_DOC
! 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 = E_loc + (E_trial-E_loc) * dmc_zv_weight
! E_loc_zv(3) = dmc_zv_weight_half
E_loc_zv(:) = 0.d0
! E_loc_zv(:) = 0.d0
END_PROVIDER

View File

@ -185,10 +185,10 @@ END_SHELL
endif
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
! 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 ]
from properties import *
@ -304,22 +304,23 @@ for p in properties:
print t.replace("$X",p[1])
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)
E_loc_zv_diag_pdmc_block_walk = w(0)
! H(0,0) = H(3,3)
! H(1,0) = H(4,3)
! H(0,1) = H(3,4)
! H(1,1) = H(4,4)
! S(0,0) = S(3,3)
! S(1,0) = S(4,3)
! S(0,1) = S(3,4)
! S(1,1) = S(4,4)
!
! print *, H(0,0)/S(0,0)
! print *, H(1,1)/S(1,1)
! print *, ''
!
! 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', 2, 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)
! print *, w
deallocate ( elec_coord_tmp, psi_grad_psi_inv_save, psi_grad_psi_inv_save_tmp )