10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-03 20:53:54 +01:00

Comments in selection

This commit is contained in:
Anthony Scemama 2019-02-14 23:13:23 +01:00
parent 0aa10ac979
commit 667ad773f9
7 changed files with 49 additions and 6 deletions

12
TODO
View File

@ -57,4 +57,14 @@ Doc: plugins et qp_plugins
Ajouter les symetries dans devel Ajouter les symetries dans devel
Compiler ezfio avec openmp
IMPORTANT:
Davidson Diagonalization
------------------------
Not enough memory: aborting in davidson_diag_hjj_sjj

2
ocaml/.gitignore vendored
View File

@ -9,6 +9,7 @@ Input_ao_two_e_erf_ints.ml
Input_ao_two_e_ints.ml Input_ao_two_e_ints.ml
Input_auto_generated.ml Input_auto_generated.ml
Input_becke_numerical_grid.ml Input_becke_numerical_grid.ml
Input_champ.ml
Input_davidson.ml Input_davidson.ml
Input_density_for_dft.ml Input_density_for_dft.ml
Input_determinants.ml Input_determinants.ml
@ -21,6 +22,7 @@ Input_nuclei.ml
Input_perturbation.ml Input_perturbation.ml
Input_pseudo.ml Input_pseudo.ml
Input_scf_utils.ml Input_scf_utils.ml
Input_variance.ml
qp_create_ezfio qp_create_ezfio
qp_create_ezfio.native qp_create_ezfio.native
qp_edit qp_edit

View File

@ -609,6 +609,12 @@ BEGIN_PROVIDER[ double precision, pt2_u, (N_det_generators)]
BEGIN_PROVIDER[ integer, pt2_J, (N_det_generators)] BEGIN_PROVIDER[ integer, pt2_J, (N_det_generators)]
&BEGIN_PROVIDER[ integer, pt2_R, (N_det_generators)] &BEGIN_PROVIDER[ integer, pt2_R, (N_det_generators)]
implicit none implicit none
BEGIN_DOC
! pt2_J contains the list of generators after ordering them according to the
! Monte Carlo sampling.
!
! pt2_R(i) is the number of combs drawn when determinant i is computed.
END_DOC
integer :: N_c, N_j integer :: N_c, N_j
integer :: U, t, i integer :: U, t, i
double precision :: v double precision :: v

View File

