9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-25 13:03:28 +01:00

Fixed some bugs and reduced memory.

This commit is contained in:
vijay gopal chilkuri 2021-03-13 15:52:06 +01:00
parent 77949a12a0
commit ecab5c52d7
4 changed files with 37 additions and 48 deletions

View File

@ -47,6 +47,7 @@ use bitmasks
allocate(tableUniqueAlphas(mo_num,mo_num)) allocate(tableUniqueAlphas(mo_num,mo_num))
NalphaIcfg_list = 0
do idxI = 1, N_configuration do idxI = 1, N_configuration
@ -254,7 +255,7 @@ use bitmasks
NalphaIcfg_list(idxI) = NalphaIcfg NalphaIcfg_list(idxI) = NalphaIcfg
endif endif
NalphaIcfg = 0
enddo ! end loop idxI enddo ! end loop idxI
END_PROVIDER END_PROVIDER

View File

@ -783,8 +783,8 @@ subroutine binary_search_cfg(cfgInp,addcfg)
if (j > 1) then if (j > 1) then
bit_tmp = configuration_search_key(psi_configuration(1,1,j-1),N_int) bit_tmp = configuration_search_key(psi_configuration(1,1,j-1),N_int)
do while (j>1 .and. bit_tmp == key) do while (j>1 .and. bit_tmp == key)
j = j-1
bit_tmp = configuration_search_key(psi_configuration(1,1,j-1),N_int) bit_tmp = configuration_search_key(psi_configuration(1,1,j-1),N_int)
j = j-1
enddo enddo
bit_tmp = key bit_tmp = key
endif endif

View File

@ -49,7 +49,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI
Isomo = Ialpha(1,1) Isomo = Ialpha(1,1)
Idomo = Ialpha(1,2) Idomo = Ialpha(1,2)
Nsomo_alpha = POPCNT(Isomo) Nsomo_alpha = POPCNT(Isomo)
end_index = min(N_configuration,cfg_seniority_index(Nsomo_alpha+4)-1) end_index = min(N_configuration,cfg_seniority_index(min(Nsomo_alpha+4,elec_num))-1)
if(end_index .LT. 0) end_index= N_configuration if(end_index .LT. 0) end_index= N_configuration
!end_index = N_configuration !end_index = N_configuration

View File

