mirror of
https://github.com/LCPQ/quantum_package
synced 2024-12-23 04:43:50 +01:00
Multistate corrected
This commit is contained in:
parent
cbf39830bc
commit
ab799d5acb
@ -177,7 +177,7 @@ class H_apply(object):
|
|||||||
call copy_h_apply_buffer_to_wf
|
call copy_h_apply_buffer_to_wf
|
||||||
selection_criterion_min = selection_criterion_min*0.1d0
|
selection_criterion_min = selection_criterion_min*0.1d0
|
||||||
selection_criterion = selection_criterion_min
|
selection_criterion = selection_criterion_min
|
||||||
call remove_small_contributions
|
!call remove_small_contributions
|
||||||
"""
|
"""
|
||||||
self.data["keys_work"] = """
|
self.data["keys_work"] = """
|
||||||
e_2_pert_buffer = 0.d0
|
e_2_pert_buffer = 0.d0
|
||||||
|
@ -11,7 +11,7 @@ program cisd
|
|||||||
|
|
||||||
pt2 = 1.d0
|
pt2 = 1.d0
|
||||||
diag_algorithm = "Lapack"
|
diag_algorithm = "Lapack"
|
||||||
do while (maxval(abs(pt2(1:N_st))) > 1.d-6)
|
do while (maxval(abs(pt2(1:N_st))) > 1.d-4)
|
||||||
call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st)
|
call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st)
|
||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
print *, 'N_det = ', N_det
|
print *, 'N_det = ', N_det
|
||||||
|
@ -33,10 +33,9 @@ subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,c
|
|||||||
|
|
||||||
is_selected = .False.
|
is_selected = .False.
|
||||||
do j=1,N_st
|
do j=1,N_st
|
||||||
s = dabs(e_2_pert_buffer(j,i))
|
s = -e_2_pert_buffer(j,i)
|
||||||
is_selected = s > selection_criterion*selection_criterion_factor .or. is_selected
|
is_selected = s > selection_criterion*selection_criterion_factor .or. is_selected
|
||||||
enddo
|
enddo
|
||||||
ASSERT (s>=-1.d-8)
|
|
||||||
|
|
||||||
|
|
||||||
if (is_selected) then
|
if (is_selected) then
|
||||||
@ -60,8 +59,10 @@ subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,c
|
|||||||
ASSERT (sum(popcnt(h_apply_buffer(iproc)%det(:,1,i)) )== elec_alpha_num)
|
ASSERT (sum(popcnt(h_apply_buffer(iproc)%det(:,1,i)) )== elec_alpha_num)
|
||||||
ASSERT (sum(popcnt(h_apply_buffer(iproc)%det(:,2,i))) == elec_beta_num)
|
ASSERT (sum(popcnt(h_apply_buffer(iproc)%det(:,2,i))) == elec_beta_num)
|
||||||
enddo
|
enddo
|
||||||
selection_criterion = smax
|
!$OMP CRITICAL
|
||||||
selection_criterion_min = smin
|
selection_criterion = max(selection_criterion,smax)
|
||||||
|
selection_criterion_min = min(selection_criterion_min,smin)
|
||||||
|
!$OMP END CRITICAL
|
||||||
end
|
end
|
||||||
|
|
||||||
BEGIN_PROVIDER [ double precision, selection_criterion ]
|
BEGIN_PROVIDER [ double precision, selection_criterion ]
|
||||||
@ -84,17 +85,32 @@ subroutine remove_small_contributions
|
|||||||
! provided.
|
! provided.
|
||||||
END_DOC
|
END_DOC
|
||||||
integer :: i,j,k, N_removed
|
integer :: i,j,k, N_removed
|
||||||
logical keep
|
logical, allocatable :: keep(:)
|
||||||
double precision :: i_H_psi_array(N_states)
|
double precision :: i_H_psi_array(N_states)
|
||||||
k = 0
|
allocate (keep(N_det))
|
||||||
N_removed = 0
|
call diagonalize_CI
|
||||||
do i=N_det, 50
|
do i=1,N_det
|
||||||
call i_H_psi(psi_det_sorted(1,1,i),psi_det_sorted,psi_coef_sorted,N_int,N_det,psi_det_size,N_states,i_H_psi_array)
|
keep(i) = .True.
|
||||||
keep = .False.
|
|
||||||
do j=1,N_states
|
|
||||||
keep = keep .or. (dabs(psi_coef_sorted(i,j)*i_H_psi_array(j)) > selection_criterion_min)
|
|
||||||
enddo
|
enddo
|
||||||
if (keep) then
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
|
!$OMP PRIVATE(i,j,i_H_psi_array) &
|
||||||
|
!$OMP SHARED(k,psi_det_sorted,psi_coef_sorted,N_int,N_det,psi_det_size,N_states, &
|
||||||
|
!$OMP selection_criterion_min,keep,N_det_generators) &
|
||||||
|
!$OMP REDUCTION(+:N_removed)
|
||||||
|
!$OMP DO
|
||||||
|
do i=2*N_det_generators+1, N_det
|
||||||
|
call i_H_psi(psi_det_sorted(1,1,i),psi_det_sorted,psi_coef_sorted,N_int,min(N_det,2*N_det_generators),psi_det_size,N_states,i_H_psi_array)
|
||||||
|
keep(i) = .False.
|
||||||
|
do j=1,N_states
|
||||||
|
keep(i) = keep(i) .or. (-(psi_coef_sorted(i,j)*i_H_psi_array(j)) > selection_criterion_min)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
!$OMP END DO
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
N_removed = 0
|
||||||
|
k = 0
|
||||||
|
do i=1, N_det
|
||||||
|
if (keep(i)) then
|
||||||
k += 1
|
k += 1
|
||||||
do j=1,N_int
|
do j=1,N_int
|
||||||
psi_det(j,1,k) = psi_det_sorted(j,1,i)
|
psi_det(j,1,k) = psi_det_sorted(j,1,i)
|
||||||
@ -107,10 +123,12 @@ subroutine remove_small_contributions
|
|||||||
N_removed += 1
|
N_removed += 1
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
deallocate(keep)
|
||||||
if (N_removed > 0) then
|
if (N_removed > 0) then
|
||||||
|
N_det = N_det - N_removed
|
||||||
|
SOFT_TOUCH N_det psi_det psi_coef
|
||||||
call write_int(output_dets,N_removed, 'Removed determinants')
|
call write_int(output_dets,N_removed, 'Removed determinants')
|
||||||
endif
|
endif
|
||||||
SOFT_TOUCH N_det psi_det psi_coef
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user