@ -286,7 +286,11 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
end if end if
end do end do
deallocate(indices) deallocate(indices)
! !$OMP CRITICAL
! print *, 'Step1: ', i_generator, preinteresting(0)
! !$OMP END CRITICAL
allocate(banned(mo_num, mo_num,2), bannedOrb(mo_num, 2)) allocate(banned(mo_num, mo_num,2), bannedOrb(mo_num, 2))
allocate (mat(N_states, mo_num, mo_num)) allocate (mat(N_states, mo_num, mo_num))
maskInd = -1 maskInd = -1
@ -485,6 +489,9 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
call spot_isinwf(mask, fullminilist, i_generator, fullinteresting(0), banned, fullMatch, fullinteresting) call spot_isinwf(mask, fullminilist, i_generator, fullinteresting(0), banned, fullMatch, fullinteresting)
if(fullMatch) cycle if(fullMatch) cycle
! !$OMP CRITICAL
! print *, 'Step3: ', i_generator, h1, interesting(0)
! !$OMP END CRITICAL
call splash_pq(mask, sp, minilist, i_generator, interesting(0), bannedOrb, banned, mat, interesting) call splash_pq(mask, sp, minilist, i_generator, interesting(0), bannedOrb, banned, mat, interesting)
@ -623,6 +630,11 @@ end
subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, interesting) subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, interesting)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC
! Computes the contributions A(r,s) by
! comparing the external determinant to all the internal determinants det(i).
! an applying two particles (r,s) to the mask.
END_DOC
integer, intent(in) :: sp, i_gen, N_sel integer, intent(in) :: sp, i_gen, N_sel
integer, intent(in) :: interesting(0:N_sel) integer, intent(in) :: interesting(0:N_sel)
@ -1198,6 +1210,10 @@ end
subroutine spot_isinwf(mask, det, i_gen, N, banned, fullMatch, interesting) subroutine spot_isinwf(mask, det, i_gen, N, banned, fullMatch, interesting)
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC
! Identify the determinants in det which are in the internal space. These are
! the determinants that can be produced by creating two particles on the mask.
END_DOC
integer, intent(in) :: i_gen, N integer, intent(in) :: i_gen, N
integer, intent(in) :: interesting(0:N) integer, intent(in) :: interesting(0:N)
@ -1217,16 +1233,19 @@ subroutine spot_isinwf(mask, det, i_gen, N, banned, fullMatch, interesting)
end do end do
genl : do i=1, N genl : do i=1, N
! If det(i) can't be generated by the mask, cycle
do j=1, N_int do j=1, N_int
if(iand(det(j,1,i), mask(j,1)) /= mask(j, 1)) cycle genl if(iand(det(j,1,i), mask(j,1)) /= mask(j, 1)) cycle genl
if(iand(det(j,2,i), mask(j,2)) /= mask(j, 2)) cycle genl if(iand(det(j,2,i), mask(j,2)) /= mask(j, 2)) cycle genl
end do end do
! If det(i) < det(i_gen), it hs already been considered
if(interesting(i) < i_gen) then if(interesting(i) < i_gen) then
fullMatch = .true. fullMatch = .true.
return return
end if end if
! Identify the particles
do j=1, N_int do j=1, N_int
myMask(j, 1) = iand(det(j, 1, i), negMask(j, 1)) myMask(j, 1) = iand(det(j, 1, i), negMask(j, 1))
myMask(j, 2) = iand(det(j, 2, i), negMask(j, 2)) myMask(j, 2) = iand(det(j, 2, i), negMask(j, 2))

View File

@ -29,7 +29,7 @@ subroutine run_stochastic_cipsi
pt2 = -huge(1.e0) pt2 = -huge(1.e0)
rpt2 = -huge(1.e0) rpt2 = -huge(1.e0)
norm = 0.d0 norm = 0.d0
variance = 0.d0 variance = huge(1.e0)
if (s2_eig) then if (s2_eig) then
call make_s2_eigenfunction call make_s2_eigenfunction

View File

@ -90,7 +90,7 @@ subroutine ZMQ_selection(N_in, pt2, variance, norm)
mem = 8.d0 * N_det * (N_int * 2.d0 * 3.d0 + 3.d0 + 5.d0) / (1024.d0**3) mem = 8.d0 * N_det * (N_int * 2.d0 * 3.d0 + 3.d0 + 5.d0) / (1024.d0**3)
call write_double(6,mem,'Estimated memory/thread (Gb)') call write_double(6,mem,'Estimated memory/thread (Gb)')
if (qp_max_mem > 0) then if (qp_max_mem > 0) then
nproc_target = max(1,int(dble(qp_max_mem)/mem)) nproc_target = max(1,int(dble(qp_max_mem)/(0.1d0 + mem)))
nproc_target = min(nproc_target,nproc) nproc_target = min(nproc_target,nproc)
endif endif

View File

@ -20,9 +20,15 @@ subroutine save_iterations(e_, pt2_,n_)
END_DOC END_DOC
integer, intent(in) :: n_ integer, intent(in) :: n_
double precision, intent(in) :: e_(N_states), pt2_(N_states) double precision, intent(in) :: e_(N_states), pt2_(N_states)
integer :: i
if (N_iter > 100) then if (N_iter == 101) then
return do i=2,N_iter-1
energy_iterations(1:N_states,N_iter-1) = energy_iterations(1:N_states,N_iter)
pt2_iterations(1:N_states,N_iter-1) = pt2_iterations(1:N_states,N_iter)
enddo
N_iter = N_iter-1
TOUCH N_iter
endif endif
energy_iterations(1:N_states,N_iter) = e_(1:N_states) energy_iterations(1:N_states,N_iter) = e_(1:N_states)