From 30eae477cc32a7f6ead88298fc070b80e1566e27 Mon Sep 17 00:00:00 2001 From: v1j4y Date: Mon, 8 Feb 2021 23:52:49 +0100 Subject: [PATCH 1/3] Fixed bug in prototype construction. #143. --- .../configuration_CI_sigma_helpers.irp.f | 25 +++++++++++++------ .../configuration_CI_sigma_helpers.org | 25 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/determinants/configuration_CI_sigma_helpers.irp.f b/src/determinants/configuration_CI_sigma_helpers.irp.f index 1b87846b..bc4826f8 100644 --- a/src/determinants/configuration_CI_sigma_helpers.irp.f +++ b/src/determinants/configuration_CI_sigma_helpers.irp.f @@ -94,6 +94,14 @@ !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) + !print *,"Nholes=",nholes," Nvmos=",nvmos, " idxi=",idxI + !do i = 1,nholes + ! print *,i,"->",listholes(i) + !enddo + !do i = 1,nvmos + ! print *,i,"->",listvmos(i) + !enddo + ! TODO cfg_seniority_index do i = 1,nholes p = listholes(i) @@ -209,17 +217,17 @@ NalphaIcfg += 1 !print *,p,q,"|",holetype(i),vmotype(j),NalphaIcfg - !call debug_spindet(Jsomo,1) + !call debug_spindet(Idomo,1) !call debug_spindet(Jdomo,1) alphasIcfg(1,1,NalphaIcfg) = Jsomo - alphasIcfg(1,2,NalphaIcfg) = Jdomo + alphasIcfg(1,2,NalphaIcfg) = IOR(Jdomo,ISHFT(1_8,n_core_orb)-1) endif end do end do end subroutine -subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, excitationIds, excitationTypes) +subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI, nconnectedI, excitationIds, excitationTypes) implicit none use bitmasks BEGIN_DOC @@ -240,6 +248,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex integer ,intent(in) :: idxI integer(bit_kind),intent(in) :: Ialpha(N_int,2) integer(bit_kind),intent(out) :: connectedI(N_int,2,*) + integer ,intent(out) :: idxs_connectedI(*) integer,intent(out) :: nconnectedI integer,intent(out) :: excitationIds(2,*) integer,intent(out) :: excitationTypes(*) @@ -265,15 +274,16 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex Jdomo = psi_configuration(1,2,i) !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) - !print *,"-J--i=",i,Jsomo,Isomo - !call debug_spindet(Jsomo,1) - !call debug_spindet(Jdomo,1) + print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration + call debug_spindet(Jsomo,1) + call debug_spindet(Jdomo,1) diffSOMO = IEOR(Isomo,Jsomo) diffDOMO = IEOR(Idomo,Jdomo) ndiffSOMO = POPCNT(diffSOMO) ndiffDOMO = POPCNT(diffDOMO) !if((ndiffSOMO + ndiffDOMO) .EQ. 0) cycle - !print *,"-I--i=",i,Isomo,Jsomo,ndiffSOMO,ndiffDOMO + !print *,"-I--i=",i,diffSOMO,diffDOMO!Isomo,Jsomo,ndiffSOMO,ndiffDOMO + !print *,POPCNT(IEOR(diffSOMO,diffDOMO)), ndiffDOMO if(POPCNT(IEOR(diffSOMO,diffDOMO)) .LE. 1 .AND. ndiffDOMO .LT. 3) then nconnectedI += 1 connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) @@ -322,6 +332,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex end select excitationIds(1,nconnectedI)=p excitationIds(2,nconnectedI)=q + idxs_connectedI(nconnectedI)=i !print *,"------ > output p,q in obt=",p,q endif end do diff --git a/src/determinants/configuration_CI_sigma_helpers.org b/src/determinants/configuration_CI_sigma_helpers.org index f5dbcd4e..133d3eee 100644 --- a/src/determinants/configuration_CI_sigma_helpers.org +++ b/src/determinants/configuration_CI_sigma_helpers.org @@ -112,6 +112,14 @@ the input determinant \(|D_I\rangle\). !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) + !print *,"Nholes=",nholes," Nvmos=",nvmos, " idxi=",idxI + !do i = 1,nholes + ! print *,i,"->",listholes(i) + !enddo + !do i = 1,nvmos + ! print *,i,"->",listvmos(i) + !enddo + ! TODO cfg_seniority_index do i = 1,nholes p = listholes(i) @@ -227,10 +235,10 @@ the input determinant \(|D_I\rangle\). NalphaIcfg += 1 !print *,p,q,"|",holetype(i),vmotype(j),NalphaIcfg - !call debug_spindet(Jsomo,1) + !call debug_spindet(Idomo,1) !call debug_spindet(Jdomo,1) alphasIcfg(1,1,NalphaIcfg) = Jsomo - alphasIcfg(1,2,NalphaIcfg) = Jdomo + alphasIcfg(1,2,NalphaIcfg) = IOR(Jdomo,ISHFT(1_8,n_core_orb)-1) endif end do end do @@ -244,7 +252,7 @@ Next step is to obtain the connected CFGs \(|I\rangle\) that belong to the selec given a RI configuration \(|\alpha\rangle\). #+begin_src f90 :main no :tangle configuration_CI_sigma_helpers.irp.f -subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, excitationIds, excitationTypes) +subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI, nconnectedI, excitationIds, excitationTypes) implicit none use bitmasks BEGIN_DOC @@ -265,6 +273,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex integer ,intent(in) :: idxI integer(bit_kind),intent(in) :: Ialpha(N_int,2) integer(bit_kind),intent(out) :: connectedI(N_int,2,*) + integer ,intent(out) :: idxs_connectedI(*) integer,intent(out) :: nconnectedI integer,intent(out) :: excitationIds(2,*) integer,intent(out) :: excitationTypes(*) @@ -290,15 +299,16 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex Jdomo = psi_configuration(1,2,i) !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) - !print *,"-J--i=",i,Jsomo,Isomo - !call debug_spindet(Jsomo,1) - !call debug_spindet(Jdomo,1) + print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration + call debug_spindet(Jsomo,1) + call debug_spindet(Jdomo,1) diffSOMO = IEOR(Isomo,Jsomo) diffDOMO = IEOR(Idomo,Jdomo) ndiffSOMO = POPCNT(diffSOMO) ndiffDOMO = POPCNT(diffDOMO) !if((ndiffSOMO + ndiffDOMO) .EQ. 0) cycle - !print *,"-I--i=",i,Isomo,Jsomo,ndiffSOMO,ndiffDOMO + !print *,"-I--i=",i,diffSOMO,diffDOMO!Isomo,Jsomo,ndiffSOMO,ndiffDOMO + !print *,POPCNT(IEOR(diffSOMO,diffDOMO)), ndiffDOMO if(POPCNT(IEOR(diffSOMO,diffDOMO)) .LE. 1 .AND. ndiffDOMO .LT. 3) then nconnectedI += 1 connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) @@ -347,6 +357,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, nconnectedI, ex end select excitationIds(1,nconnectedI)=p excitationIds(2,nconnectedI)=q + idxs_connectedI(nconnectedI)=i !print *,"------ > output p,q in obt=",p,q endif end do From 30f099b1d7b2115c21a1dc847e6e0a7ecc3e6ed8 Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Feb 2021 00:35:14 +0100 Subject: [PATCH 2/3] Added psi_config_data for recording csf idxs. #143. --- .../configuration_CI_sigma_helpers.irp.f | 27 +++++++++++-------- .../configuration_CI_sigma_helpers.org | 27 +++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/determinants/configuration_CI_sigma_helpers.irp.f b/src/determinants/configuration_CI_sigma_helpers.irp.f index bc4826f8..a7cfaf2b 100644 --- a/src/determinants/configuration_CI_sigma_helpers.irp.f +++ b/src/determinants/configuration_CI_sigma_helpers.irp.f @@ -261,7 +261,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI integer*8 :: diffDOMO integer :: ndiffSOMO integer :: ndiffDOMO - integer :: i,j,k,l,p,q,nsomoJ,nsomoalpha + integer :: i,j,k,l,p,q,nsomoJ,nsomoalpha,starti,endi,extyp nconnectedI = 0 @@ -285,13 +285,11 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI !print *,"-I--i=",i,diffSOMO,diffDOMO!Isomo,Jsomo,ndiffSOMO,ndiffDOMO !print *,POPCNT(IEOR(diffSOMO,diffDOMO)), ndiffDOMO if(POPCNT(IEOR(diffSOMO,diffDOMO)) .LE. 1 .AND. ndiffDOMO .LT. 3) then - nconnectedI += 1 - connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) select case(ndiffDOMO) case (0) ! SOMO -> VMO !print *,"obt SOMO -> VMO" - excitationTypes(nconnectedI) = 3 + extyp = 3 IJsomo = IEOR(Isomo, Jsomo) p = TRAILZ(AND(Isomo,IJsomo)) + 1 IJsomo = IBCLR(IJsomo,p-1) @@ -305,7 +303,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI if(nsomoJ .GT. nsomoalpha) then ! DOMO -> VMO !print *,"obt DOMO -> VMO" - excitationTypes(nconnectedI) = 2 + extyp = 2 p = TRAILZ(IEOR(Idomo,Jdomo)) + 1 Isomo = IEOR(Isomo, Jsomo) Isomo = IBCLR(Isomo,p-1) @@ -313,7 +311,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI else ! SOMO -> SOMO !print *,"obt SOMO -> SOMO" - excitationTypes(nconnectedI) = 1 + extyp = 1 q = TRAILZ(IEOR(Idomo,Jdomo)) + 1 Isomo = IEOR(Isomo, Jsomo) Isomo = IBCLR(Isomo,q-1) @@ -322,7 +320,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI case (2) ! DOMO -> SOMO !print *,"obt DOMO -> SOMO" - excitationTypes(nconnectedI) = 4 + extyp = 4 IJsomo = IEOR(Isomo, Jsomo) p = TRAILZ(AND(Jsomo,IJsomo)) + 1 IJsomo = IBCLR(IJsomo,p-1) @@ -330,10 +328,17 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI case default print *,"something went wront in get connectedI" end select - excitationIds(1,nconnectedI)=p - excitationIds(2,nconnectedI)=q - idxs_connectedI(nconnectedI)=i - !print *,"------ > output p,q in obt=",p,q + starti = psi_config_data(i,1) + endi = psi_config_data(i,2) +! do k=starti,endi + nconnectedI += 1 + connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) + idxs_connectedI(nconnectedI)=starti + excitationIds(1,nconnectedI)=p + excitationIds(2,nconnectedI)=q + excitationTypes(nconnectedI) = extyp +! enddo + print *,"------ > output p,q in obt=",p,q endif end do diff --git a/src/determinants/configuration_CI_sigma_helpers.org b/src/determinants/configuration_CI_sigma_helpers.org index 133d3eee..180c5e14 100644 --- a/src/determinants/configuration_CI_sigma_helpers.org +++ b/src/determinants/configuration_CI_sigma_helpers.org @@ -286,7 +286,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI integer*8 :: diffDOMO integer :: ndiffSOMO integer :: ndiffDOMO - integer :: i,j,k,l,p,q,nsomoJ,nsomoalpha + integer :: i,j,k,l,p,q,nsomoJ,nsomoalpha,starti,endi,extyp nconnectedI = 0 @@ -310,13 +310,11 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI !print *,"-I--i=",i,diffSOMO,diffDOMO!Isomo,Jsomo,ndiffSOMO,ndiffDOMO !print *,POPCNT(IEOR(diffSOMO,diffDOMO)), ndiffDOMO if(POPCNT(IEOR(diffSOMO,diffDOMO)) .LE. 1 .AND. ndiffDOMO .LT. 3) then - nconnectedI += 1 - connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) select case(ndiffDOMO) case (0) ! SOMO -> VMO !print *,"obt SOMO -> VMO" - excitationTypes(nconnectedI) = 3 + extyp = 3 IJsomo = IEOR(Isomo, Jsomo) p = TRAILZ(AND(Isomo,IJsomo)) + 1 IJsomo = IBCLR(IJsomo,p-1) @@ -330,7 +328,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI if(nsomoJ .GT. nsomoalpha) then ! DOMO -> VMO !print *,"obt DOMO -> VMO" - excitationTypes(nconnectedI) = 2 + extyp = 2 p = TRAILZ(IEOR(Idomo,Jdomo)) + 1 Isomo = IEOR(Isomo, Jsomo) Isomo = IBCLR(Isomo,p-1) @@ -338,7 +336,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI else ! SOMO -> SOMO !print *,"obt SOMO -> SOMO" - excitationTypes(nconnectedI) = 1 + extyp = 1 q = TRAILZ(IEOR(Idomo,Jdomo)) + 1 Isomo = IEOR(Isomo, Jsomo) Isomo = IBCLR(Isomo,q-1) @@ -347,7 +345,7 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI case (2) ! DOMO -> SOMO !print *,"obt DOMO -> SOMO" - excitationTypes(nconnectedI) = 4 + extyp = 4 IJsomo = IEOR(Isomo, Jsomo) p = TRAILZ(AND(Jsomo,IJsomo)) + 1 IJsomo = IBCLR(IJsomo,p-1) @@ -355,10 +353,17 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI case default print *,"something went wront in get connectedI" end select - excitationIds(1,nconnectedI)=p - excitationIds(2,nconnectedI)=q - idxs_connectedI(nconnectedI)=i - !print *,"------ > output p,q in obt=",p,q + starti = psi_config_data(i,1) + endi = psi_config_data(i,2) +! do k=starti,endi + nconnectedI += 1 + connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) + idxs_connectedI(nconnectedI)=starti + excitationIds(1,nconnectedI)=p + excitationIds(2,nconnectedI)=q + excitationTypes(nconnectedI) = extyp +! enddo + print *,"------ > output p,q in obt=",p,q endif end do From 93a4412f0cfdef924c8141d56e9693fa0836a4cd Mon Sep 17 00:00:00 2001 From: v1j4y Date: Tue, 9 Feb 2021 02:31:59 +0100 Subject: [PATCH 3/3] Fixed bug in calculating indices for mono-CFGs. #143. --- .../configuration_CI_sigma_helpers.irp.f | 22 +++++++++---------- .../configuration_CI_sigma_helpers.org | 22 +++++++++---------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/determinants/configuration_CI_sigma_helpers.irp.f b/src/determinants/configuration_CI_sigma_helpers.irp.f index a7cfaf2b..905470ca 100644 --- a/src/determinants/configuration_CI_sigma_helpers.irp.f +++ b/src/determinants/configuration_CI_sigma_helpers.irp.f @@ -274,9 +274,9 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI Jdomo = psi_configuration(1,2,i) !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) - print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration - call debug_spindet(Jsomo,1) - call debug_spindet(Jdomo,1) + !print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration + !call debug_spindet(Jsomo,1) + !call debug_spindet(Jdomo,1) diffSOMO = IEOR(Isomo,Jsomo) diffDOMO = IEOR(Idomo,Jdomo) ndiffSOMO = POPCNT(diffSOMO) @@ -330,15 +330,13 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI end select starti = psi_config_data(i,1) endi = psi_config_data(i,2) -! do k=starti,endi - nconnectedI += 1 - connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) - idxs_connectedI(nconnectedI)=starti - excitationIds(1,nconnectedI)=p - excitationIds(2,nconnectedI)=q - excitationTypes(nconnectedI) = extyp -! enddo - print *,"------ > output p,q in obt=",p,q + nconnectedI += 1 + connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) + idxs_connectedI(nconnectedI)=starti + excitationIds(1,nconnectedI)=p + excitationIds(2,nconnectedI)=q + excitationTypes(nconnectedI) = extyp + !print *,"------ > output p,q in obt=",p,q endif end do diff --git a/src/determinants/configuration_CI_sigma_helpers.org b/src/determinants/configuration_CI_sigma_helpers.org index 180c5e14..fc72077f 100644 --- a/src/determinants/configuration_CI_sigma_helpers.org +++ b/src/determinants/configuration_CI_sigma_helpers.org @@ -299,9 +299,9 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI Jdomo = psi_configuration(1,2,i) !call debug_spindet(Isomo,1) !call debug_spindet(Idomo,1) - print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration - call debug_spindet(Jsomo,1) - call debug_spindet(Jdomo,1) + !print *,"-J--i=",i,Idomo,Jdomo,">",N_configuration + !call debug_spindet(Jsomo,1) + !call debug_spindet(Jdomo,1) diffSOMO = IEOR(Isomo,Jsomo) diffDOMO = IEOR(Idomo,Jdomo) ndiffSOMO = POPCNT(diffSOMO) @@ -355,15 +355,13 @@ subroutine obtain_connected_I_foralpha(idxI, Ialpha, connectedI, idxs_connectedI end select starti = psi_config_data(i,1) endi = psi_config_data(i,2) -! do k=starti,endi - nconnectedI += 1 - connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) - idxs_connectedI(nconnectedI)=starti - excitationIds(1,nconnectedI)=p - excitationIds(2,nconnectedI)=q - excitationTypes(nconnectedI) = extyp -! enddo - print *,"------ > output p,q in obt=",p,q + nconnectedI += 1 + connectedI(:,:,nconnectedI) = psi_configuration(:,:,i) + idxs_connectedI(nconnectedI)=starti + excitationIds(1,nconnectedI)=p + excitationIds(2,nconnectedI)=q + excitationTypes(nconnectedI) = extyp + !print *,"------ > output p,q in obt=",p,q endif end do