mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-26 21:33:30 +01:00
Merge branch 'develop' of github.com:QuantumPackage/qp2 into develop
This commit is contained in:
commit
915217bc15
@ -36,7 +36,7 @@ END_PROVIDER
|
|||||||
pt2_N_teeth = 1
|
pt2_N_teeth = 1
|
||||||
else
|
else
|
||||||
pt2_minDetInFirstTeeth = min(5, N_det_generators)
|
pt2_minDetInFirstTeeth = min(5, N_det_generators)
|
||||||
do pt2_N_teeth=400,2,-1
|
do pt2_N_teeth=100,2,-1
|
||||||
if(testTeethBuilding(pt2_minDetInFirstTeeth, pt2_N_teeth)) exit
|
if(testTeethBuilding(pt2_minDetInFirstTeeth, pt2_N_teeth)) exit
|
||||||
end do
|
end do
|
||||||
end if
|
end if
|
||||||
@ -61,17 +61,16 @@ logical function testTeethBuilding(minF, N)
|
|||||||
|
|
||||||
allocate(tilde_w(N_det_generators), tilde_cW(0:N_det_generators))
|
allocate(tilde_w(N_det_generators), tilde_cW(0:N_det_generators))
|
||||||
|
|
||||||
do i=1,N_det_generators
|
|
||||||
tilde_w(i) = psi_coef_sorted_gen(i,pt2_stoch_istate)**2 !+ 1.d-20
|
|
||||||
enddo
|
|
||||||
|
|
||||||
double precision :: norm
|
|
||||||
norm = 0.d0
|
norm = 0.d0
|
||||||
|
double precision :: norm
|
||||||
do i=N_det_generators,1,-1
|
do i=N_det_generators,1,-1
|
||||||
norm += tilde_w(i)
|
tilde_w(i) = psi_coef_sorted_gen(i,pt2_stoch_istate) * &
|
||||||
|
psi_coef_sorted_gen(i,pt2_stoch_istate)
|
||||||
|
norm = norm + tilde_w(i)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
tilde_w(:) = tilde_w(:) / norm
|
f = 1.d0/norm
|
||||||
|
tilde_w(:) = tilde_w(:) * f
|
||||||
|
|
||||||
tilde_cW(0) = -1.d0
|
tilde_cW(0) = -1.d0
|
||||||
do i=1,N_det_generators
|
do i=1,N_det_generators
|
||||||
@ -132,7 +131,7 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
|||||||
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp psi_det_sorted
|
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp psi_det_sorted
|
||||||
PROVIDE psi_det_hii N_generators_bitmask
|
PROVIDE psi_det_hii N_generators_bitmask
|
||||||
|
|
||||||
if (s2_eig) then
|
if (h0_type == 'SOP') then
|
||||||
PROVIDE psi_occ_pattern_hii det_to_occ_pattern
|
PROVIDE psi_occ_pattern_hii det_to_occ_pattern
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ subroutine merge_selection_buffers(b1, b2)
|
|||||||
type(selection_buffer), intent(inout) :: b2
|
type(selection_buffer), intent(inout) :: b2
|
||||||
integer(bit_kind), pointer :: detmp(:,:,:)
|
integer(bit_kind), pointer :: detmp(:,:,:)
|
||||||
double precision, pointer :: val(:)
|
double precision, pointer :: val(:)
|
||||||
integer :: i, i1, i2, k, nmwen
|
integer :: i, i1, i2, k, nmwen, sze
|
||||||
if (b1%cur == 0) return
|
if (b1%cur == 0) return
|
||||||
do while (b1%val(b1%cur) > b2%mini)
|
do while (b1%val(b1%cur) > b2%mini)
|
||||||
b1%cur = b1%cur-1
|
b1%cur = b1%cur-1
|
||||||
@ -85,9 +85,10 @@ subroutine merge_selection_buffers(b1, b2)
|
|||||||
nmwen = min(b1%N, b1%cur+b2%cur)
|
nmwen = min(b1%N, b1%cur+b2%cur)
|
||||||
double precision :: rss
|
double precision :: rss
|
||||||
double precision, external :: memory_of_double
|
double precision, external :: memory_of_double
|
||||||
rss = memory_of_double(size(b1%val)) + 2*N_int*memory_of_double(size(b1%det,3))
|
sze = max(size(b1%val), size(b2%val))
|
||||||
|
rss = memory_of_double(sze) + 2*N_int*memory_of_double(sze)
|
||||||
call check_mem(rss,irp_here)
|
call check_mem(rss,irp_here)
|
||||||
allocate( val(size(b1%val)), detmp(N_int, 2, size(b1%det,3)) )
|
allocate(val(sze), detmp(N_int, 2, sze))
|
||||||
i1=1
|
i1=1
|
||||||
i2=1
|
i2=1
|
||||||
do i=1,nmwen
|
do i=1,nmwen
|
||||||
|
@ -281,21 +281,28 @@ subroutine run_slave_main
|
|||||||
print *, 'pt2_stoch_istate', pt2_stoch_istate
|
print *, 'pt2_stoch_istate', pt2_stoch_istate
|
||||||
print *, 'state_average_weight', state_average_weight
|
print *, 'state_average_weight', state_average_weight
|
||||||
print *, 'Number of threads', nproc_target
|
print *, 'Number of threads', nproc_target
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (.true.) then
|
||||||
PROVIDE psi_det_hii
|
PROVIDE psi_det_hii
|
||||||
|
|
||||||
if (s2_eig) then
|
if (h0_type == 'SOP') then
|
||||||
PROVIDE psi_occ_pattern_hii det_to_occ_pattern
|
PROVIDE psi_occ_pattern_hii det_to_occ_pattern
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
PROVIDE global_selection_buffer
|
PROVIDE global_selection_buffer
|
||||||
|
if (mpi_master) then
|
||||||
|
print *, 'Running PT2'
|
||||||
|
endif
|
||||||
!$OMP PARALLEL PRIVATE(i) NUM_THREADS(nproc_target+1)
|
!$OMP PARALLEL PRIVATE(i) NUM_THREADS(nproc_target+1)
|
||||||
i = omp_get_thread_num()
|
i = omp_get_thread_num()
|
||||||
call run_pt2_slave(0,i,pt2_e0_denominator)
|
call run_pt2_slave(0,i,pt2_e0_denominator)
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
endif
|
|
||||||
FREE state_average_weight
|
FREE state_average_weight
|
||||||
print *, mpi_rank, ': PT2 done'
|
print *, mpi_rank, ': PT2 done'
|
||||||
|
print *, '-------'
|
||||||
|
endif
|
||||||
|
|
||||||
IRP_IF MPI
|
IRP_IF MPI
|
||||||
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
|
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
|
||||||
|
@ -22,4 +22,8 @@ doc: The selection process stops at a fixed correlation ratio (useful for gettin
|
|||||||
interface: ezfio,provider,ocaml
|
interface: ezfio,provider,ocaml
|
||||||
default: 1.00
|
default: 1.00
|
||||||
|
|
||||||
|
[h0_type]
|
||||||
|
type: character*(32)
|
||||||
|
doc: Type of denominator in PT2. [EN | SOP | HF]
|
||||||
|
interface: ezfio,provider,ocaml
|
||||||
|
default: EN
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
BEGIN_PROVIDER [ character*32,h0_type ]
|
|
||||||
implicit none
|
|
||||||
BEGIN_DOC
|
|
||||||
! Type of zeroth-order Hamiltonian
|
|
||||||
END_DOC
|
|
||||||
if (s2_eig) then
|
|
||||||
h0_type = 'SOP'
|
|
||||||
else
|
|
||||||
h0_type = 'EN'
|
|
||||||
endif
|
|
||||||
! h0_type = 'HF'
|
|
||||||
END_PROVIDER
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user