@ -12,7 +12,7 @@
! required for the calculation of prototype arrays. ! required for the calculation of prototype arrays.
END_DOC END_DOC
NSOMOMax = min(elec_num, cfg_nsomo_max + 2) NSOMOMax = min(elec_num, cfg_nsomo_max + 2)
NSOMOMin = cfg_nsomo_min NSOMOMin = max(0,cfg_nsomo_min-2)
! Note that here we need NSOMOMax + 2 sizes ! Note that here we need NSOMOMax + 2 sizes
NCSFMax = max(1,nint((binom(NSOMOMax,(NSOMOMax+1)/2)-binom(NSOMOMax,((NSOMOMax+1)/2)+1)))) ! TODO: NCSFs for MS=0 NCSFMax = max(1,nint((binom(NSOMOMax,(NSOMOMax+1)/2)-binom(NSOMOMax,((NSOMOMax+1)/2)+1)))) ! TODO: NCSFs for MS=0
NBFMax = NCSFMax NBFMax = NCSFMax
@ -29,13 +29,17 @@
integer ncfgpersomo integer ncfgpersomo
detDimperBF = 0 detDimperBF = 0
MS = elec_alpha_num-elec_beta_num MS = elec_alpha_num-elec_beta_num
!print *,"NSOMOMax=",NSOMOMax, cfg_seniority_index(NSOMOMin) print *,"NSOMOMax=",NSOMOMax, cfg_seniority_index(NSOMOMin)
!print *,"NSOMOMin=",NSOMOMin print *,"NSOMOMin=",NSOMOMin
do i=0,elec_num
print *,i," #cfgs=",cfg_seniority_index(i)
enddo
! number of cfgs = number of dets for 0 somos ! number of cfgs = number of dets for 0 somos
n_CSF = cfg_seniority_index(NSOMOMin)-1 n_CSF = cfg_seniority_index(NSOMOMin)-1
print *,"start=",n_CSF
ncfgprev = cfg_seniority_index(NSOMOMin) ncfgprev = cfg_seniority_index(NSOMOMin)
!do i = 0-iand(MS,1)+2, NSOMOMax,2 !do i = 0-iand(MS,1)+2, NSOMOMax,2
do i = NSOMOMin, NSOMOMax,2 do i = NSOMOMin+2, NSOMOMax,2
if(cfg_seniority_index(i) .EQ. -1)then if(cfg_seniority_index(i) .EQ. -1)then
ncfgpersomo = N_configuration + 1 ncfgpersomo = N_configuration + 1
else else
@ -45,18 +49,18 @@
!detDimperBF = max(1,nint((binom(i,(i+1)/2)))) !detDimperBF = max(1,nint((binom(i,(i+1)/2))))
dimcsfpercfg = max(1,nint((binom(i-2,(i-2+1)/2)-binom(i-2,((i-2+1)/2)+1)))) dimcsfpercfg = max(1,nint((binom(i-2,(i-2+1)/2)-binom(i-2,((i-2+1)/2)+1))))
n_CSF += ncfg * dimcsfpercfg n_CSF += ncfg * dimcsfpercfg
!print *,i,">(",ncfg,ncfgprev,ncfgpersomo,")",",",detDimperBF,">",dimcsfpercfg, " | dimbas= ", n_CSF print *,i,">(",ncfg,ncfgprev,ncfgpersomo,")",",",detDimperBF,">",dimcsfpercfg, " | dimbas= ", n_CSF
!if(cfg_seniority_index(i+2) == -1) EXIT !if(cfg_seniority_index(i+2) == -1) EXIT
!if(detDimperBF > maxDetDimPerBF) maxDetDimPerBF = detDimperBF !if(detDimperBF > maxDetDimPerBF) maxDetDimPerBF = detDimperBF
ncfgprev = cfg_seniority_index(i) ncfgprev = cfg_seniority_index(i)
enddo enddo
if(NSOMOMax .EQ. elec_num)then !if(NSOMOMax .EQ. elec_num)then
ncfgpersomo = N_configuration + 1 ! ncfgpersomo = N_configuration + 1
ncfg = ncfgpersomo - ncfgprev ! ncfg = ncfgpersomo - ncfgprev
dimcsfpercfg = max(1,nint((binom(i-2,(i-2+1)/2)-binom(i-2,((i-2+1)/2)+1)))) ! dimcsfpercfg = max(1,nint((binom(i-2,(i-2+1)/2)-binom(i-2,((i-2+1)/2)+1))))
n_CSF += ncfg * dimcsfpercfg ! n_CSF += ncfg * dimcsfpercfg
!print *,i,">(",ncfg,ncfgprev,ncfgpersomo,")",",",detDimperBF,">",dimcsfpercfg, " | dimbas= ", n_CSF ! print *,i,">>(",ncfg,ncfgprev,ncfgpersomo,")",",",detDimperBF,">",dimcsfpercfg, " | dimbas= ", n_CSF
endif !endif
END_PROVIDER END_PROVIDER
subroutine get_phase_qp_to_cfg(Ialpha, Ibeta, phaseout) subroutine get_phase_qp_to_cfg(Ialpha, Ibeta, phaseout)
@ -246,12 +250,13 @@ end subroutine get_phase_qp_to_cfg
rowsmax = 0 rowsmax = 0
colsmax = 0 colsmax = 0
print *,"NSOMOMax = ",NSOMOMax print *,"NSOMOMax = ",NSOMOMax
print *,"NSOMOMin = ",NSOMOMin
!allocate(AIJpqMatrixDimsList(NSOMOMax,NSOMOMax,4,NSOMOMax,NSOMOMax,2)) !allocate(AIJpqMatrixDimsList(NSOMOMax,NSOMOMax,4,NSOMOMax,NSOMOMax,2))
! Type ! Type
! 1. SOMO -> SOMO ! 1. SOMO -> SOMO
!print *,"Doing SOMO->SOMO" !print *,"Doing SOMO->SOMO"
AIJpqMatrixDimsList(0,1,1,1,1) = 1 AIJpqMatrixDimsList(NSOMOMin,1,1,1,1) = 1
AIJpqMatrixDimsList(0,1,1,1,2) = 1 AIJpqMatrixDimsList(NSOMOMin,1,1,1,2) = 1
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
do j = i-2,i-2, 2 do j = i-2,i-2, 2
@ -296,8 +301,8 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 2. DOMO -> VMO ! 2. DOMO -> VMO
!print *,"Doing DOMO->VMO" !print *,"Doing DOMO->VMO"
AIJpqMatrixDimsList(0,2,1,1,1) = 1 AIJpqMatrixDimsList(NSOMOMin,2,1,1,1) = 1
AIJpqMatrixDimsList(0,2,1,1,2) = 1 AIJpqMatrixDimsList(NSOMOMin,2,1,1,2) = 1
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
tmpsomo = ISHFT(1_8,i+2)-1 tmpsomo = ISHFT(1_8,i+2)-1
@ -348,8 +353,8 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 3. SOMO -> VMO ! 3. SOMO -> VMO
!print *,"Doing SOMO->VMO" !print *,"Doing SOMO->VMO"
AIJpqMatrixDimsList(0,3,1,1,1) = 1 AIJpqMatrixDimsList(NSOMOMin,3,1,1,1) = 1
AIJpqMatrixDimsList(0,3,1,1,2) = 1 AIJpqMatrixDimsList(NSOMOMin,3,1,1,2) = 1
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
do j = i,i, 2 do j = i,i, 2
@ -390,8 +395,8 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 4. DOMO -> SOMO ! 4. DOMO -> SOMO
!print *,"Doing DOMO->SOMO" !print *,"Doing DOMO->SOMO"
AIJpqMatrixDimsList(0,4,1,1,1) = 1 AIJpqMatrixDimsList(NSOMOMin,4,1,1,1) = 1
AIJpqMatrixDimsList(0,4,1,1,2) = 1 AIJpqMatrixDimsList(NSOMOMin,4,1,1,2) = 1
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
do j = i,i, 2 do j = i,i, 2
if(j .GT. NSOMOMax .OR. j .LE. 0) then if(j .GT. NSOMOMax .OR. j .LE. 0) then
@ -430,7 +435,7 @@ end subroutine get_phase_qp_to_cfg
print *,"Rowsmax=",rowsmax," Colsmax=",colsmax print *,"Rowsmax=",rowsmax," Colsmax=",colsmax
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ real*8, AIJpqContainer, (0:NSOMOMax,4,NSOMOMax+1,NSOMOMax+1,NBFMax,NBFMax)] BEGIN_PROVIDER [ real*8, AIJpqContainer, (NSOMOMin:NSOMOMax,4,NSOMOMax+1,NSOMOMax+1,NBFMax,NBFMax)]
use cfunctions use cfunctions
implicit none implicit none
BEGIN_DOC BEGIN_DOC
@ -471,7 +476,7 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 1. SOMO -> SOMO ! 1. SOMO -> SOMO
!print *,"Doing SOMO -> SOMO" !print *,"Doing SOMO -> SOMO"
AIJpqContainer(0,1,1,1,1,1) = 1.0d0 AIJpqContainer(NSOMOMin,1,1,1,1,1) = 1.0d0
do i = NSOMOMin+2, NSOMOMax, 2 do i = NSOMOMin+2, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
do j = i-2,i-2, 2 do j = i-2,i-2, 2
@ -534,7 +539,7 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 2. DOMO -> VMO ! 2. DOMO -> VMO
!print *,"Doing DOMO -> VMO" !print *,"Doing DOMO -> VMO"
AIJpqContainer(0,2,1,1,1,1) = 1.0d0 AIJpqContainer(NSOMOMin,2,1,1,1,1) = 1.0d0
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
tmpsomo = ISHFT(1_8,i+2)-1 tmpsomo = ISHFT(1_8,i+2)-1
@ -601,6 +606,7 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 3. SOMO -> VMO ! 3. SOMO -> VMO
!print *,"Doing SOMO -> VMO" !print *,"Doing SOMO -> VMO"
AIJpqContainer(NSOMOMin,3,1,1,1,1) = 1.0d0
do i = NSOMOMin, NSOMOMax, 2 do i = NSOMOMin, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
do j = i,i, 2 do j = i,i, 2
@ -659,7 +665,7 @@ end subroutine get_phase_qp_to_cfg
! Type ! Type
! 4. DOMO -> SOMO ! 4. DOMO -> SOMO
!print *,"Doing DOMO -> SOMO" !print *,"Doing DOMO -> SOMO"
AIJpqContainer(0,4,1,1,1,1) = 1.0d0 AIJpqContainer(NSOMOMin,4,1,1,1,1) = 1.0d0
do i = NSOMOMin+2, NSOMOMax, 2 do i = NSOMOMin+2, NSOMOMax, 2
Isomo = ISHFT(1_8,i)-1 Isomo = ISHFT(1_8,i)-1
do j = i,i, 2 do j = i,i, 2
@ -1194,29 +1200,11 @@ subroutine calculate_sigma_vector_cfg_nst_naive_store(psi_out, psi_in, n_st, sze
colsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,2) colsikpq = AIJpqMatrixDimsList(NSOMOalpha,extype,pmodel,qmodel,2)
!print *,">j=",j,rowsikpq,colsikpq, ">>",totcolsTKI,",",idxs_connectedI_alpha(j) !print *,">j=",j,rowsikpq,colsikpq, ">>",totcolsTKI,",",idxs_connectedI_alpha(j)
do kk = 1,n_st do kk = 1,n_st
!do m = 1,colsikpq
! do l = 1,rowsTKI
! psi_out(idxs_connectedI_alpha(j)+m-1,kk) += AIJpqContainer(NSOMOalpha,extype,pmodel,qmodel,l,m) * TKIGIJ(l,kk,j)
! enddo
!enddo
allocate(psi_out_tmp(colsikpq))
!allocate(CCmattmp(rowsTKI,colsikpq))
!do m=1,colsikpq
! do l=1,rowsTKI
! CCmattmp(l,m) = AIJpqContainer(NSOMOalpha,extype,pmodel,qmodel,l,m)
! enddo
!enddo
!call dgemv('T',rowsTKI, colsikpq, 1.d0, &
! CCmattmp, size(CCmattmp,1), TKIGIJ(:,kk,j), 1, 0.d0, &
! psi_out_tmp, 1)
call dgemv('T',rowsTKI, colsikpq, 1.d0, &
AIJpqContainer(NSOMOalpha,extype,pmodel,qmodel,1:rowsTKI,1:colsikpq), rowsTKI, TKIGIJ(:,kk,j), 1, 0.d0, &
psi_out_tmp, 1)
do m = 1,colsikpq do m = 1,colsikpq
psi_out(idxs_connectedI_alpha(j)+m-1,kk) += psi_out_tmp(m) do l = 1,rowsTKI
psi_out(idxs_connectedI_alpha(j)+m-1,kk) += AIJpqContainer(NSOMOalpha,extype,pmodel,qmodel,l,m) * TKIGIJ(l,kk,j)
enddo
enddo enddo
deallocate(psi_out_tmp)
!deallocate(CCmattmp)
enddo enddo
totcolsTKI += colsikpq totcolsTKI += colsikpq
enddo enddo