mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-03 20:53:54 +01:00
S>0 runs. Need to check energy.
This commit is contained in:
parent
e27a2f4f18
commit
350067b5b3
@ -32,8 +32,8 @@ void getncsfs1(int *inpnsomo, int *inpms, int *outncsfs){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void getncsfs(int NSOMO, int MS, int *outncsfs){
|
void getncsfs(int NSOMO, int MS, int *outncsfs){
|
||||||
int nparcoupl = (NSOMO + MS)/2;
|
int nparcoupl = (NSOMO + MS)/2; // n_alpha
|
||||||
int nparcouplp1 = ((NSOMO + MS)/2)+1;
|
int nparcouplp1 = ((NSOMO + MS)/2)+1; // n_alpha + 1
|
||||||
double tmpndets=0.0;
|
double tmpndets=0.0;
|
||||||
if(NSOMO == 0){
|
if(NSOMO == 0){
|
||||||
(*outncsfs) = 1;
|
(*outncsfs) = 1;
|
||||||
|
@ -107,7 +107,7 @@ use bitmasks
|
|||||||
if(Nsomo_I .EQ. 0) then
|
if(Nsomo_I .EQ. 0) then
|
||||||
kstart = 1
|
kstart = 1
|
||||||
else
|
else
|
||||||
kstart = cfg_seniority_index(max(0,Nsomo_I-2))
|
kstart = cfg_seniority_index(max(NSOMOMin,Nsomo_I-2))
|
||||||
endif
|
endif
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
|
|
||||||
@ -121,14 +121,14 @@ use bitmasks
|
|||||||
Jsomo = IBCLR(Isomo,p-1)
|
Jsomo = IBCLR(Isomo,p-1)
|
||||||
Jsomo = IBSET(Jsomo,q-1)
|
Jsomo = IBSET(Jsomo,q-1)
|
||||||
Jdomo = Idomo
|
Jdomo = Idomo
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-2)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-2)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else if(holetype(i) .EQ. 1 .AND. vmotype(j) .EQ. 2) then
|
else if(holetype(i) .EQ. 1 .AND. vmotype(j) .EQ. 2) then
|
||||||
! SOMO -> SOMO
|
! SOMO -> SOMO
|
||||||
Jsomo = IBCLR(Isomo,p-1)
|
Jsomo = IBCLR(Isomo,p-1)
|
||||||
Jsomo = IBCLR(Jsomo,q-1)
|
Jsomo = IBCLR(Jsomo,q-1)
|
||||||
Jdomo = IBSET(Idomo,q-1)
|
Jdomo = IBSET(Idomo,q-1)
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-4)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-4)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else if(holetype(i) .EQ. 2 .AND. vmotype(j) .EQ. 1) then
|
else if(holetype(i) .EQ. 2 .AND. vmotype(j) .EQ. 1) then
|
||||||
! DOMO -> VMO
|
! DOMO -> VMO
|
||||||
@ -143,7 +143,7 @@ use bitmasks
|
|||||||
Jsomo = IBCLR(Jsomo,q-1)
|
Jsomo = IBCLR(Jsomo,q-1)
|
||||||
Jdomo = IBCLR(Idomo,p-1)
|
Jdomo = IBCLR(Idomo,p-1)
|
||||||
Jdomo = IBSET(Jdomo,q-1)
|
Jdomo = IBSET(Jdomo,q-1)
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-2)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-2)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else
|
else
|
||||||
print*,"Something went wrong in obtain_associated_alphaI"
|
print*,"Something went wrong in obtain_associated_alphaI"
|
||||||
@ -227,12 +227,14 @@ use bitmasks
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
! SOMO
|
! SOMO
|
||||||
|
!print *,i,j,"|",NalphaIcfg, Jsomo, IOR(Jdomo,ISHFT(1_8,n_core_orb)-1)
|
||||||
|
if(POPCNT(Jsomo) .ge. NSOMOMin) then
|
||||||
NalphaIcfg += 1
|
NalphaIcfg += 1
|
||||||
!print *,i,j,"|",NalphaIcfg
|
|
||||||
alphasIcfg_list(1,1,idxI,NalphaIcfg) = Jsomo
|
alphasIcfg_list(1,1,idxI,NalphaIcfg) = Jsomo
|
||||||
alphasIcfg_list(1,2,idxI,NalphaIcfg) = IOR(Jdomo,ISHFT(1_8,n_core_orb)-1)
|
alphasIcfg_list(1,2,idxI,NalphaIcfg) = IOR(Jdomo,ISHFT(1_8,n_core_orb)-1)
|
||||||
NalphaIcfg_list(idxI) = NalphaIcfg
|
NalphaIcfg_list(idxI) = NalphaIcfg
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
@ -240,7 +242,7 @@ use bitmasks
|
|||||||
ppExistsQ = .False.
|
ppExistsQ = .False.
|
||||||
Isomo = iand(reunion_of_act_virt_bitmask(1,1),Icfg(1,1))
|
Isomo = iand(reunion_of_act_virt_bitmask(1,1),Icfg(1,1))
|
||||||
Idomo = iand(reunion_of_act_virt_bitmask(1,1),Icfg(1,2))
|
Idomo = iand(reunion_of_act_virt_bitmask(1,1),Icfg(1,2))
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-2)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-2)))
|
||||||
do k = kstart, idxI-1
|
do k = kstart, idxI-1
|
||||||
diffSOMO = IEOR(Isomo,iand(act_bitmask(1,1),psi_configuration(1,1,k)))
|
diffSOMO = IEOR(Isomo,iand(act_bitmask(1,1),psi_configuration(1,1,k)))
|
||||||
ndiffSOMO = POPCNT(diffSOMO)
|
ndiffSOMO = POPCNT(diffSOMO)
|
||||||
@ -257,11 +259,13 @@ use bitmasks
|
|||||||
! Diagonal part (pp,qq)
|
! Diagonal part (pp,qq)
|
||||||
if(nholes > 0 .AND. (.NOT. ppExistsQ))then
|
if(nholes > 0 .AND. (.NOT. ppExistsQ))then
|
||||||
! SOMO
|
! SOMO
|
||||||
|
if(POPCNT(Jsomo) .ge. NSOMOMin) then
|
||||||
NalphaIcfg += 1
|
NalphaIcfg += 1
|
||||||
alphasIcfg_list(1,1,idxI,NalphaIcfg) = Icfg(1,1)
|
alphasIcfg_list(1,1,idxI,NalphaIcfg) = Icfg(1,1)
|
||||||
alphasIcfg_list(1,2,idxI,NalphaIcfg) = Icfg(1,2)
|
alphasIcfg_list(1,2,idxI,NalphaIcfg) = Icfg(1,2)
|
||||||
NalphaIcfg_list(idxI) = NalphaIcfg
|
NalphaIcfg_list(idxI) = NalphaIcfg
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
NalphaIcfg = 0
|
NalphaIcfg = 0
|
||||||
enddo ! end loop idxI
|
enddo ! end loop idxI
|
||||||
@ -373,7 +377,7 @@ END_PROVIDER
|
|||||||
if(Nsomo_I .EQ. 0) then
|
if(Nsomo_I .EQ. 0) then
|
||||||
kstart = 1
|
kstart = 1
|
||||||
else
|
else
|
||||||
kstart = cfg_seniority_index(max(0,Nsomo_I-2))
|
kstart = cfg_seniority_index(max(NSOMOMin,Nsomo_I-2))
|
||||||
endif
|
endif
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
!print *,"Isomo"
|
!print *,"Isomo"
|
||||||
@ -398,14 +402,14 @@ END_PROVIDER
|
|||||||
Jsomo = IBCLR(Isomo,p-1)
|
Jsomo = IBCLR(Isomo,p-1)
|
||||||
Jsomo = IBSET(Jsomo,q-1)
|
Jsomo = IBSET(Jsomo,q-1)
|
||||||
Jdomo = Idomo
|
Jdomo = Idomo
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-2)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-2)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else if(holetype(i) .EQ. 1 .AND. vmotype(j) .EQ. 2) then
|
else if(holetype(i) .EQ. 1 .AND. vmotype(j) .EQ. 2) then
|
||||||
! SOMO -> SOMO
|
! SOMO -> SOMO
|
||||||
Jsomo = IBCLR(Isomo,p-1)
|
Jsomo = IBCLR(Isomo,p-1)
|
||||||
Jsomo = IBCLR(Jsomo,q-1)
|
Jsomo = IBCLR(Jsomo,q-1)
|
||||||
Jdomo = IBSET(Idomo,q-1)
|
Jdomo = IBSET(Idomo,q-1)
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-4)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-4)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else if(holetype(i) .EQ. 2 .AND. vmotype(j) .EQ. 1) then
|
else if(holetype(i) .EQ. 2 .AND. vmotype(j) .EQ. 1) then
|
||||||
! DOMO -> VMO
|
! DOMO -> VMO
|
||||||
@ -420,7 +424,7 @@ END_PROVIDER
|
|||||||
Jsomo = IBCLR(Jsomo,q-1)
|
Jsomo = IBCLR(Jsomo,q-1)
|
||||||
Jdomo = IBCLR(Idomo,p-1)
|
Jdomo = IBCLR(Idomo,p-1)
|
||||||
Jdomo = IBSET(Jdomo,q-1)
|
Jdomo = IBSET(Jdomo,q-1)
|
||||||
kstart = max(1,cfg_seniority_index(max(0,Nsomo_I-2)))
|
kstart = max(1,cfg_seniority_index(max(NSOMOMin,Nsomo_I-2)))
|
||||||
kend = idxI-1
|
kend = idxI-1
|
||||||
else
|
else
|
||||||
print*,"Something went wrong in obtain_associated_alphaI"
|
print*,"Something went wrong in obtain_associated_alphaI"
|
||||||
|
@ -73,7 +73,6 @@ subroutine convertWFfromDETtoCSF(N_st,psi_coef_det_in, psi_coef_cfg_out)
|
|||||||
|
|
||||||
! perhaps blocking with CFGs of same seniority
|
! perhaps blocking with CFGs of same seniority
|
||||||
! can be more efficient
|
! can be more efficient
|
||||||
print *,"bfIcfg=",bfIcfg, " ndetI=",ndetI
|
|
||||||
allocate(tempBuffer(bfIcfg,ndetI))
|
allocate(tempBuffer(bfIcfg,ndetI))
|
||||||
tempBuffer = DetToCSFTransformationMatrix(s,:bfIcfg,:ndetI)
|
tempBuffer = DetToCSFTransformationMatrix(s,:bfIcfg,:ndetI)
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ end subroutine get_phase_qp_to_cfg
|
|||||||
! initialization
|
! initialization
|
||||||
psi_coef_config = 0.d0
|
psi_coef_config = 0.d0
|
||||||
DetToCSFTransformationMatrix(0,:,:) = 1.d0
|
DetToCSFTransformationMatrix(0,:,:) = 1.d0
|
||||||
do i = 2-iand(elec_alpha_num-elec_beta_num,1), NSOMOMax,2
|
do i = 2-iand(MS,1), NSOMOMax,2
|
||||||
Isomo = IBSET(0_8, i) - 1_8
|
Isomo = IBSET(0_8, i) - 1_8
|
||||||
! rows = Ncsfs
|
! rows = Ncsfs
|
||||||
! cols = Ndets
|
! cols = Ndets
|
||||||
@ -287,7 +287,9 @@ end subroutine get_phase_qp_to_cfg
|
|||||||
if (psi_configuration(k,1,i) == 0_bit_kind) cycle
|
if (psi_configuration(k,1,i) == 0_bit_kind) cycle
|
||||||
s = s + popcnt(psi_configuration(k,1,i))
|
s = s + popcnt(psi_configuration(k,1,i))
|
||||||
enddo
|
enddo
|
||||||
bfIcfg = max(1,nint((binom(s,(s+1)/2)-binom(s,((s+1)/2)+1))))
|
salpha = (s+MS)/2
|
||||||
|
bfIcfg = max(1,nint((binom(s,salpha)-binom(s,salpha+1))))
|
||||||
|
!bfIcfg = max(1,nint((binom(s,(s+1)/2)-binom(s,((s+1)/2)+1))))
|
||||||
|
|
||||||
! perhaps blocking with CFGs of same seniority
|
! perhaps blocking with CFGs of same seniority
|
||||||
! can be more efficient
|
! can be more efficient
|
||||||
@ -1374,7 +1376,7 @@ subroutine calculate_sigma_vector_cfg_nst_naive_store(psi_out, psi_in, n_st, sze
|
|||||||
integer(omp_lock_kind), allocatable :: lock(:)
|
integer(omp_lock_kind), allocatable :: lock(:)
|
||||||
call omp_set_max_active_levels(1)
|
call omp_set_max_active_levels(1)
|
||||||
|
|
||||||
print *," sze = ",sze
|
!print *," sze = ",sze
|
||||||
allocate(lock(sze))
|
allocate(lock(sze))
|
||||||
do i=1,sze
|
do i=1,sze
|
||||||
call omp_init_lock(lock(i))
|
call omp_init_lock(lock(i))
|
||||||
@ -1383,7 +1385,6 @@ subroutine calculate_sigma_vector_cfg_nst_naive_store(psi_out, psi_in, n_st, sze
|
|||||||
! print *,"i=",i," psi_cfg_data_1=",psi_config_data(i,1)," psi_cfg_data_2=",psi_config_data(i,2)
|
! print *,"i=",i," psi_cfg_data_1=",psi_config_data(i,1)," psi_cfg_data_2=",psi_config_data(i,2)
|
||||||
!end do
|
!end do
|
||||||
|
|
||||||
!print *," sze = ",sze
|
|
||||||
allocate(diag_energies(n_CSF))
|
allocate(diag_energies(n_CSF))
|
||||||
call calculate_preconditioner_cfg(diag_energies)
|
call calculate_preconditioner_cfg(diag_energies)
|
||||||
|
|
||||||
@ -1639,6 +1640,7 @@ subroutine calculate_sigma_vector_cfg_nst_naive_store(psi_out, psi_in, n_st, sze
|
|||||||
totcolsTKI = 0
|
totcolsTKI = 0
|
||||||
rowsTKI = -1
|
rowsTKI = -1
|
||||||
NSOMOalpha = getNSOMO(alphas_Icfg(:,:,k))
|
NSOMOalpha = getNSOMO(alphas_Icfg(:,:,k))
|
||||||
|
!print *,"alphas_Icfg=",alphas_Icfg(1,1,k)
|
||||||
do j = 1,nconnectedI
|
do j = 1,nconnectedI
|
||||||
NSOMOI = getNSOMO(connectedI_alpha(:,:,j))
|
NSOMOI = getNSOMO(connectedI_alpha(:,:,j))
|
||||||
p = excitationIds(1,j)
|
p = excitationIds(1,j)
|
||||||
@ -1648,6 +1650,7 @@ subroutine calculate_sigma_vector_cfg_nst_naive_store(psi_out, psi_in, n_st, sze
|
|||||||
! for E_pp E_rs and E_ppE_rr case
|
! for E_pp E_rs and E_ppE_rr case
|
||||||
rowsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,1)
|
rowsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,1)
|
||||||
colsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,2)
|
colsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,2)
|
||||||
|
!print *,"j=",j," Nsomo=",NSOMOalpha," rowsikpq=",rowsikpq," colsikpq=",colsikpq, " p=",pmodel," q=",qmodel, " extyp=",extype
|
||||||
totcolsTKI += colsikpq
|
totcolsTKI += colsikpq
|
||||||
rowsTKI = rowsikpq
|
rowsTKI = rowsikpq
|
||||||
enddo
|
enddo
|
||||||
|
@ -324,6 +324,7 @@ subroutine davidson_diag_cfg_hjj(dets_in,u_in,H_jj,energies,dim_in,sze,sze_csf,N
|
|||||||
tmpU(kk,ii) = U_csf(ii,shift+kk)
|
tmpU(kk,ii) = U_csf(ii,shift+kk)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
!tmpU(1,1)=1.0d0
|
||||||
call calculate_sigma_vector_cfg_nst_naive_store(tmpW,tmpU,N_st_diag,sze_csf,1,sze_csf,0,1)
|
call calculate_sigma_vector_cfg_nst_naive_store(tmpW,tmpU,N_st_diag,sze_csf,1,sze_csf,0,1)
|
||||||
do kk=1,N_st_diag
|
do kk=1,N_st_diag
|
||||||
do ii=1,sze_csf
|
do ii=1,sze_csf
|
||||||
@ -331,6 +332,16 @@ subroutine davidson_diag_cfg_hjj(dets_in,u_in,H_jj,energies,dim_in,sze,sze_csf,N
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
!U_csf = 0.0d0
|
||||||
|
!U_csf(1,1) = 1.0d0
|
||||||
|
!u_in = 0.0d0
|
||||||
|
!call convertWFfromCSFtoDET(N_st_diag,tmpU,U2)
|
||||||
|
!call H_u_0_nstates_openmp(u_in,U2,N_st_diag,sze)
|
||||||
|
!call convertWFfromDETtoCSF(N_st_diag,u_in(1,1),W_csf2(1,1))
|
||||||
|
!do i=1,sze_csf
|
||||||
|
! print *,"I=",i," qp=",W_csf2(i,1)," my=",W_csf(i,1), " diff=",dabs(W_csf2(i,1))-dabs(W_csf(i,1))
|
||||||
|
!end do
|
||||||
|
!stop
|
||||||
deallocate(tmpW)
|
deallocate(tmpW)
|
||||||
deallocate(tmpU)
|
deallocate(tmpU)
|
||||||
endif
|
endif
|
||||||
|
@ -71,10 +71,8 @@ END_PROVIDER
|
|||||||
|
|
||||||
if (diag_algorithm == "Davidson") then
|
if (diag_algorithm == "Davidson") then
|
||||||
|
|
||||||
!if (do_csf) then
|
if (do_csf) then
|
||||||
if (.true.) then
|
if (sigma_vector_algorithm == 'det') then
|
||||||
!if (sigma_vector_algorithm == 'det') then
|
|
||||||
if (.false.) then
|
|
||||||
call davidson_diag_H_csf(psi_det,CI_eigenvectors, &
|
call davidson_diag_H_csf(psi_det,CI_eigenvectors, &
|
||||||
size(CI_eigenvectors,1),CI_electronic_energy, &
|
size(CI_eigenvectors,1),CI_electronic_energy, &
|
||||||
N_det,N_csf,min(N_det,N_states),min(N_det,N_states_diag),N_int,0,converged)
|
N_det,N_csf,min(N_det,N_states),min(N_det,N_states_diag),N_int,0,converged)
|
||||||
|
Loading…
Reference in New Issue
Block a user