From 965ffeb5dc42980646a10607c4ffd655db107c40 Mon Sep 17 00:00:00 2001 From: Marc de Wergifosse <56387143+mdewergi@users.noreply.github.com> Date: Thu, 9 Jan 2025 11:28:38 +0100 Subject: [PATCH] std2 major update 08.01.2024: Version 2.0.0: - interfaced by default to libcint (magnetic moment one-electron integrals still computed with the old integral deck) - XsTDA (restricted and unrestricted[only excited states]) for global hybrids and range-separated hybrids - XsTD-DFT (restricted and unrestricted[only excited states]) for global hybrids and range-separated hybrids - SF-XsTD-DFT for global hybrids - CAM-B3LYP, wB97X-D2, wB97X-D3, wB97MV, SRC2R1, and SRC2R2 RSH functionals natively implemented with XsTD --- 2PA.f90 | 773 +++++++ INFO | 42 +- Makefile | 52 +- README.md | 194 +- apbtrafo.f | 225 +- block.f | 41 +- full.f | 1373 ++++++++++++ g2molden/Makefile | 0 g2molden/main.f | 0 g2molden/stringmod.f90 | 0 g_spec/Makefile | 0 g_spec/g_spec.f | 0 header.f | 16 +- intpack.f90 | 52 +- intslvm.f | 229 +- io.f | 12 +- libcint.f | 904 ++++++++ linal.f | 12 +- linear_response.f | 120 +- main.f | 438 +++- meson.build | 223 +- meson_options.txt | 63 +- molden.f | 43 +- normalize.f | 40 +- onetri.f | 17 +- pckao.f | 31 +- print_nto.f | 98 +- printvec.f | 93 +- prmat.f | 11 +- readbasa.f | 83 +- readbasmold.f | 185 +- readl.f | 13 +- readxtb.f | 51 +- sfstda.f | 22 +- sosor.f | 28 +- srpapack.f | 63 +- stda_manual.pdf => std2_manual.pdf | Bin 378611 -> 386594 bytes stda-rw.f | 231 ++- stda-rw_dual.f | 189 +- stda.f | 198 +- stdacommon.f90 | 19 +- stringmod.f90 | 81 +- subprojects/libcint.wrap | 9 + sutda.f | 357 ++-- tests/compare.py | 135 ++ tests/expected_results/2PA_TEST1.txt | 3 + tests/expected_results/2PA_TEST2.txt | 3 + tests/expected_results/2PA_TEST3.txt | 3 + tests/expected_results/BETA_TEST1.txt | 3 + tests/expected_results/BETA_TEST2.txt | 3 + tests/expected_results/BETA_TEST3.txt | 3 + tests/expected_results/EXCI_TEST1.dat | 17 + tests/expected_results/EXCI_TEST2.dat | 18 + tests/expected_results/EXCI_TEST3.dat | 19 + tests/run_tests.sh | 86 + tests/water_sto3g.molden | 106 + tests/wavelength | 2 + velo.f | 37 +- xstd.f90 | 2769 +++++++++++++++++++++++++ 59 files changed, 8673 insertions(+), 1165 deletions(-) create mode 100755 2PA.f90 create mode 100644 full.f mode change 100644 => 100755 g2molden/Makefile mode change 100644 => 100755 g2molden/main.f mode change 100644 => 100755 g2molden/stringmod.f90 mode change 100644 => 100755 g_spec/Makefile mode change 100644 => 100755 g_spec/g_spec.f create mode 100755 libcint.f rename stda_manual.pdf => std2_manual.pdf (50%) mode change 100755 => 100644 create mode 100644 subprojects/libcint.wrap create mode 100644 tests/compare.py create mode 100644 tests/expected_results/2PA_TEST1.txt create mode 100644 tests/expected_results/2PA_TEST2.txt create mode 100644 tests/expected_results/2PA_TEST3.txt create mode 100644 tests/expected_results/BETA_TEST1.txt create mode 100644 tests/expected_results/BETA_TEST2.txt create mode 100644 tests/expected_results/BETA_TEST3.txt create mode 100644 tests/expected_results/EXCI_TEST1.dat create mode 100644 tests/expected_results/EXCI_TEST2.dat create mode 100644 tests/expected_results/EXCI_TEST3.dat create mode 100755 tests/run_tests.sh create mode 100644 tests/water_sto3g.molden create mode 100644 tests/wavelength create mode 100644 xstd.f90 diff --git a/2PA.f90 b/2PA.f90 new file mode 100755 index 0000000..91868d8 --- /dev/null +++ b/2PA.f90 @@ -0,0 +1,773 @@ +! This file is part of std2. +! +! Copyright (C) 2025 Marc de Wergifosse +! +! std2 is free software: you can redistribute it and/or modify it under +! the terms of the GNU Lesser General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! std2 is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ +SUBROUTINE lresp_2PA_full(nci,apb,amb,iconf,maxconf,xl,yl,zl,moci,no,nv,eci,Xci,Yci,nroot,& +&ncent,dax,nao,clow) +use commonresp +use omp_lib +IMPLICIT NONE + +integer ::i,j,k,ii,jj,kk,ij,jk,ab,io,iv,idum1,idum2,nci +integer ::io1,io2,iv1,iv2,iwrk,jwrk,nroot,ncent,nao +integer ::maxconf,moci,no,nv,ino,nno,inv,nnv +integer ::iconf(maxconf,2) +integer, allocatable :: A_list(:,:) +integer ::counter_A +integer, allocatable :: B_list(:,:) +integer ::counter_B +integer*8 ::lin8 +real*8 :: dax,clow(nao*moci) + +real*8 ::xl(moci*(moci+1)/2) +real*8 ::yl(moci*(moci+1)/2) +real*8 ::zl(moci*(moci+1)/2) + +real*4 ::mu_x(nci) +real*4 ::mu_y(nci) +real*4 ::mu_z(nci) +real*4 ::XpY_int(nci,3) +real*4 ::XpYci(nci) + +real*8 ::mu(moci*(moci+1)/2,3) +real*4 ::omega +real*4 ::Xci(nci,nroot), Yci(nci,nroot),eci(nci) +real*4 ::apb(nci*(nci+1)/2) +real*4 ::amb(nci*(nci+1)/2) +real*4, allocatable ::inv_amb(:) +real*4, allocatable ::inv_resp(:) +real*8, allocatable ::XpY(:,:) +real*8, allocatable ::XmY(:,:) +real*8, allocatable ::X(:,:) +real*8, allocatable ::Y(:,:) +character*1 ::uplo +integer ::info +integer, allocatable ::ipiv(:) +real*4, allocatable ::work (:) + +integer ::ix,iy,iz +real*8 ::sigma(3,3),A,B,sigma_f,sigma_g,sigma_h + +real*8 ::alpha_xx,alpha_xy,alpha_xz +real*8 ::alpha_yy,alpha_yz +real*8 ::alpha_zz + + +real*4 ::start_time,end_time,sdot + +real*4,allocatable :: f_ijka(:,:),f_abic(:,:),F_ij(:,:),F_ab(:,:) + +open(unit=60,file='2PA-abs',status='replace') + +mu=0.0 +mu(:,1)=xl(:) +mu(:,2)=yl(:) +mu(:,3)=zl(:) + +write(*,*) +write(*,*)'======================================================================' +write(*,*)' Welcome in nonlinear response sTD-DFT program' +write(*,*)'======================================================================' +write(*,*) + +allocate(inv_amb(nci*(nci+1)/2)) +inv_amb=amb +uplo='U' +allocate(ipiv(1:nci),work(1:nci)) +call ssptrf(uplo,nci,inv_amb,ipiv,info) +call ssptri(uplo,nci,inv_amb,ipiv,work,info) +deallocate(ipiv,work) + +allocate( XpY(nci,3)) +allocate( XmY(nci,3)) +allocate( X(nci,3),Y(nci,3)) + +! the dipole moment matrix mu_ai +mu_x=0.0 +mu_y=0.0 +mu_z=0.0 +!$omp parallel private(j,io,iv,idum1,idum2,ij) +!$omp do + Do j=1, nci + io=iconf(j,1) + iv=iconf(j,2) + idum1=max(io,iv) + idum2=min(io,iv) + ij=idum2+idum1*(idum1-1)/2 + mu_x(j)=-xl(ij) + mu_y(j)=-yl(ij) + mu_z(j)=-zl(ij) + enddo +!$omp end do +!$omp end parallel + +! Generating Hartree XC kernel + +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +allocate(f_ijka(ino*(ino+1)/2:nno*(nno+1)/2,nci),f_abic(inv*(inv+1)/2:nnv*(nnv+1)/2,nci)) +call HXC(nci,ncent,no,nv,maxconf,iconf,dax,nao,moci,clow,f_ijka,f_abic,ino,nno,inv,nnv) + +allocate(F_ij(ino*(ino+1)/2:nno*(nno+1)/2,4),F_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,4)) + +Do ii=1, num_trans + +XpY(:,:)=0.0 +XmY(:,:)=0.0 +X(:,:)=0.0 +Y(:,:)=0.0 +omega=-eci(ii)/2.0 +call cpu_time(start_time) +allocate(inv_resp(nci*(nci+1)/2)) +inv_resp=apb-omega**2.0*inv_amb + + +uplo='U' +XpY_int(:,1)=mu_x(:) +XpY_int(:,2)=mu_y(:) +XpY_int(:,3)=mu_z(:) +allocate(ipiv(1:nci)) +call ssptrf(uplo,nci,inv_resp,ipiv,info) +call ssptrs(uplo,nci,3,inv_resp,ipiv,XpY_int,nci,info) +deallocate(ipiv) + +XpY(:,1)=dble(XpY_int(:,1)) +XpY(:,2)=dble(XpY_int(:,2)) +XpY(:,3)=dble(XpY_int(:,3)) + + write(*,*) + write(*,*)ii + write(*,*) + +! extract X and Y from XpY +! (X-Y)=omega*(A-B)^-1 (X+Y) +! X=((X+Y)+(X-Y))/2 +! Y=(X+Y)-X +!$omp parallel private(i,j,ij,ix) reduction (+:XmY) +!$omp do + Do i=1,nci + Do j=1,nci + ij=lin8(i,j) + Do ix=1,3 + XmY(i,ix)=XmY(i,ix)+ dble(omega)*dble(inv_amb(ij))*XpY(j,ix) + enddo + enddo + enddo +!$omp end do +!$omp end parallel +!$omp parallel private(ix,j) reduction(+:X,Y) +!$omp do + Do ix=1,3 + Do j=1,nci + X(j,ix)=(XpY(j,ix)+XmY(j,ix))/2.0 + Y(j,ix)=XpY(j,ix)-X(j,ix) + enddo + enddo +!$omp end do +!$omp end parallel + +deallocate(inv_resp) + +call cpu_time(end_time) +print '("alpha Time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + +XpYci(:)=Xci(:,ii)+Yci(:,ii) +!$omp parallel private(i,j,ix) +!$omp do +Do i=ino,nno +Do j=ino,i +Do ix=1,3 +F_ij(lin8(i,j),ix)=sdot(nci,f_ijka(lin8(i,j),:),1,XpY_int(:,ix),1) +enddo +F_ij(lin8(i,j),4)=sdot(nci,f_ijka(lin8(i,j),:),1,XpYci(:),1) +enddo +enddo +!$omp end do +!$omp end parallel +!$omp parallel private(i,j,ix) +!$omp do +Do i=inv,nnv +Do j=inv,i +Do ix=1,3 +F_ab(lin8(i,j),ix)=sdot(nci,f_abic(lin8(i,j),:),1,XpY_int(:,ix),1) +enddo +F_ab(lin8(i,j),4)=sdot(nci,f_abic(lin8(i,j),:),1,XpYci(:),1) +enddo +enddo +!$omp end do +!$omp end parallel +write(*,*)'F_ij and F_ab computed' + +if(ii==1)then +! +! Genarating a list of indexes used in A and B formula to save a great bunch of time +! +call cpu_time(start_time) +counter_A=0 +!$omp parallel private(j,i,kk) reduction(+:counter_A) +!$omp do + Do i=1,nci + Do j=1,no + Do kk=1,nci + if(iconf(kk,1)==j .and. iconf(kk,2)==iconf(i,2))then + counter_A=counter_A+1 + endif + enddo + enddo + enddo +!$omp end do +!$omp end parallel + allocate(A_list(1:counter_A,1:3)) + A_list=-9999 + call List_A(maxconf,no,nci,iconf,A_list,counter_A) + !Do i=1,counter_A + !write(*,*)i,A_list(i,1:3) + !enddo + + counter_B=0 +!$omp parallel private(j,i,kk) reduction(+:counter_B) +!$omp do + Do i=1,nci + Do j=1,nv + Do kk=1,nci + if(iconf(kk,1)==iconf(i,1) .and. iconf(kk,2)==j+no)then + counter_B=counter_B+1 + endif + enddo + enddo + enddo +!$omp end do +!$omp end parallel +allocate(B_list(1:counter_B,1:3)) +B_list=-9999 +call List_B(maxconf,no,nv,nci,iconf,B_list,counter_B) +!Do i=1,counter_B +!write(*,*)i,B_list(i,1:3) +!enddo +call cpu_time(end_time) +print '("A & B indexes list Time = ",f12.2," minutes.")',(end_time-start_time)/60.0 +endif + +! sigma sigma = -A + B +call cpu_time(start_time) +! +! Fast version +! +sigma(:,:)=0.0 +Do ix=1,3 +Do iy=1,ix +call TPA_resp_fast_full(ix,iy,X,Y,Xci,Yci,nroot,A_list,B_list,counter_A,counter_B,mu,& +&maxconf,no,nv,nci,moci,ii,iconf,A,B,ino,nno,inv,nnv,F_ij,F_ab) +sigma(ix,iy)=(-A+B)/2.0d0 +if(ix/=iy)then +sigma(iy,ix)=sigma(ix,iy) +endif +enddo +enddo + +sigma_f=0.0 +sigma_g=0.0 +sigma_h=0.0 +Do ix=1,3 +Do iy=1,3 +sigma_f=sigma_f+sigma(ix,ix)*sigma(iy,iy) +sigma_g=sigma_g+sigma(ix,iy)*sigma(ix,iy) +sigma_h=sigma_h+sigma(ix,iy)*sigma(iy,ix) +enddo +enddo +sigma_f=sigma_f/30.0 +sigma_g=sigma_g/30.0 +sigma_h=sigma_h/30.0 + + + +call cpu_time(end_time) +print '("2PA Time = ",f12.2," minutes.")',(end_time-start_time)/60.0 +write(*,*) +write(*,3333)'Delta (',eci(ii)*27.21139,')' +write(*,*) +write(*,1111)'x','y','z' +write(*,2222)'x',sigma(1,1),sigma(1,2),sigma(1,3) +write(*,2222)'y',sigma(2,1),sigma(2,2),sigma(2,3) +write(*,2222)'z',sigma(3,1),sigma(3,2),sigma(3,3) +write(*,*) +write(*,5555)'F =',sigma_f,' G =',sigma_G,' H =',sigma_H +write(*,4444)'Delta_2PA_// =',2.0*sigma_f+2.0*sigma_g+2.0*sigma_h +write(*,4444)'Delta_2PA__|_ =',-1.0*sigma_f+4.0*sigma_g-1.0*sigma_h +write(*,4444)'Delta_2PA_circ =',-2.0*sigma_f+3.0*sigma_g+3.0*sigma_h +write(*,4444)'rho = //*(_|_)**-1 =',(2.0*sigma_f+2.0*sigma_g+2.0*sigma_h)/& +&(-1.0*sigma_f+4.0*sigma_g-1.0*sigma_h) +write(60,6666)ii,eci(ii)*27.21139,2.0*sigma_f+2.0*sigma_g+2.0*sigma_h,& +&-1.0*sigma_f+4.0*sigma_g-1.0*sigma_h,-2.0*sigma_f& +&+3.0*sigma_g+3.0*sigma_h,(2.0*sigma_f+2.0*sigma_g& +&+2.0*sigma_h)/(-1.0*sigma_f+4.0*sigma_g-1.0*sigma_h) +enddo +close(60) +deallocate(XpY) +deallocate(XmY) +deallocate(X,Y) +deallocate(inv_amb) +write(*,*) +write(*,*)'======================================================================' +write(*,*)' end of nonlinear response sTD-DFT program' +write(*,*)'======================================================================' +write(*,*) +111 format(A15,F20.6) +1111 format(A22,2A20) +2222 format(A2,3F20.6) +3334 format(A16,F7.3,A1,F7.3,A1) +3333 format(A16,F7.3,A1) +4444 format(A20,F20.3) +5555 format(A3,F20.3,A4,F20.3,A4,F20.3) +6666 format(I3,F7.3,4F20.3) +end subroutine lresp_2PA_full + + + + + +subroutine HXC(nci,ncent,no,nv,mxcnf,iconf,dax,nao,moci,clow,f_ijka,f_abic,ino,nno,inv,nnv) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: dax +real*4, intent(out) :: f_ijka(ino*(ino+1)/2:nno*(nno+1)/2,nci),f_abic(inv*(inv+1)/2:nnv*(nnv+1)/2,nci) +integer i,j,ij,io,iv,ko,kv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ax + +real*8 :: wtime +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),AABB_integral(:,:) + +real*4 :: value1,value2,value3,rabx +Write(*,*)'Compute f_HXC once' +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals computed' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao),Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + + +deallocate(AABB_integral) + + +write(*,*)"Intemediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ax=real(dax) +! calculate f_ijka and f_abic +f_ijka=0.0e0 +f_abic=0.0e0 +!$omp parallel private(i,j,k,ko,kv,ek,ej) +!$omp do +Do i=ino,nno +Do j=ino,i +Do k=1,nci +ko=iconf(k,1) +kv=iconf(k,2) +ej=sdot(nao,Q_ij(lin(i,j),:),1,P_ia(ko,kv,:),1) +ek=-ax*sdot(nao,Q_ij(lin(i,ko),:),1,P_ia(j,kv,:),1) +f_ijka(lin(i,j),k)=ej+ek +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,j,k,ko,kv,ek,ej) +!$omp do +Do i=inv,nnv +Do j=inv,i +Do k=1,nci +ko=iconf(k,1) +kv=iconf(k,2) +ej=sdot(nao,Q_ab(lin(i,j),:),1,P_ia(ko,kv,:),1) +ek=-ax*sdot(nao,Q_ab(lin(j,kv),:),1,P_ia(ko,i,:),1) +f_abic(lin(i,j),k)=ej+ek +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,Q_ij,Q_ab) +write(*,*)'f_HXC computed' + +return + +end subroutine HXC + +SUBROUTINE TPA_resp_fast_full(ix,iy,X,Y,Xci,Yci,nroot,A_list,B_list,counter_A,counter_B,mu,maxconf,no,nv,nci,moci,ii,& +&iconf,A,B,ino,nno,inv,nnv,F_ij,F_ab) +use commonresp +use omp_lib +implicit none + +integer ::xx,yy,nroot +integer ::ix,iy,no,nv,nci,ii,maxconf,moci +integer ::iconf(maxconf,2) +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*8 ::A,B +real*8 ::A1,A2,A3,A4,A5,A6 +real*8 ::B1,B2,B3,B4,B5,B6 +integer ::counter_A,counter_B +integer :: A_list(1:counter_A,1:3) +integer :: B_list(1:counter_B,1:3) + +integer :: ino,nno,inv,nnv +real*4 :: F_ij(ino*(ino+1)/2:nno*(nno+1)/2,4),F_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,4) + +A=0.0d0 +B=0.0d0 +A1=0.0d0 +A2=0.0d0 +A3=0.0d0 +A4=0.0d0 +A5=0.0d0 +A6=0.0d0 +B1=0.0d0 +B2=0.0d0 +B3=0.0d0 +B4=0.0d0 +B5=0.0d0 +B6=0.0d0 + +! A1 ix iy n + xx=ix + yy=iy +call A_2PA_1_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A1,F_ij,ino,nno,iconf,maxconf) +! A2 iy ix n + xx=iy + yy=ix +call A_2PA_1_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A2,F_ij,ino,nno,iconf,maxconf) +! A3 n ix iy + xx=ix + yy=iy +call A_2PA_2_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A3,F_ij,ino,nno,iconf,maxconf) +! A4 n iy ix + xx=iy + yy=ix +call A_2PA_2_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A4,F_ij,ino,nno,iconf,maxconf) +! A5 ix n iy + xx=ix + yy=iy +call A_2PA_3_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A5,F_ij,ino,nno,iconf,maxconf) +! A6 iy n ix + xx=iy + yy=ix +call A_2PA_3_fast_full(xx,yy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ii,A6,F_ij,ino,nno,iconf,maxconf) + A=A1+A2+A3+A4+A5+A6 + +! B1 ix iy n + xx=ix + yy=iy +call B_2PA_1_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B1,F_ab,inv,nnv,iconf,maxconf) +! B2 iy ix n + xx=iy + yy=ix +call B_2PA_1_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B2,F_ab,inv,nnv,iconf,maxconf) +! B3 n ix iy + xx=ix + yy=iy +call B_2PA_2_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B3,F_ab,inv,nnv,iconf,maxconf) +! B4 n iy ix + xx=iy + yy=ix +call B_2PA_2_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B4,F_ab,inv,nnv,iconf,maxconf) +! B5 ix n iy + xx=ix + yy=iy +call B_2PA_3_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B5,F_ab,inv,nnv,iconf,maxconf) +! B6 iy n ix + xx=iy + yy=ix +call B_2PA_3_fast_full(xx,yy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ii,B6,F_ab,inv,nnv,iconf,maxconf) + B=B1+B2+B3+B4+B5+B6 + +end subroutine TPA_resp_fast_full + +Subroutine A_2PA_1_fast_full(ix,iy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ifreq,A,F_ij,ino,nno,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,ino,nno,maxconf +integer ::nroot +real*8 ::A +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ij(ino*(ino+1)/2:nno*(nno+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_A +integer ::A_list(1:counter_A,1:3) + +ii=ifreq +A=0.0 +!$omp parallel private(i) reduction(+:A) +!$omp do + Do i=1,counter_A + A=A+X(A_list(i,1),ix)*(-mu(A_list(i,2),iy)& + &+dble(F_ij(lin8(iconf(A_list(i,1),1),iconf(A_list(i,3),1)),iy))& + &)*dble(Yci(A_list(i,3),ii)) + enddo +!$omp end do +!$omp end parallel +end subroutine A_2PA_1_fast_full + +Subroutine A_2PA_2_fast_full(ix,iy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ifreq,A,F_ij,ino,nno,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,ino,nno,maxconf +integer ::nroot +real*8 ::A +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ij(ino*(ino+1)/2:nno*(nno+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_A +integer ::A_list(1:counter_A,1:3) + +ii=ifreq +A=0.0 +!$omp parallel private(i) reduction(+:A) +!$omp do + Do i=1,counter_A + A=A+dble(Xci(A_list(i,1),ii))*(-mu(A_list(i,2),ix)& + &+dble(F_ij(lin8(iconf(A_list(i,1),1),iconf(A_list(i,3),1)),ix))& + &)*Y(A_list(i,3),iy) + enddo +!$omp end do +!$omp end parallel +end subroutine A_2PA_2_fast_full + +Subroutine A_2PA_3_fast_full(ix,iy,X,Y,Xci,Yci,nroot,A_list,counter_A,mu,nci,moci,ifreq,A,F_ij,ino,nno,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,ino,nno,maxconf +integer ::nroot +real*8 ::A +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ij(ino*(ino+1)/2:nno*(nno+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_A +integer ::A_list(1:counter_A,1:3) + +ii=ifreq +A=0.0 +!$omp parallel private(i) reduction(+:A) +!$omp do + Do i=1,counter_A + A=A+X(A_list(i,1),ix)*(& + &dble(F_ij(lin8(iconf(A_list(i,1),1),iconf(A_list(i,3),1)),4))& + &)*dble(Y(A_list(i,3),iy)) + enddo +!$omp end do +!$omp end parallel +end subroutine A_2PA_3_fast_full + +Subroutine B_2PA_1_fast_full(ix,iy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ifreq,B,F_ab,inv,nnv,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,inv,nnv,maxconf +integer ::nroot +real*8 ::B +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_B +integer ::B_list(1:counter_B,1:3) + +ii=ifreq +B=0.0 +!$omp parallel private(i) reduction(+:B) +!$omp do + Do i=1,counter_B + B=B+X(B_list(i,1),ix)*(-mu(B_list(i,2),iy)& + &+dble(F_ab(lin8(iconf(B_list(i,1),2),iconf(B_list(i,3),2)),iy))& + &)*dble(Yci(B_list(i,3),ii)) + enddo +!$omp end do +!$omp end parallel +end subroutine B_2PA_1_fast_full + +Subroutine B_2PA_2_fast_full(ix,iy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ifreq,B,F_ab,inv,nnv,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,inv,nnv,maxconf +integer ::nroot +real*8 ::B +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_B +integer ::B_list(1:counter_B,1:3) + +ii=ifreq +B=0.0 +!$omp parallel private(i) reduction(+:B) +!$omp do + Do i=1,counter_B + B=B+dble(Xci(B_list(i,1),ii))*(-mu(B_list(i,2),ix)& + &+dble(F_ab(lin8(iconf(B_list(i,1),2),iconf(B_list(i,3),2)),ix))& + &)*Y(B_list(i,3),iy) + enddo +!$omp end do +!$omp end parallel +end subroutine B_2PA_2_fast_full + +Subroutine B_2PA_3_fast_full(ix,iy,X,Y,Xci,Yci,nroot,B_list,counter_B,mu,nci,moci,ifreq,B,F_ab,inv,nnv,iconf,maxconf) +use commonresp +use omp_lib +implicit none + +integer ::ix,iy,nci,ifreq,moci,inv,nnv,maxconf +integer ::nroot +real*8 ::B +real*8 ::mu(moci*(moci+1)/2,3) +real*8 ::X(nci,3) +real*8 ::Y(nci,3) +real*4 ::Xci(nci,nroot), Yci(nci,nroot) +real*4 :: F_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,4) +integer ::i,ii +integer*8 :: lin8 +integer ::iconf(maxconf,2) +integer ::counter_B +integer ::B_list(1:counter_B,1:3) + +ii=ifreq +B=0.0 +!$omp parallel private(i) reduction(+:B) +!$omp do + Do i=1,counter_B + B=B+X(B_list(i,1),ix)*(& + &+dble(F_ab(lin8(iconf(B_list(i,1),2),iconf(B_list(i,3),2)),4))& + &)*dble(Y(B_list(i,3),iy)) + enddo +!$omp end do +!$omp end parallel +end subroutine B_2PA_3_fast_full diff --git a/INFO b/INFO index 6ebf6c1..6cdf21d 100755 --- a/INFO +++ b/INFO @@ -5,27 +5,53 @@ 26.08.2014: Version 1.3: - -Interfacing with Gaussian 09 possible (via g2molden) + -Interfacing with Gaussian 09 possible (via g2molden) 29.10.2014: Version 1.4: -sTDA program is now interfaced to TeraChem -Eigenvectors may be printed (Turbomole format) - -small bugfixes + -small bugfixes -01.03.2016: Version 1.5: +01.03.2016: Version 1.5: - -xTB - -velocity correction + -xTB + -velocity correction -make UKS available to public - + 13.02.2018: Version 1.6: - linear and nonlinear response function (SHG) - two-photon absorption - + 26.11.2019: Version 1.6.1: - + - state to state transitions - SF-sTD-DFT - NTOs + +10.09.2020: Version 1.6.2: + + - evaluation of the molecular optical rotation + - for spin-flip states + - speed-up for the response function deck + +10.10.2022: Version 1.6.3: + + - evaluation of the two-photon cross-sections (now fully working) + - RespA approach for the interpretation of molecular response properties + - dual-threshold method for the efficient treatment of large systems + - polarizability bug fixed + +12.09.2023: Version 1.6.3.3: + + - Sources corrected for NTOs with dual threshold + - Sign error in the response part of the calculation of 2PA strengths is corrected + +08.01.2024: Version 2.0.0: + + - interfaced by default to libcint (magnetic moment one-electron integrals still computed with the old integral deck) + - XsTDA (restricted and unrestricted[only excited states]) for global hybrids and range-separated hybrids + - XsTD-DFT (restricted and unrestricted[only excited states]) for global hybrids and range-separated hybrids + - SF-XsTD-DFT for global hybrids + - CAM-B3LYP, wB97X-D2, wB97X-D3, wB97MV, SRC2R1, and SRC2R2 RSH functionals natively implemented with XsTD diff --git a/Makefile b/Makefile index 075305f..b91ce42 100755 --- a/Makefile +++ b/Makefile @@ -1,47 +1,45 @@ - -PROG = stda - +PROG = std2 OSTYPE=LINUXI -#-------------------------------------------------------------------------- -#------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +# see https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html details on these options ifeq ($(OSTYPE),LINUXI) - FC = ifort - # FC = lfc - CC = gcc - - ### multithread ### - LINKER = ifort -static -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include - LIBS = $(MKLROOT)/lib/intel64/libmkl_blas95_lp64.a $(MKLROOT)/lib/intel64/libmkl_lapack95_lp64.a -Wl,--start-group $(MKLROOT)/lib/intel64/libmkl_intel_lp64.a $(MKLROOT)/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm - - ### sequential ### - # LINKER = ifort -static - # LIBS = ${MKLROOT}/lib/intel64/libmkl_blas95_lp64.a ${MKLROOT}/lib/intel64/libmkl_lapack95_lp64.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a $(MKLROOT)/lib/intel64/libmkl_sequential.a -Wl,--end-group -lpthread -lm - + FC = ifx + CC = icx + + ifdef USEILP64 + LINKER = ifx -Bdynamic $(CURDIR)/libcint/build/libcint.so -Bstatic + LIBS = -Wl,--start-group ${MKLROOT}/lib/libmkl_intel_ilp64.a ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -Wl,--end-group -liomp5 + FFLAGS = -O3 -qopenmp -I$(MKLROOT)/include/intel64/ilp64 -I$(MKLROOT)/include -i8 + else + LINKER = ifx -Bdynamic $(CURDIR)/libcint/build/libcint.so -Bstatic + LIBS = -Wl,--start-group ${MKLROOT}/lib/libmkl_intel_lp64.a ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -Wl,--end-group -liomp5 + FFLAGS = -O3 -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include + endif + CFLAGS = -O -DLINUX - FFLAGS = -O3 -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include endif ifeq ($(OSTYPE),MACOS) - FC = ifort - CC = gcc - LINKER = ifort -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include - LIBS = ${MKLROOT}/lib/libmkl_blas95_lp64.a ${MKLROOT}/lib/libmkl_intel_lp64.a ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -liomp5 -lpthread -lm -ldl + FC = ifx + CC = gcc + LINKER = ifx -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include + LIBS = ${MKLROOT}/lib/libmkl_blas95_lp64.a ${MKLROOT}/lib/libmkl_intel_lp64.a ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -liomp5 -lpthread -ldl -lm PREFLAG = -E -P FFLAGS = -O3 -qopenmp -I$(MKLROOT)/include/intel64/lp64 -I$(MKLROOT)/include #-check all - FFLAGS = -O3 -I${MKLROOT}/include/intel64/lp64 -I${MKLROOT}/include + FFLAGS = -O3 -I${MKLROOT}/include/intel64/lp64 -I${MKLROOT}/include CCFLAGS = -O3 -DLINUX endif ################################################# OBJS=\ stdacommon.o stringmod.o main.o pckao.o \ - header.o intpack.o velo.o \ + header.o intpack.o velo.o libcint.o \ onetri.o prmat.o readl.o block.o\ stda.o stda-rw.o stda-rw_dual.o sutda.o sfstda.o srpapack.o intslvm.o io.o\ - linal.o readbasa.o readbasmold.o printvec.o normalize.o\ - apbtrafo.o sosor.o readxtb.o linear_response.o molden.o print_nto.o + linal.o readbasa.o readbasmold.o printvec.o normalize.o 2PA.o\ + apbtrafo.o sosor.o readxtb.o linear_response.o molden.o print_nto.o xstd.o full.o ################################################# %.o: %.f90 @@ -51,7 +49,7 @@ OBJS=\ @echo "making $@ from $<" $(FC) $(FFLAGS) -c $< -o $@ -$(PROG): $(OBJS) +$(PROG): $(OBJS) @echo "Loading $(PROG) ... " @$(LINKER) $(OBJS) $(LIBS) -o $(PROG) diff --git a/README.md b/README.md index 9e244e5..d4173f6 100755 --- a/README.md +++ b/README.md @@ -1,72 +1,165 @@ -# *stda* program for computing excited states and response functions via simplified TD-DFT methods (sTDA, sTD-DFT, and SF-sTD-DFT)[![DOI](https://zenodo.org/badge/221426808.svg)](https://doi.org/10.5281/zenodo.4022460) +# *std2* program for computing excited states and response functions via simplified TD-DFT methods (sTDA, sTD-DFT, SF-sTD-DFT, XsTDA, XsTD-DFT, and SF-Xs-TD-DFT) -This project provides the `stda` program. +This project provides the `std2` program. + +The `std2` program is the rebranded and updated version of the `stda` program. Originally, `stda` was implemented only for the simplified time-dependent density functional theory using the Tamm-Dancoff approximation (sTDA) method. With the implementation of more simplified quantum chemistry (sQC) methods in `stda`, the name was not fitting the application of the program anymore. ## Installation -Statically linked binaries can be found at the projects -[release page](https://github.com/grimme-lab/stda/releases/latest). -To build from source this project uses a `make` based build system and requires -a version of Intel Parallel Studio 17 or newer to be compiled. -To trigger the build run in the root directory +Two options exist: `make` or `meson`. + +### Using `make` (and the intel compiler) + +For that option, you need: + ++ [`cmake`](https://cmake.org/), ++ the latest intel oneAPI Fortran compiler, `ifx` (**not** `ifort`), with `MKL`. + +Then, you need to download the library to compute one- and two-electron integrals : `libcint`: + +```bash +# create a `libcint` directory, then download sources in it +mkdir libcint +cd libcint +wget https://github.com/pierre-24/libcint-meson/releases/download/v0.3.0/libcint_v6.1.2.tar.gz -O libcint.tar.gz +tar -xzf libcint.tar.gz +``` + +The next step depends on your target. +The default (32 bits integers, `LP64`) use a bit less memory but limits the size of the system you can treat. +If you target large system, use the 64 bit integers (`ILP64`) instead. + +#### 32 bit integers (default, `LP64`) + +First, build `libcint`: ```bash +# use intel +export CC=icx + +# In the libcint directory, create a build directory and build `libcint` in it (using cmake) +mkdir build +cd build +cmake .. +cmake --build . +``` + +Then, compile `std2` itself: + +```bash +# go back +cd ../.. + +# make std2 make ``` -You will find a statically linked executable named `stda`. -To make `stda` accessible export +#### 64 bit integers (`ILP64`) for larger calculations + +First, build `libcint` with the option for 64 bits integers: + +```bash +export CC=icx + +# In the libcint directory, create a build directory and build `libcint` in it (using cmake) +mkdir build +cd build +cmake .. -DI8=true +cmake --build . +``` + +Then, compile `std2` itself: + +```bash +# go back +cd ../.. + +# make std2 (using ILP64) +make USEILP64=1 +``` +Troubleshootings: + +In some cases, the path to libraries is a bit different and the Makefile should be adapted as + +``` +LIBS = -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -liomp5 +``` + +#### Run + +You will find a executable named `std2` in this folder. +To make `std2` accessible, do: ```bash -export STDAHOME=$PWD -export PATH=$PATH:$STDAHOME +export STD2HOME=/path/to/std2/folder +export LD_LIBRARY_PATH=$STD2HOME/libcint/build:$LD_LIBRARY_PATH +export PATH=$PATH:$STD2HOME ``` -### Alternatives +in your `.bashrc` or submission scripts. + +### Using `meson` (and any compiler) + +**Note that for the moment, it is not possible to use Meson to compile the 64 bit version with `ifx` (see [there](https://github.com/mesonbuild/meson/issues/13052))** -If you are not a fan of `make`, you can use [`meson`](https://mesonbuild.com/) -as alternative, but it requires a fairly new version like 0.49 or newer for a -decent Fortran support. -For the default backend [`ninja`](https://ninja-build.org/) version 1.5 or newer -has to be provided. +If you are not found of `make`, you can use [`meson`](https://mesonbuild.com/) and [`ninja`](https://ninja-build.org/) instead. +Other advantages include: automatic `libcint` import, more flexibility on the linear algebra backend and `gfortran` instead of intel. -To perform a build run: +First of all, if you want to use other compilers than `gfortran`, use: ```bash -export FC=ifort -meson setup build_intel -ninja -C build_intel +# for latest version of intel compilers +export FC=ifx CC=icx + +# for older versions of intel compilers +export FC=ifort CC=icc ``` -You may also consider to add the following option to `meson`: +Then, pick one of the `meson setup` line below: + +```bash +# netlib BLAS and LAPACK, 32 bits integers +meson setup _build -Dla_backend=netlib + +# openblas and netlib LAPACK, 32 bits integers +meson setup _build -Dla_backend=openblas + +# MKL, 32 bits integers +meson setup _build -Dla_backend=mkl + +# MKL, 64 bits integers (ILP64) +meson setup _build -Dla_backend=mkl -Dinterface=64 +``` -+ `-Dinterface=64` to use 64 bit integers, -+ `-Dstatic=false` to use dynamic libraries (usefull if you get error such as `ld: cannot find -lpthread` at the linking stage of `ninja`), -+ `-Dfortran_link_args=-qopenmp`(useful if you use OneAPI 2021 or latter, and meson ends with `Fortran shared or static library 'mkl_intel_thread' not found`). +You can also: ++ generate a statically linked executable by adding `-Dstatic=true` (only with MKL), or ++ disable OpenMP (not recommended) by adding `-Dopenmp=false`. -To install the `stda` binaries to `/usr/local` use (might require `sudo`) +And finally, compile everything with ```bash -ninja -C build_intel install +meson compile -C _build ``` -For a local installation (or if you want to pack a release), modify the -configuration by using +#### Run + +You will an executable named `std2` in the `_build` directory. +To make `std2` accessible, export ```bash -meson configure build_intel --prefix=/ -DESTDIR=$HOME/.local ninja -C build_intel install +export STD2HOME=/path/to/std2/folder +export PATH=$PATH:$STD2HOME/_build/ ``` -The build system will generate binary files in `$DESTDIR/bin` (don't forget to add that to `PATH` if it is not the case). +in your `.bashrc` or submission scripts. ## Usage For parallel usage set the threads for OMP and the MKL linear algebra backend by ```bash -export OMP_NUM_THREADS= MKL_NUM_THREADS= +export OMP_NUM_THREADS= ``` For larger systems please adjust the stack size accordingly, otherwise @@ -90,32 +183,50 @@ See the manual on the [release page](https://github.com/grimme-lab/stda/releases - S. Grimme and C. Bannwarth, Ultra-fast computation of electronic spectra for large systems by tight-binding based simplified Tamm-Dancoff approximation (sTDA-xTB) *J. Chem. Phys.*, **2016**, 145, 054103. DOI: [10.1063/1.4959605](https://dx.doi.org/10.1063/1.4959605) -- M. de Wergifosse, C. Bannwarth, S. Grimme, A simplified spin-flip time-dependent density functional theory (SF-sTD-DFT) approach for the electronic excitation spectra of very large diradicals, *J. Phys. Chem. A*, **2019**, 123 (27), 815–5825. - DOI: [10.1021/acs.jpca.9b03176](https://doi.org/10.1021/acs.jpca.9b03176) - - M. de Wergifosse, S. Grimme, Nonlinear-response properties in a simplified time-dependent density functional theory (sTD-DFT) framework: Evaluation of the first hyperpolarizability, *J. Chem. Phys.*, **2018**, 149 (2), 024108. DOI: [10.1063/1.5037665](https://doi.org/10.1063/1.5037665) - M. de Wergifosse, S. Grimme, Nonlinear-response properties in a simplified time-dependent density functional theory (sTD-DFT) framework: Evaluation of excited-state absorption spectra, *J. Chem. Phys.*, **2019**, 150, 094112. DOI: [10.1063/1.5080199](https://doi.org/10.1063/1.5080199) +- M. de Wergifosse, C. Bannwarth, S. Grimme, A simplified spin-flip time-dependent density functional theory (SF-sTD-DFT) approach for the electronic excitation spectra of very large diradicals, *J. Phys. Chem. A*, **2019**, 123 (27), 815–5825. + DOI: [10.1021/acs.jpca.9b03176](https://doi.org/10.1021/acs.jpca.9b03176) + +- M. de Wergifosse, J. Seibert, B. Champagne, and S. Grimme, Are fully conjugated expanded indenofluorenes analogues and diindeno[n]thiophene derivatives diradicals? A simplified (spin-flip) time-dependent density functional theory [(SF-)sTD-DFT] study, *J. Phys. Chem. A*, **2019**, 123 (45), 9828-9839. + DOI: [DOI: 10.1021/acs.jpca.9b08474](https://doi.org/10.1021/acs.jpca.9b08474) + - M. de Wergifosse, J. Seibert, S. Grimme, Simplified time-dependent density functional theory (sTD-DFT) for molecular optical rotation, *J. Chem. Phys.*, **2020**, 153, 084116. DOI: [10.1063/5.0020543](https://doi.org/10.1063/5.0020543) - M. de Wergifosse, S. Grimme, A unified strategy for the chemically intuitive interpretation of molecular optical response properties, *J. Chem. Theory Comput.*, **2020**, 16 (12), 7709–7720. DOI: [10.1021/acs.jctc.0c00990](https://doi.org/10.1021/acs.jctc.0c00990) -- M. de Wergifosse, P. Beaujean, S. Grimme, Ultrafast evaluation of two-photon absorption with simplified time-dependent density functional theory, *J. Phys. Chem. A*, **2022**, XX, XXXX. +- M. de Wergifosse, S. Grimme, Perspective on simplified quantum chemistry methods for excited states and response properties, *J. Phys. Chem. A*, **2021**, *J. Phys. Chem. A*, **2021**, 125 (18) 3841–3851. + DOI: [10.1021/acs.jpca.1c02362](https://doi.org/10.1021/acs.jpca.1c02362) + +- P. Beaujean, B. Champagne, S. Grimme, and M. de Wergifosse, All-atom quantum mechanical calculation of the second-harmonic generation of fluorescent proteins, *J. Phys. Chem. Lett.*, **2021**, 12 (39), 9684-9690. + DOI: [10.1021/acs.jpclett.1c02911](https://doi.org/10.1021/acs.jpclett.1c02911) + +- M. de Wergifosse, P. Beaujean, S. Grimme, Ultrafast evaluation of two-photon absorption with simplified time-dependent density functional theory, *J. Phys. Chem. A*, **2022**, 126 (41) 7534–7547. DOI: [10.1021/acs.jpca.2c02395](https://doi.org/10.1021/acs.jpca.2c02395) +- S. Löffelsender, P. Beaujean, M. de Wergifosse. Simplified quantum chemistry methods to evaluate non-linear optical properties of large systems, *WIREs Comput Mol Sci.* **2024**, 14 (1) e1695. + DOI: [10.1002/wcms.1695](https://doi.org/10.1002/wcms.1695) + +- M. de Wergifosse, S. Grimme, The eXact integral simplified time-dependent density functional theory (XsTD-DFT), *J. Chem. Phys.*, **2024**, 160, 204110. + DOI: [10.1063/5.0206380](https://doi.org/10.1063/5.0206380) + +- M. de Wergifosse, Computing excited states of very large systems with range-separated hybrid functionals and the eXact integral simplified time-dependent density functional theory (XsTD-DFT), *J. Phys. Chem. Lett.*, **2024**, 15, (51) 12628–12635. + DOI: [10.1021/acs.jpclett.4c03193](https://doi.org/10.1021/acs.jpclett.4c03193) + ## License -`stda` is free software: you can redistribute it and/or modify it under +`std2` is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. -`stda` is distributed in the hope that it will be useful, +`std2` is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU Lesser General Public License for more details. @@ -129,15 +240,16 @@ Before opening a bug report: 1. Check if the issue has already been reported. 2. Check if it still is an issue or has already been fixed? - Try to reproduce it with the latest version from the `master` branch. + Try to reproduce it with the latest version from the `main` branch. 3. Isolate the problem and create a reduced test case. A good bug report should not leave others needing to chase you up for more information. So please try to be as detailed as possible in your report, answer at least these questions: -1. Which version of `stda` are you using? The current version is always +1. Which version of `std2` are you using? The current version is always a subject to change, so be more specific. + If possible, also provide the *commit*. 2. What is your environment (your laptop, the cluster of the university)? 3. What steps will reproduce the issue? We have to reproduce the issue, so we need all the input files. diff --git a/apbtrafo.f b/apbtrafo.f index 129d4e6..2e66f0a 100755 --- a/apbtrafo.f +++ b/apbtrafo.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ccccccccccccccccccccccccccccccccccc ! Correct TDA eigenvector for Rv c ! (A+0.5*B)/omega * X c @@ -45,7 +46,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss ************** read B matrix (packed) ************************** open(unit=52,file='bmat',form='unformatted',status='old') - read(52)bmat + read(52)bmat close(52,status='delete') ****************************************************************** @@ -54,12 +55,12 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss call spack2tri(n,bmat,upper) ! blow up matrix, but we only need upper triangle deallocate(bmat) allocate(xnew(n,nroot)) - call ssymm('l','u',n,nroot,1.0e0,upper,n,x,n,0.e0,xnew,n) + call ssymm('l','u',n,nroot,1.0e0,upper,n,x,n,0.e0,xnew,n) deallocate(upper) ****************************************************************** ! !******************** scale with omega_TDA ************************ -! compute divide by omega_TDA to yield X_new +! compute divide by omega_TDA to yield X_new do i=1,nroot ef=1.0d0/(dble(e(i))+1.0d-8) do j=1,n @@ -68,7 +69,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss enddo !****************************************************************** ! -!!! OLD ORTHOGONALIZATION PART - NOT USED ANYMORE +!!! OLD ORTHOGONALIZATION PART - NOT USED ANYMORE ! ************** compute overlap: S = (X_new)**T * (X_new) ********* ! allocate(upper(nroot,nroot)) @@ -89,7 +90,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss !****************************************************************** !! !************** orthogonalize vector: X' = X_new * U**-1 ********** -! call strsm('R','U','N','N',n, nroot,1.0,upper,nroot,xnew,n) +! call strsm('R','U','N','N',n, nroot,1.0,upper,nroot,xnew,n) !***************************************************************** ! !*********** check orthogonality ***************** @@ -97,7 +98,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss ! upper=0.0 ! call sgemm('T','n',nroot,nroot,n,1.0,xnew,n,xnew,n,0.0, ! . upper,nroot) -! +! ! ! do i=1,min(12,nroot) ! write(*,'(12f10.6)') (upper(j,i),j=1,min(12,nroot)) @@ -170,7 +171,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss write(27,*)'SHIFT' write(27,*)' 0.00' write(27,*)'DATXY' - endif + endif p23=ak* 2.0d0/3.0d0 do i=1,nroot @@ -179,7 +180,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss ef=1.0d0/(de+1.0d-8) ! damp exponent from -1 to 0 for small energies hilf=1.0d0-exp(-150.0d0*de*de) - efmod=1.0d0/((de**hilf)+1.0d-8) + efmod=1.0d0/((de**hilf)+1.0d-8) xlp=0.0d0 ylp=0.0d0 zlp=0.0d0 @@ -217,18 +218,18 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss unew=dble(xnew(j,i)) uold=dble(x(j,i)) ij=lin8(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xl(ij)*uold ylp=ylp+yl(ij)*uold zlp=zlp+zl(ij)*uold - xvp=xvp+xv(ij)*uold + xvp=xvp+xv(ij)*uold yvp=yvp+yv(ij)*uold zvp=zvp+zv(ij)*uold xmp=xmp+xm(ij)*uold ymp=ymp+ym(ij)*uold - zmp=zmp+zm(ij)*uold - xvp2=xvp2+xv(ij)*unew - yvp2=yvp2+yv(ij)*unew + zmp=zmp+zm(ij)*uold + xvp2=xvp2+xv(ij)*unew + yvp2=yvp2+yv(ij)*unew zvp2=zvp2+zv(ij)*unew xmp2=xmp2+xm(ij)*unew ymp2=ymp2+ym(ij)*unew @@ -284,7 +285,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss write(26,'(i4,F10.4,4f13.6)')i,de*27.21139,fly,fvy,rly,rvy write(27,'(i4,F10.4,4f13.6)')i,de*27.21139,flz,fvz,rlz,rvz endif - enddo + enddo close(28) if(aniso)then close(25) @@ -292,7 +293,7 @@ subroutine apbtrafo(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss close(27) write(*,*)'data given such that f = (f_x + f_y + f_z)/3' write(*,*)' and R = R_x + R_y + R_z' - endif + endif deallocate(xnew) end subroutine apbtrafo @@ -346,7 +347,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, ************** read 0.5*B matrix (packed) *********************** open(unit=52,file='bmat',form='unformatted',status='old') - read(52)bmat + read(52)bmat close(52,status='delete') ****************************************************************** @@ -355,12 +356,12 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, call spack2tri(n,bmat,upper) ! blow up matrix, but we only need upper triangle deallocate(bmat) allocate(xnew(n,nroot)) - call ssymm('l','u',n,nroot,1.e0,upper,n,x,n,0.e0,xnew,n) + call ssymm('l','u',n,nroot,1.e0,upper,n,x,n,0.e0,xnew,n) deallocate(upper) ****************************************************************** ! ******************** scale with omega_TDA ************************ -! divide by omega_TDA to yield X_new +! divide by omega_TDA to yield X_new do i=1,nroot ef=1.0d0/(dble(e(i))+1.0d-8) do j=1,n @@ -386,7 +387,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, !****************************************************************** !! !************** orthogonalize vector: X' = X_new * U**-1 ********** -! call strsm('R','U','N','N',n, nroot,1.0,upper,nroot,xnew,n) +! call strsm('R','U','N','N',n, nroot,1.0,upper,nroot,xnew,n) !****************************************************************** !! !*********** check orthogonality ***************** @@ -394,7 +395,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, !! upper=0.0 !! call sgemm('T','n',nroot,nroot,n,1.0,xnew,n,xnew,n,0.0, !! . upper,nroot) -!! +!! !! !! do i=1,min(12,nroot) !! write(*,'(12f10.6)') (upper(j,i),j=1,min(12,nroot)) @@ -422,7 +423,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, write(28,*)'SHIFT' write(28,*)' 0.00' write(28,*)'DATXY' - + p23=2.0d0/3.0d0 do i=1,nroot ! A+B transformed stuff @@ -469,12 +470,12 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, unew=dble(xnew(j,i)) uold=dble(x(j,i)) ij=lin8(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xla(ij)*uold ylp=ylp+yla(ij)*uold - zlp=zlp+zla(ij)*uold - xvp=xvp+xva(ij)*uold - yvp=yvp+yva(ij)*uold + zlp=zlp+zla(ij)*uold + xvp=xvp+xva(ij)*uold + yvp=yvp+yva(ij)*uold zvp=zvp+zva(ij)*uold xmp=xmp+xma(ij)*uold ymp=ymp+yma(ij)*uold @@ -494,11 +495,11 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, unew=dble(xnew(k,i)) uold=dble(x(k,i)) ij=lin8(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xlb(ij)*uold ylp=ylp+ylb(ij)*uold zlp=zlp+zlb(ij)*uold - xvp=xvp+xvb(ij)*uold + xvp=xvp+xvb(ij)*uold yvp=yvp+yvb(ij)*uold zvp=zvp+zvb(ij)*uold xmp=xmp+xmb(ij)*uold @@ -560,7 +561,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, write(26,'(i4,F10.4,4f13.6)')i,de*27.21139,fly,fvy,rly,rvy write(29,'(i4,F10.4,4f13.6)')i,de*27.21139,flz,fvz,rlz,rvz endif - enddo + enddo close(28) if(aniso)then close(25) @@ -568,7 +569,7 @@ subroutine apbtrafo_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva,zva, close(29) write(*,*)'data given such that f = (f_x + f_y + f_z)/3' write(*,*)' and R = R_x + R_y + R_z' - endif + endif deallocate(xnew) end subroutine apbtrafo_uks @@ -595,9 +596,9 @@ subroutine rtdacorr(nci,ncent,no,nv,mxcnf,iconf,dak,dax if(ierr.ne.0)stop 'allocation for qkj/bmat crashed' ak=real(dak) ax=real(dax) -! calculate 0.5*B +! calculate 0.5*B bmat=0.0e0 - fact=0.50d0 ! this is the scaling of the B-contribution + fact=0.50d0 ! this is the scaling of the B-contribution open(unit=52,file='bmat',form='unformatted',status='replace') ij=0 !$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,qk,qj,ek,ej) @@ -623,11 +624,11 @@ subroutine rtdacorr(nci,ncent,no,nv,mxcnf,iconf,dak,dax bmat(ij)=bmat(ij)-fact*ax*ek ! scaled by ax enddo ij=lin8(i,i) - ek=sdot(ncent,qk,1,qia(1,iwrk),1) + ek=sdot(ncent,qk,1,qia(1,iwrk),1) bmat(ij)=fact*(ak*ek-ax*ek) ! diagonal element of 0.5*B enddo !$omp end do -!$omp end parallel +!$omp end parallel write(52)bmat close(52) deallocate(bmat,qk,qj) @@ -639,7 +640,7 @@ end subroutine rtdacorr *********************************************************************** -* set up 0.5*B (packed form) in UKS case ! +* set up 0.5*B (packed form) in UKS case ! *********************************************************************** subroutine utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, . mxcnfb,iconfa,iconfb,dax,piaa,qiaa, @@ -665,8 +666,8 @@ subroutine utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, allocate(qj(ncent),qk(ncent),bmat(ij), stat=ierr) if(ierr.ne.0)stop 'allocation for qkj/bmat crashed' ax=real(dax) -! calculate 0.5*B - fact=0.50e0 ! this is the scaling of the B-contribution +! calculate 0.5*B + fact=0.50e0 ! this is the scaling of the B-contribution bmat=0.0e0 open(unit=52,file='bmat',form='unformatted',status='replace') ij=0 @@ -691,7 +692,7 @@ subroutine utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, qj(1:ncent)=piaa(1:ncent,jwrk) jwrk=(jo-1)*nva+iiv ek=sdot(ncent,qj,1,qiaa(1,jwrk),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax - bmat(ij)=bmat(ij)-fact*ax*ek + bmat(ij)=bmat(ij)-fact*ax*ek enddo ij=lin8(i,i) ek=sdot(ncent,qk,1,qiaa(1,iwrk),1) @@ -726,7 +727,7 @@ subroutine utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, jv=iconfb(j-nexa,2) jjv=jv-nob jwrk=(jo-1)*nvb + jjv - ek=sdot(ncent,qk,1,qiab(1,jwrk),1) + ek=sdot(ncent,qk,1,qiab(1,jwrk),1) bmat(ij)=(fact)*ek jwrk=(io-1)*nvb+jjv qj(1:ncent)=piab(1:ncent,jwrk) @@ -740,7 +741,7 @@ subroutine utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, enddo !$omp end do !$omp end parallel -! call prmat4(6,bmat,nexa+nexb,0,'A+ 0.5 * B') +! call prmat4(6,bmat,nexa+nexb,0,'A+ 0.5 * B') write(52)bmat close(52) deallocate(bmat,qj,qk) @@ -778,7 +779,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss ************** read B matrix (packed) ************************** open(unit=52,file='bmat',form='unformatted',status='old') - read(52)bmat + read(52)bmat close(52,status='delete') ****************************************************************** @@ -787,12 +788,12 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss call spack2tri(n,bmat,upper) ! blow up matrix, but we only need upper triangle deallocate(bmat) allocate(xnew(n,nroot)) - call ssymm('l','u',n,nroot,1.0e0,upper,n,x,n,0.e0,xnew,n) + call ssymm('l','u',n,nroot,1.0e0,upper,n,x,n,0.e0,xnew,n) deallocate(upper) ****************************************************************** ! !******************** scale with omega_TDA ************************ -! compute divide by omega_TDA to yield X_new +! compute divide by omega_TDA to yield X_new do i=1,nroot ef=1.0d0/(dble(e(i))+1.0d-8) do j=1,n @@ -800,7 +801,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss enddo enddo !****************************************************************** - + write(*,*)' writing trafoed spectral data to tda.dat ...' open(unit=28,file='tda.dat',status='replace') write(28,*)'NM' @@ -862,7 +863,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss write(29,*)'SHIFT' write(29,*)' 0.00' write(29,*)'DATXY' - endif + endif allocate(q1(ncent)) q1=0.0e0 @@ -875,7 +876,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss ef=1.0d0/(de+1.0d-8) ! damp exponent from -1 to 0 for small energies hilf=1.0d0-exp(-150.0d0*de*de) - efmod=1.0d0/((de**hilf)+1.0d-8) + efmod=1.0d0/((de**hilf)+1.0d-8) xlp=0.0d0 ylp=0.0d0 zlp=0.0d0 @@ -894,9 +895,9 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss zmp2=0.0d0 xvp2=0.0d0 yvp2=0.0d0 - zvp2=0.0d0 + zvp2=0.0d0 xms=0.0d0 - yms=0.0d0 + yms=0.0d0 zms=0.0d0 xmu=0.0d0 ymu=0.0d0 @@ -923,18 +924,18 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss unew=dble(xnew(j,i)) uold=dble(x(j,i)) ij=lin(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xl(ij)*uold ylp=ylp+yl(ij)*uold zlp=zlp+zl(ij)*uold - xvp=xvp+xv(ij)*uold + xvp=xvp+xv(ij)*uold yvp=yvp+yv(ij)*uold zvp=zvp+zv(ij)*uold xmp=xmp+xm(ij)*uold ymp=ymp+ym(ij)*uold - zmp=zmp+zm(ij)*uold - xvp2=xvp2+xv(ij)*unew - yvp2=yvp2+yv(ij)*unew + zmp=zmp+zm(ij)*uold + xvp2=xvp2+xv(ij)*unew + yvp2=yvp2+yv(ij)*unew zvp2=zvp2+zv(ij)*unew xmp2=xmp2+xm(ij)*unew ymp2=ymp2+ym(ij)*unew @@ -1030,7 +1031,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss write(26,'(i4,F10.4,4f13.6)')i,de*27.21139,fly,fvy,rly,rvy write(29,'(i4,F10.4,4f13.6)')i,de*27.21139,flz,fvz,rlz,rvz endif - enddo + enddo close(28) if(aniso)then close(25) @@ -1038,7 +1039,7 @@ subroutine apbtrafoexc(n,nroot,x,e,xl,yl,zl,xv,yv,zv,xm,ym,zm,xmss close(29) write(*,*)'data given such that f = (f_x + f_y + f_z)/3' write(*,*)' and R = R_x + R_y + R_z' - endif + endif deallocate(xnew,q1) end subroutine apbtrafoexc @@ -1047,53 +1048,53 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva . ,zva,xma,yma,zma,xlb,ylb,zlb,xvb,yvb,zvb,xmb,ymb,zmb,xmss . ,noa,nva,nob,nvb,coc,ncent,qiaa,qiab,maxconfa,maxconfb,iconfa . ,iconfb,rvpout) - use commonlogicals - implicit none - integer, intent ( in ) :: maxconfa,maxconfb,n,na,nb,nroot + use commonlogicals + implicit none + integer, intent ( in ) :: maxconfa,maxconfb,n,na,nb,nroot integer, intent ( in ) :: ncent,noa,nva,nob,nvb - integer, intent ( in ) :: iconfa(maxconfa,2),iconfb(maxconfb,2) - real*8, intent(in) :: xla(*),yla(*),zla(*) - real*8, intent(in) :: xva(*),yva(*),zva(*) - real*8, intent(in) :: xma(*),yma(*),zma(*) - real*8, intent(in) :: xlb(*),ylb(*),zlb(*) - real*8, intent(in) :: xvb(*),yvb(*),zvb(*) - real*8, intent(in) :: xmb(*),ymb(*),zmb(*) - real*4, intent(in) :: x(n,n),e(n),qiaa(ncent,na),qiab(ncent,nb) - real*8, intent(in) :: xmss,coc(3) - real*8, intent( out ) :: rvpout(nroot) - - integer i,j,k,l,ij,io,iv,lin - real*8 de,ef,xp,xlp,ylp,zlp,xvp,yvp,zvp,xmp,ymp,zmp + integer, intent ( in ) :: iconfa(maxconfa,2),iconfb(maxconfb,2) + real*8, intent(in) :: xla(*),yla(*),zla(*) + real*8, intent(in) :: xva(*),yva(*),zva(*) + real*8, intent(in) :: xma(*),yma(*),zma(*) + real*8, intent(in) :: xlb(*),ylb(*),zlb(*) + real*8, intent(in) :: xvb(*),yvb(*),zvb(*) + real*8, intent(in) :: xmb(*),ymb(*),zmb(*) + real*4, intent(in) :: x(n,n),e(n),qiaa(ncent,na),qiab(ncent,nb) + real*8, intent(in) :: xmss,coc(3) + real*8, intent( out ) :: rvpout(nroot) + + integer i,j,k,l,ij,io,iv,lin + real*8 de,ef,xp,xlp,ylp,zlp,xvp,yvp,zvp,xmp,ymp,zmp real*8 xmu,ymu,zmu,xvu,yvu,zvu,xms,yms,zms - real*8 xvp2,yvp2,zvp2,xmp2,ymp2,zmp2,hilf,efmod - real*8 flp,fvp,rlp,rvp,p23,fact,unew,uold !,enew(nroot) + real*8 xvp2,yvp2,zvp2,xmp2,ymp2,zmp2,hilf,efmod + real*8 flp,fvp,rlp,rvp,p23,fact,unew,uold !,enew(nroot) real*8 flx,fly,flz,fvx,fvy,fvz,rlx,rly,rlz,rvx,rvy,rvz ! resolved along the three orientations - real*4, allocatable :: bmat(:),upper(:,:), xnew(:,:),q1(:) + real*4, allocatable :: bmat(:),upper(:,:), xnew(:,:),q1(:) write(*,'(A)',advance='yes') ' perform velo correction for X...' - rvpout=0.0d0 - - allocate(bmat(n*(n+1)/2)) - -************** read 0.5*B matrix (packed) *********************** - open(unit=52,file='bmat',form='unformatted',status='old') - read(52)bmat - close(52,status='delete') -****************************************************************** - -************** blow up 0.5*B and compute (0.5*B)*X *************** - allocate(upper(n,n)) - call spack2tri(n,bmat,upper) ! blow up matrix, but we only need upper triangle - deallocate(bmat) - allocate(xnew(n,nroot)) - call ssymm('l','u',n,nroot,1.e0,upper,n,x,n,0.e0,xnew,n) - deallocate(upper) -****************************************************************** -! -******************** scale with omega_TDA ************************ -! divide by omega_TDA to yield X_new - do i=1,nroot - ef=1.0d0/(dble(e(i))+1.0d-8) - do j=1,n + rvpout=0.0d0 + + allocate(bmat(n*(n+1)/2)) + +************** read 0.5*B matrix (packed) *********************** + open(unit=52,file='bmat',form='unformatted',status='old') + read(52)bmat + close(52,status='delete') +****************************************************************** + +************** blow up 0.5*B and compute (0.5*B)*X *************** + allocate(upper(n,n)) + call spack2tri(n,bmat,upper) ! blow up matrix, but we only need upper triangle + deallocate(bmat) + allocate(xnew(n,nroot)) + call ssymm('l','u',n,nroot,1.e0,upper,n,x,n,0.e0,xnew,n) + deallocate(upper) +****************************************************************** +! +******************** scale with omega_TDA ************************ +! divide by omega_TDA to yield X_new + do i=1,nroot + ef=1.0d0/(dble(e(i))+1.0d-8) + do j=1,n xnew(j,i)=ef*xnew(j,i) enddo enddo @@ -1117,7 +1118,7 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva allocate(q1(ncent)) q1=0.0e0 - + p23=2.0d0/3.0d0 do i=1,nroot ! A+B transformed stuff @@ -1165,12 +1166,12 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva unew=dble(xnew(j,i)) uold=dble(x(j,i)) ij=lin(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xla(ij)*uold ylp=ylp+yla(ij)*uold - zlp=zlp+zla(ij)*uold - xvp=xvp+xva(ij)*uold - yvp=yvp+yva(ij)*uold + zlp=zlp+zla(ij)*uold + xvp=xvp+xva(ij)*uold + yvp=yvp+yva(ij)*uold zvp=zvp+zva(ij)*uold xmp=xmp+xma(ij)*uold ymp=ymp+yma(ij)*uold @@ -1192,11 +1193,11 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva unew=dble(xnew(k,i)) uold=dble(x(k,i)) ij=lin(io,iv) -! A+B transformed stuff +! A+B transformed stuff xlp=xlp+xlb(ij)*uold ylp=ylp+ylb(ij)*uold zlp=zlp+zlb(ij)*uold - xvp=xvp+xvb(ij)*uold + xvp=xvp+xvb(ij)*uold yvp=yvp+yvb(ij)*uold zvp=zvp+zvb(ij)*uold xmp=xmp+xmb(ij)*uold @@ -1281,7 +1282,7 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva write(26,'(i4,F10.4,4f13.6)')i,de*27.21139,fly,fvy,rly,rvy write(29,'(i4,F10.4,4f13.6)')i,de*27.21139,flz,fvz,rlz,rvz endif - enddo + enddo close(28) if(aniso)then close(25) @@ -1289,8 +1290,6 @@ subroutine apbtrafoexc_uks(n,na,nb,nroot,x,e,xla,yla,zla,xva,yva close(29) write(*,*)'data given such that f = (f_x + f_y + f_z)/3' write(*,*)' and R = R_x + R_y + R_z' - endif + endif deallocate(xnew,q1) end subroutine apbtrafoexc_uks - - diff --git a/block.f b/block.f index 989a433..8adaa19 100755 --- a/block.f +++ b/block.f @@ -1,39 +1,40 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ BLOCK DATA IMPLICIT DOUBLE PRECISION (A-H,O-Z) common /amass / ams(107) - data ams / 1.00790d0, 4.00260d0, 6.94000d0, 9.01218d0, - 110.81000d0, 12.01100d0, 14.00670d0, 15.99940d0, 18.99840d0, - 220.17900d0, 22.98977d0, 24.30500d0, 26.98154d0, 28.08550d0, - 330.97376d0, 32.06000d0, 35.45300d0, 39.94800d0, 39.09830d0, - 440.08000d0, 44.95590d0, 47.90000d0, 50.94150d0, 51.99600d0, - 554.93800d0, 55.84700d0, 58.93320d0, 58.71000d0, 63.54600d0, - 665.38000d0, 69.73500d0, 72.59000d0, 74.92160d0, 78.96000d0, - 779.90400d0, 83.80000d0, 85.46780d0, 87.62000d0, 88.90590d0, - 891.22000d0, 92.90640d0, 95.94000d0, 98.90620d0, 101.0700d0, - 9102.9055d0, 106.4000d0, 107.8680d0, 112.4100d0, 114.8200d0, - 1118.6900d0, 121.7500d0, 127.6000d0, 126.9045d0, 131.3000d0, - 2132.9054d0, 137.3300d0, 15*0.000d0, 178.4900d0, 180.9479d0, - 3183.8500d0, 186.2070d0, 190.2000d0, 192.2200d0, 195.0900d0, - 4196.9665d0, 200.5900d0, 204.3700d0, 207.2000d0, 208.9804d0, - 518*0.000d0, 1.0079d0, 5*0.000d0/ + data ams / 1.00790d0, 4.00260d0, 6.94000d0, 9.01218d0, + 110.81000d0, 12.01100d0, 14.00670d0, 15.99940d0, 18.99840d0, + 220.17900d0, 22.98977d0, 24.30500d0, 26.98154d0, 28.08550d0, + 330.97376d0, 32.06000d0, 35.45300d0, 39.94800d0, 39.09830d0, + 440.08000d0, 44.95590d0, 47.90000d0, 50.94150d0, 51.99600d0, + 554.93800d0, 55.84700d0, 58.93320d0, 58.71000d0, 63.54600d0, + 665.38000d0, 69.73500d0, 72.59000d0, 74.92160d0, 78.96000d0, + 779.90400d0, 83.80000d0, 85.46780d0, 87.62000d0, 88.90590d0, + 891.22000d0, 92.90640d0, 95.94000d0, 98.90620d0, 101.0700d0, + 9102.9055d0, 106.4000d0, 107.8680d0, 112.4100d0, 114.8200d0, + 1118.6900d0, 121.7500d0, 127.6000d0, 126.9045d0, 131.3000d0, + 2132.9054d0, 137.3300d0, 15*0.000d0, 178.4900d0, 180.9479d0, + 3183.8500d0, 186.2070d0, 190.2000d0, 192.2200d0, 195.0900d0, + 4196.9665d0, 200.5900d0, 204.3700d0, 207.2000d0, 208.9804d0, + 518*0.000d0, 1.0079d0, 5*0.000d0/ END diff --git a/full.f b/full.f new file mode 100644 index 0000000..2e85d45 --- /dev/null +++ b/full.f @@ -0,0 +1,1373 @@ +! This file is part of std2. +! +! Copyright (C) 2025 Marc de Wergifosse +! +! std2 is free software: you can redistribute it and/or modify it under +! the terms of the GNU Lesser General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! std2 is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ +!!! (|) integrals are computed exactly, for testing purpose only, not optimized !!!!!!!! + subroutine rrpamat_full(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed, + . apb,ambsqr,ca,nao,moci,nprims,epsi) + use commonlogicals + use omp_lib + implicit none + integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) + real*8, intent(in) :: dak,dax,ed(mxcnf) + real*4, intent(out) :: apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2) + integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,a,b,k,l,ii + real*4 ek,ej,sdot,ak,ax,de + real*8 :: ca(nao*moci) + real*4, allocatable :: integral2(:,:,:,:) + integer :: nao, moci, nprims + integer*8 :: lin8 + real*4 :: start_time,end_time,start,finished + integer :: m,n,o,p + real*4, allocatable :: iatemp1(:,:),itemp(:,:,:) + real*4, allocatable :: iatemp2(:,:) + real*4, allocatable :: iajtemp1(:),iajtemp2(:) + real*4, allocatable :: K_iajb(:,:,:,:) + real*4, allocatable :: J_ijab(:,:,:,:) + real*8 :: ddot + integer :: canon + real*8 :: wtime + integer :: ino,nno,inv,nnv + integer*8 :: counter + real*8 :: epsi(moci) + + start_time=wtime() +! call cpu_time(start) +! Compute ( | ) integrals with lbcint + ! reduce the mo range to match the configuration space + ino=minval(iconf(1:nci,1)) + nno=maxval(iconf(1:nci,1)) + inv=minval(iconf(1:nci,2))-no + nnv=maxval(iconf(1:nci,2))-no +! write(*,*)'MO integrals computed for occ.',ino,'to',nno +! write(*,*)'and for unocc.',inv,'to',nnv + + allocate(integral2(nno+1-ino,nao,nao,nao),stat=ierr) + if(ierr.ne.0)stop 'allocation failed for 2-e integrals' + + call two_elec_int_i(ncent,nprims,nao,integral2, + .ino,nno,ca,moci) + +! call cpu_time(finished) + end_time=wtime() +! print '("cpu time = ",f12.2," minutes.")' +! . ,(finished-start)/60.0 + print '("time = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 + start_time=wtime() + call cpu_time(start) + + + allocate(itemp(nao,nao,nao)) + allocate(iatemp1(nao,nao)) + allocate(iatemp2(nao,nao)) + allocate(iajtemp1(nao)) + allocate(iajtemp2(nao)) + + + + if(abs(dax).lt.1.0d-6) then + allocate(K_iajb(ino:nno,inv:nnv,ino:nno,inv:nnv)) +!$omp parallel private(ii,p,j,a,b,itemp, +!$omp& iatemp1) +!$omp& shared(ca,integral2,nao,no) +!$omp do + Do ii=ino, nno + !(i.|..) + itemp(:,:,:)=integral2(ii,:,:,:) + + Do a=inv, nnv + iatemp1=0.0 + Do p=1,nao + !(ia|..) + call sgemv('T',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp1(:,p),1) + + Do j=ino, nno + iajtemp1=0.0 + !(ia|j.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp1,1) + enddo + + Do b=inv, nnv + !(ia|jb) + K_iajb(ii,a,j,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + + enddo + enddo + enddo + enddo +!$omp end do +!$omp end parallel + else + + allocate(K_iajb(ino:nno,inv:nnv,ino:nno,inv:nnv)) + allocate(J_ijab(ino:nno,ino:nno,inv:nnv,inv:nnv)) + +!$omp parallel private(ii,p,j,a,b,itemp, +!$omp& iatemp1,iatemp2,iajtemp1,iajtemp2) +!$omp& shared(ca,integral2,nao,no) +!$omp do + Do ii=ino, nno + !(i.|..) + itemp(:,:,:)=integral2(ii,:,:,:) ! this is increasing the speed drastically :) + + Do a=inv, nnv + iatemp1=0.0 + iatemp2=0.0 + Do p=1,nao + !(ia|..) + call sgemv('T',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp1(:,p),1) + !(i.|a.) + call sgemv('N',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp2(:,p),1) + enddo + + Do j=ino, nno + iajtemp1=0.0 + iajtemp2=0.0 + !(ia|j.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp1,1) + !(ij|a.) + call sgemv('T',nao,nao,1.0,iatemp2,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp2,1) + + Do b=inv, nnv + !(ia|jb) Since (ia|jb)=(jb|ia), I could decrease memory by collapsing the array... but with respect to integral + K_iajb(ii,a,j,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + !(ij|ab) + J_ijab(ii,j,a,b)=sdot(nao,iajtemp2,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + enddo + enddo + enddo + enddo +!$omp end do +!$omp end parallel + endif + + deallocate(itemp) + deallocate(iatemp1) + deallocate(iatemp2) + deallocate(iajtemp1) + deallocate(iajtemp2) + deallocate(integral2) + + write(*,*)'MO ( | ) computed' +! call cpu_time(finished) + end_time=wtime() +! print '("cpu time = ",f12.2," minutes.")' +! . ,(finished-start)/60.0 + print '("time = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 + + + ak=real(dak) + ax=real(dax) +! calculate A+B and A-B + apb=0.0e0 + ambsqr=0.0e0 + +! if ax=0, A-B is diagonal and its off-diagonal elements do not need to be calculated + if(abs(dax).lt.1.0d-6) then + ij=0 +!$omp parallel private(ij,i,j,ek,de) +!$omp do + do i=1,nci + do j=1,i-1 + ij=lin(i,j) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(j,1),iconf(j,2)-no) ! ek = (ia|jb) + apb(ij)=2.0*ak*ek + ambsqr(ij)=0.0 + enddo ! j + de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + ij=lin(i,i) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(i,1),iconf(i,2)-no) + if(aresp.or.resp.or.optrota) then + ambsqr(ij)=de ! diagonal element of (A-B) + else + ambsqr(ij)=sqrt(de) ! diagonal element of (A-B)^0.5 + endif + apb(ij)=de+ak*ek*2.0 ! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + + deallocate(K_iajb) + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) ambsqr + close(53) + + else + + ij=0 + ! for now ambsqr=A+B and apb=A-B, since we need to take the sqrt of A-B (but want to save memory) +!$omp parallel private(ij,i,j,ek,ej) +!$omp do + do i=1,nci + do j=1,i-1 + ij=lin(i,j) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(j,1),iconf(j,2)-no) ! ek = (ia|jb) + ej=J_ijab(iconf(i,1),iconf(j,1),iconf(i,2)-no,iconf(j,2)-no)*ax ! ej = (ij|ab) + ambsqr(ij)=2.0*ak*ek + ek=K_iajb(iconf(i,1),iconf(j,2)-no,iconf(j,1),iconf(i,2)-no) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax + ambsqr(ij)=ambsqr(ij)-ax*ek-ej + apb(ij)=ax*ek-ej + enddo ! j + ij=lin(i,i) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(i,1),iconf(i,2)-no) + ej=J_ijab(iconf(i,1),iconf(i,1),iconf(i,2)-no,iconf(i,2)-no)*ax + de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + apb(ij)=de+ax*ek -ej ! diagonal element of A-B + ambsqr(ij)=de-ax*ek+2.0*ak*ek -ej! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + + deallocate(K_iajb) + deallocate(J_ijab) + + +! call prmat4(6,apb,nci,0,'A-B') +! call prmat4(6,ambsqr,nci,0,'A+B') + + + if(aresp.or.resp.or.optrota) then + write(*,*) ' calculating (A-B)^0.5 not necessary...' + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + close(53) + apb=ambsqr + else + open(unit=52,file='apbmat',form='unformatted',status='replace') + write(52) ambsqr + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)') + . float(nci)**2*float(nci)/4.d+8/60. + call smatpow(nci,apb) ! calculate sqrt(a-b), termed ambsqr + + ambsqr=apb + + rewind(52) + read(52) apb + close(52,status='delete') + close(53) + endif + endif ! GGA/hybrid case + + + return + + end subroutine rrpamat_full + + function wtime ( ) + implicit none + + integer ( kind = 4 ) clock_max + integer ( kind = 4 ) clock_rate + integer ( kind = 4 ) clock_reading + real ( kind = 8 ) wtime + + call system_clock ( clock_reading, clock_rate, clock_max ) + + wtime = real ( clock_reading, kind = 8 ) + . / real ( clock_rate, kind = 8 ) + + return + end + + + subroutine two_elec_int_i(ncent,nprims,nbf,integral, + .ino,nno,ca,moci) + use stdacommon + use commonlibcint + use omp_lib + implicit none + integer :: i,j,k,l + integer,target :: n,m,o,p,mm,nn + integer,pointer :: ddj,ddk,ddl,dddl + logical :: extra_step + integer :: ncent,nprims,nbf,canon + integer :: ino,nno,moci + real*8 :: ca(nbf*moci) + integer :: shls(4) + integer, target :: di,dj,dk,dl + integer :: orb_cart(1:10,1:10) + double precision, allocatable :: buf(:,:,:,:) + real*4 :: integral(nno+1-ino,nbf,nbf,nbf) + double precision :: norm_cart(1:10,1:10),thresh + + integer,external :: CINTcgto_cart + + integer*8 :: opt + ! enforce not RSH integrals, putting mu to zero + env(9)=0.0d0 + + ! see Theoret. Chim. Acta 33 1-6 (1974) Diercksen + ! and Methods in computational chemistry Vol 1, 1987, page 257 + ! It uses integral symmetries + ! number of integrals nbf*(nbf+1)/2*(nbf*(nbf+1)/2+1)/2 + ! including vanishing ones + ! integral canonical index for (ij|kl): + ! i>=j k>=l + ! ij=i(i-1)/2+j kl=k(k-1)/2+l + ! ij>=kl + ! canonical_index=ij(ij-1)/2+kl + + ! To get the same order as in libcint + orb_cart(1,1)=1 + orb_cart(3,1)=1 + orb_cart(3,2)=2 + orb_cart(3,3)=3 + orb_cart(6,1)=1 + orb_cart(6,2)=4 + orb_cart(6,3)=5 + orb_cart(6,4)=2 + orb_cart(6,5)=6 + orb_cart(6,6)=3 + orb_cart(10,1)=1 + orb_cart(10,2)=4 + orb_cart(10,3)=5 + orb_cart(10,4)=6 + orb_cart(10,5)=10 + orb_cart(10,6)=8 + orb_cart(10,7)=2 + orb_cart(10,8)=7 + orb_cart(10,9)=9 + orb_cart(10,10)=3 + ! For cartesian basis libcint uses d and f not normalized + if(spherical)then + norm_cart=1.0 + else + norm_cart=1.0 + norm_cart(6,1)=1.0 + norm_cart(6,2)=dsqrt(3.0d0) + norm_cart(6,3)=dsqrt(3.0d0) + norm_cart(6,4)=1.0 + norm_cart(6,5)=dsqrt(3.0d0) + norm_cart(6,6)=1.0 + norm_cart(10,1)=1.0 + norm_cart(10,2)=dsqrt(5.0d0) + norm_cart(10,3)=dsqrt(5.0d0) + norm_cart(10,4)=dsqrt(5.0d0) + norm_cart(10,5)=dsqrt(15.0d0) + norm_cart(10,6)=dsqrt(5.0d0) + norm_cart(10,7)=1.0 + norm_cart(10,8)=dsqrt(5.0d0) + norm_cart(10,9)=dsqrt(5.0d0) + norm_cart(10,10)=1.0 + endif + integral=0.0d0 + thresh=1.0d-7 + + write(*,*)'number of unique AO integrals', + .int(nbf,8)*(int(nbf,8)+1)/2* + . (int(nbf,8)*(int(nbf,8)+1)/2+1)/2 + write(*,*)'number of (i.|..) that will be stored temporarily', + .int((nno+1-ino),8)*int(nbf,8)*int(nbf,8)*int(nbf,8) + !compute (ij|kl) + call cint2e_cart_optimizer(opt,atm,ncent,bas,nbas,env) +!$omp parallel private(i,j,k,l,m,n,o,p,shls,di,dj,dk,dl,buf, +!$omp& ddj,ddk,ddl,mm,extra_step) +!$omp& reduction(+:integral) +!$omp do + Do i=1,nbas + shls(1)=i-1 ; di=di_all(i) + Do j=1,i + shls(2)=j-1 ; dj=di_all(j) + + Do k=1,i-1 + shls(3)=k-1 ; dk=di_all(k) + + Do l=1,k + shls(4)=l-1 ; dl=di_all(l) + allocate(buf(di,dj,dk,dl)) + call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) + ! select case for writing into integral + nullify(ddj,ddk,ddl) + + if(i==j)then + ddj=>m + else + ddj=>dj + endif + + ddk=>dk + + if(k==l)then + ddl=>o + else + ddl=>dl + endif + + Do m=1,di + Do n=1,ddj + Do o=1,ddk + Do p=1,ddl + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ino,nno) + endif + enddo + enddo + enddo + enddo + + deallocate(buf) + + enddo!l + + enddo!k + + k=i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + shls(3)=k-1 ; dk=di_all(k) + Do l=1,j + shls(4)=l-1 ; dl=di_all(l) + + allocate(buf(di,dj,dk,dl)) + call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) + ! select case for writing into integral + extra_step=.false. + nullify(ddj,ddk,ddl) + + if(i==j)then + ddj=>m + else + ddj=>dj + endif + + if(k==l)then + ddk=>mm + ddl=>o + extra_step=.true. + else + + if(j==l)then + ddk=>mm + ddl=>dl + extra_step=.true. + else + ddk=>dk + ddl=>dl + endif + endif + + + Do m=1,di + mm=m-1 + Do n=1,ddj + Do o=1,ddk + Do p=1,ddl + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ino,nno) + endif + enddo + enddo + if(extra_step)then + o=m + Do p=1,n + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ino,nno) + endif + enddo + endif + enddo + enddo + + deallocate(buf) + enddo + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + enddo + enddo +!$omp end do +!$omp end parallel + + call CINTdel_optimizer(opt) + + write(*,*)'(i.|..) integrals done' + end subroutine two_elec_int_i + + subroutine select_ijkl(i,j,k,l,ca,nao,moci,itemp,value,ino,nno) + implicit none + integer :: i,j,k,l,p + integer :: ino,nno,moci,nao + real*4 :: itemp((nno+1-ino),nao,nao,nao) + real*4 :: value + real*8 :: ca(nao*moci) + + + if(i==j.and.i==k.and.i==l)then!iiii + Do p=ino,nno + itemp(p,i,i,i)=itemp(p,i,i,i)+value*ca(i+(p-1)*nao) + enddo + elseif(i==j.and.i==k.and.k/=l)then!iiil + Do p=ino,nno + itemp(p,i,i,l)=itemp(p,i,i,l)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,l,i)=itemp(p,i,l,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,l,i,i)=itemp(p,l,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,i,i)=itemp(p,i,i,i)+value*real(ca(l+(p-1)*nao),4) + enddo + elseif(i==j.and.i/=k.and.i==l)then!iiki + Do p=ino,nno + itemp(p,i,i,k)=itemp(p,i,i,k)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,k,i)=itemp(p,i,k,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,k,i,i)=itemp(p,k,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,i,i)=itemp(p,i,i,i)+value*real(ca(k+(p-1)*nao),4) + enddo + elseif(i/=j.and.i==k.and.i==l)then!ijii + Do p=ino,nno + itemp(p,i,i,j)=itemp(p,i,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,j,i)=itemp(p,i,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,j,i,i)=itemp(p,j,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,i,i)=itemp(p,i,i,i)+value*real(ca(j+(p-1)*nao),4) + enddo + elseif(i/=j.and.j==k.and.j==l)then!ijjj + Do p=ino,nno + itemp(p,j,j,i)=itemp(p,j,j,i)+value*real(ca(j+(p-1)*nao),4) + itemp(p,j,i,j)=itemp(p,j,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(p,i,j,j)=itemp(p,i,j,j)+value*real(ca(j+(p-1)*nao),4) + itemp(p,j,j,j)=itemp(p,j,j,j)+value*real(ca(i+(p-1)*nao),4) + enddo + elseif(i==j.and.i/=k.and.k==l)then!iikk + Do p=ino,nno + itemp(p,i,k,k)=itemp(p,i,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(p,k,i,i)=itemp(p,k,i,i)+value*real(ca(k+(p-1)*nao),4) + enddo + elseif(i==j.and.i/=k.and.k/=l)then!iikl + Do p=ino,nno + itemp(p,i,k,l)=itemp(p,i,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,l,k)=itemp(p,i,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(p,l,i,i)=itemp(p,l,i,i)+value*real(ca(k+(p-1)*nao),4) + itemp(p,k,i,i)=itemp(p,k,i,i)+value*real(ca(l+(p-1)*nao),4) + enddo + elseif(i/=j.and.i/=k.and.k==l)then!ijkk + Do p=ino,nno + itemp(p,j,k,k)=itemp(p,j,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,k,k)=itemp(p,i,k,k)+value*real(ca(j+(p-1)*nao),4) + itemp(p,k,i,j)=itemp(p,k,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(p,k,j,i)=itemp(p,k,j,i)+value*real(ca(k+(p-1)*nao),4) + enddo + elseif(i/=j.and.i==k.and.j==l)then!ijij or jiji + Do p=ino,nno + itemp(p,j,i,j)=itemp(p,j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,i,j)=itemp(p,i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(p,j,j,i)=itemp(p,j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,j,i)=itemp(p,i,j,i)+value*real(ca(j+(p-1)*nao),4) + enddo + elseif(i/=j.and.i==l.and.j==k)then!ijji or jiij + Do p=ino,nno + itemp(p,j,i,j)=itemp(p,j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,i,j)=itemp(p,i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(p,j,j,i)=itemp(p,j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,j,i)=itemp(p,i,j,i)+value*real(ca(j+(p-1)*nao),4) + enddo + else!ijkl ijil + Do p=ino,nno + itemp(p,j,k,l)=itemp(p,j,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(p,j,l,k)=itemp(p,j,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(p,i,k,l)=itemp(p,i,k,l)+value*real(ca(j+(p-1)*nao),4) + itemp(p,i,l,k)=itemp(p,i,l,k)+value*real(ca(j+(p-1)*nao),4) + itemp(p,l,i,j)=itemp(p,l,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(p,l,j,i)=itemp(p,l,j,i)+value*real(ca(k+(p-1)*nao),4) + itemp(p,k,i,j)=itemp(p,k,i,j)+value*real(ca(l+(p-1)*nao),4) + itemp(p,k,j,i)=itemp(p,k,j,i)+value*real(ca(l+(p-1)*nao),4) + enddo + endif + + + end subroutine select_ijkl + + subroutine rrpamat_full_direct(nci,ncent,no,nv,mxcnf,iconf, + . dak,dax,ed,apb,ambsqr,ca,nao,moci,nprims,epsi) + use commonlogicals + use omp_lib + implicit none + integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) + real*8, intent(in) :: dak,dax,ed(mxcnf) + real*4, intent(out) :: apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2) + integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,a,b,k,l,ii + real*4 ek,ej,sdot,ak,ax,de + real*8 :: ca(nao*moci) + integer :: nao, moci, nprims + integer*8 :: lin8 + real*4 :: start_time,end_time,start,finished + integer :: m,n,o,p + real*4, allocatable :: iatemp1(:,:),itemp(:,:,:) + real*4, allocatable :: iajtemp1(:) + real*4, allocatable :: K_iajb(:,:,:,:) + real*4, allocatable :: J_ijab(:,:,:,:) + real*8 :: ddot + integer :: canon + real*8 :: wtime + integer :: ino,nno,inv,nnv,step + integer*8 :: counter + real*8 :: epsi(moci) + + start_time=wtime() +! call cpu_time(start) +! Compute ( | ) integrals with lbcint + ! reduce the mo range to match the configuration space + ino=minval(iconf(1:nci,1)) + nno=maxval(iconf(1:nci,1)) + inv=minval(iconf(1:nci,2))-no + nnv=maxval(iconf(1:nci,2))-no + write(*,*)'MO integrals computed from occ.',ino,'to',nno + write(*,*)'and from unocc.',inv,'to',nnv + + + allocate(itemp(nao,nao,nao), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for itemp' + allocate(iatemp1(nao,nao), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for iatemp1' + allocate(iajtemp1(nao), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for iajtemp1' + + + if(abs(dax).lt.1.0d-6) then + allocate(K_iajb(ino:nno,inv:nnv,ino:nno,inv:nnv), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for K_iajb' +!$omp parallel private(i,p,j,a,b,itemp, +!$omp& iatemp1) +!$omp& shared(ca,nao,no) +!$omp do + Do i=ino, nno + !(i.|..) + call two_elec_int_i_direct(ncent,nprims,nao,itemp, + .ca,moci,i) + + Do a=inv, nnv + iatemp1=0.0 + Do p=1,nao + !(ia|..) + call sgemv('T',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp1(:,p),1) + enddo + + Do j=ino, i-1 + iajtemp1=0.0 + !(ia|j.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp1,1) + + Do b=inv, nnv + !(ia|jb) + K_iajb(i,a,j,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + K_iajb(j,b,i,a)=K_iajb(i,a,j,b) + enddo + enddo + + iajtemp1=0.0 + !(ia|i.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(i-1)*nao:nao+(i-1)*nao),4),1,0.0,iajtemp1,1) + Do b=inv, a-1 + !(ia|ib) + K_iajb(i,a,i,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + K_iajb(i,b,i,a)=K_iajb(i,a,i,b) + enddo + !(ia|ia) + K_iajb(i,a,i,a)=sdot(nao,iajtemp1,1, + . real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1) + enddo + enddo +!$omp end do +!$omp end parallel + else + + allocate(K_iajb(ino:nno,inv:nnv,ino:nno,inv:nnv), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for K_iajb' + allocate(J_ijab(ino:nno,ino:nno,inv:nnv,inv:nnv), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for J_ijab' + +!$omp parallel private(i,p,j,a,b,itemp, +!$omp& iatemp1,iajtemp1) +!$omp& shared(ca,nao,no) +!$omp do + Do i=ino, nno + !(i.|..) + call two_elec_int_i_direct(ncent,nprims,nao,itemp, + .ca,moci,i) + + Do a=inv, nnv + + iatemp1=0.0 + Do p=1,nao + !(ia|..) + call sgemv('T',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp1(:,p),1) + enddo + + Do j=ino, i-1 + iajtemp1=0.0 + !(ia|j.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp1,1) + + Do b=inv, nnv + !(ia|jb) + K_iajb(i,a,j,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + K_iajb(j,b,i,a)=K_iajb(i,a,j,b) + enddo + enddo + + iajtemp1=0.0 + !(ia|i.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(i-1)*nao:nao+(i-1)*nao),4),1,0.0,iajtemp1,1) + Do b=inv, a-1 + !(ia|ib) + K_iajb(i,a,i,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + K_iajb(i,b,i,a)=K_iajb(i,a,i,b) + enddo + !(ia|ia) + K_iajb(i,a,i,a)=sdot(nao,iajtemp1,1, + . real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1) + + + + iatemp1=0.0 + Do p=1,nao + !(i.|a.) + call sgemv('N',nao,nao,1.0,itemp(:,:,p),nao, + .real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1,0.0,iatemp1(:,p),1) + enddo + + Do j=ino, i-1 + iajtemp1=0.0 + !(ij|a.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(j-1)*nao:nao+(j-1)*nao),4),1,0.0,iajtemp1,1) + + Do b=inv, nnv + !(ij|ab) + J_ijab(i,j,a,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + J_ijab(j,i,b,a)=J_ijab(i,j,a,b) + enddo + enddo + + iajtemp1=0.0 + !(ii|a.) + call sgemv('T',nao,nao,1.0,iatemp1,nao, + .real(ca(1+(i-1)*nao:nao+(i-1)*nao),4),1,0.0,iajtemp1,1) + + Do b=inv, a-1 + !(ii|ab) + J_ijab(i,i,a,b)=sdot(nao,iajtemp1,1, + . real(ca(1+(b+no-1)*nao:nao+(b+no-1)*nao),4),1) + J_ijab(i,i,b,a)=J_ijab(i,i,a,b) + enddo + !(ii|aa) + J_ijab(i,i,a,a)=sdot(nao,iajtemp1,1, + . real(ca(1+(a+no-1)*nao:nao+(a+no-1)*nao),4),1) + + enddo + enddo +!$omp end do +!$omp end parallel + endif + + deallocate(itemp) + deallocate(iatemp1) + deallocate(iajtemp1) + + write(*,*)'MO ( | ) computed' +! call cpu_time(finished) + end_time=wtime() +! print '("cpu time = ",f12.2," minutes.")' +! . ,(finished-start)/60.0 + print '("time = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 + + + ak=real(dak) + ax=real(dax) +! calculate A+B and A-B + apb=0.0e0 + ambsqr=0.0e0 + +! if ax=0, A-B is diagonal and its off-diagonal elements do not need to be calculated + if(abs(dax).lt.1.0d-6) then + ij=0 +!$omp parallel private(ij,i,j,ek,de) +!$omp do + do i=1,nci + do j=1,i-1 + ij=lin(i,j) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(j,1),iconf(j,2)-no) ! ek = (ia|jb) + apb(ij)=2.0*ak*ek + ambsqr(ij)=0.0 + enddo ! j + de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + ij=lin(i,i) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(i,1),iconf(i,2)-no) + if(aresp.or.resp.or.optrota) then + ambsqr(ij)=de ! diagonal element of (A-B) + else + ambsqr(ij)=sqrt(de) ! diagonal element of (A-B)^0.5 + endif + apb(ij)=de+ak*ek*2.0 ! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + + deallocate(K_iajb) + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) ambsqr + close(53) + + else + + ij=0 + ! for now ambsqr=A+B and apb=A-B, since we need to take the sqrt of A-B (but want to save memory) +!$omp parallel private(ij,i,j,ek,ej) +!$omp do + do i=1,nci + do j=1,i-1 + ij=lin(i,j) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(j,1),iconf(j,2)-no) ! ek = (ia|jb) + ej=J_ijab(iconf(i,1),iconf(j,1),iconf(i,2)-no,iconf(j,2)-no)*ax ! ej = (ij|ab) + ambsqr(ij)=2.0*ak*ek + ek=K_iajb(iconf(i,1),iconf(j,2)-no,iconf(j,1),iconf(i,2)-no) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax + ambsqr(ij)=ambsqr(ij)-ax*ek-ej + apb(ij)=ax*ek-ej + enddo ! j + ij=lin(i,i) + ek=k_iajb(iconf(i,1),iconf(i,2)-no,iconf(i,1),iconf(i,2)-no) + ej=J_ijab(iconf(i,1),iconf(i,1),iconf(i,2)-no,iconf(i,2)-no)*ax + de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + apb(ij)=de+ax*ek-ej ! diagonal element of A-B + ambsqr(ij)=de-ax*ek+2.0*ak*ek-ej ! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + + deallocate(K_iajb) + deallocate(J_ijab) + + +! call prmat4(6,apb,nci,0,'A-B') +! call prmat4(6,ambsqr,nci,0,'A+B') + + + if(aresp.or.resp.or.optrota) then + write(*,*) ' calculating (A-B)^0.5 not necessary...' + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + close(53) + apb=ambsqr + else + open(unit=52,file='apbmat',form='unformatted',status='replace') + write(52) ambsqr + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)') + . float(nci)**2*float(nci)/4.d+8/60. + call smatpow(nci,apb) ! calculate sqrt(a-b), termed ambsqr + + ambsqr=apb + + rewind(52) + read(52) apb + close(52,status='delete') + close(53) + endif + endif ! GGA/hybrid case + + + return + + end subroutine rrpamat_full_direct + + subroutine two_elec_int_i_direct(ncent,nprims,nbf,integral, + .ca,moci,ii) + use stdacommon + use commonlibcint + use omp_lib + implicit none + integer :: i,j,k,l,ii + integer,target :: n,m,o,p,mm,nn + integer,pointer :: ddj,ddk,ddl,dddl + logical :: extra_step + integer :: ncent,nprims,nbf,canon + integer :: moci + real*8 :: ca(nbf*moci) + integer :: shls(4) + integer, target :: di,dj,dk,dl + integer :: orb_cart(1:10,1:10) + double precision, allocatable :: buf(:,:,:,:) + real*4 :: integral(nbf,nbf,nbf) + double precision :: norm_cart(1:10,1:10),thresh + + integer,external :: CINTcgto_cart + + integer*8 :: opt + + + + ! see Theoret. Chim. Acta 33 1-6 (1974) Diercksen + ! and Methods in computational chemistry Vol 1, 1987, page 257 + ! It uses integral symmetries + ! number of integrals nbf*(nbf+1)/2*(nbf*(nbf+1)/2+1)/2 + ! including vanishing ones + ! integral canonical index for (ij|kl): + ! i>=j k>=l + ! ij=i(i-1)/2+j kl=k(k-1)/2+l + ! ij>=kl + ! canonical_index=ij(ij-1)/2+kl + + ! To get the same order as in libcint + orb_cart(1,1)=1 + orb_cart(3,1)=1 + orb_cart(3,2)=2 + orb_cart(3,3)=3 + orb_cart(6,1)=1 + orb_cart(6,2)=4 + orb_cart(6,3)=5 + orb_cart(6,4)=2 + orb_cart(6,5)=6 + orb_cart(6,6)=3 + orb_cart(10,1)=1 + orb_cart(10,2)=4 + orb_cart(10,3)=5 + orb_cart(10,4)=6 + orb_cart(10,5)=10 + orb_cart(10,6)=8 + orb_cart(10,7)=2 + orb_cart(10,8)=7 + orb_cart(10,9)=9 + orb_cart(10,10)=3 + ! For cartesian basis libcint uses d and f not normalized + if(spherical)then + norm_cart=1.0 + else + norm_cart=1.0 + norm_cart(6,1)=1.0 + norm_cart(6,2)=dsqrt(3.0d0) + norm_cart(6,3)=dsqrt(3.0d0) + norm_cart(6,4)=1.0 + norm_cart(6,5)=dsqrt(3.0d0) + norm_cart(6,6)=1.0 + norm_cart(10,1)=1.0 + norm_cart(10,2)=dsqrt(5.0d0) + norm_cart(10,3)=dsqrt(5.0d0) + norm_cart(10,4)=dsqrt(5.0d0) + norm_cart(10,5)=dsqrt(15.0d0) + norm_cart(10,6)=dsqrt(5.0d0) + norm_cart(10,7)=1.0 + norm_cart(10,8)=dsqrt(5.0d0) + norm_cart(10,9)=dsqrt(5.0d0) + norm_cart(10,10)=1.0 + endif + integral=0.0d0 + thresh=1.0d-7 + + !compute (ij|kl) + call cint2e_cart_optimizer(opt,atm,ncent,bas,nbas,env) +!$omp parallel private(i,j,k,l,m,n,o,p,shls,di,dj,dk,dl,buf, +!$omp& ddj,ddk,ddl,mm,extra_step) +!$omp& reduction(+:integral) +!$omp do + Do i=1,nbas + shls(1)=i-1 ; di=di_all(i) + Do j=1,i + shls(2)=j-1 ; dj=di_all(j) + + Do k=1,i-1 + shls(3)=k-1 ; dk=di_all(k) + + Do l=1,k + shls(4)=l-1 ; dl=di_all(l) + allocate(buf(di,dj,dk,dl)) + !!!! this is the step that cost too much + call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) + ! select case for writing into integral + nullify(ddj,ddk,ddl) + + if(i==j)then + ddj=>m + else + ddj=>dj + endif + + ddk=>dk + + if(k==l)then + ddl=>o + else + ddl=>dl + endif + + Do m=1,di + Do n=1,ddj + Do o=1,ddk + Do p=1,ddl + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl_directA(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ii) + endif + enddo + enddo + enddo + enddo + + deallocate(buf) + + enddo!l + + enddo!k + + k=i!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + shls(3)=k-1 ; dk=di_all(k) + Do l=1,j + shls(4)=l-1 ; dl=di_all(l) + + allocate(buf(di,dj,dk,dl)) + call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) + ! select case for writing into integral + extra_step=.false. + nullify(ddj,ddk,ddl) + + if(i==j)then + ddj=>m + else + ddj=>dj + endif + + if(k==l)then + ddk=>mm + ddl=>o + extra_step=.true. + else + + if(j==l)then + ddk=>mm + ddl=>dl + extra_step=.true. + else + ddk=>dk + ddl=>dl + endif + endif + + + Do m=1,di + mm=m-1 + Do n=1,ddj + Do o=1,ddk + Do p=1,ddl + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl_direct(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ii) + endif + enddo + enddo + if(extra_step)then + o=m + Do p=1,n + if(dabs(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p))>thresh)then + call select_ijkl_directB(sum_di(i)+orb_cart(di,m) + .,sum_di(j)+orb_cart(dj,n) + .,sum_di(k)+orb_cart(dk,o) + .,sum_di(l)+orb_cart(dl,p),ca,nbf,moci,integral,real(buf(m,n,o,p) + .*norm_cart(di,m) + .*norm_cart(dj,n) + .*norm_cart(dk,o) + .*norm_cart(dl,p),4),ii) + endif + enddo + endif + enddo + enddo + + deallocate(buf) + enddo + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + enddo + enddo +!$omp end do +!$omp end parallel + + call CINTdel_optimizer(opt) + + + end subroutine two_elec_int_i_direct + + subroutine select_ijkl_direct(i,j,k,l,ca,nao,moci,itemp,value,p) + implicit none + integer :: i,j,k,l,p + integer :: moci,nao + real*4 :: itemp(nao,nao,nao) + real*4 :: value + real*8 :: ca(nao*moci) + + + if(i==j.and.i==k.and.i==l)then!iiii + + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(i+(p-1)*nao),4) + + elseif(i==j.and.i==k.and.k/=l)then!iiil + + itemp(i,i,l)=itemp(i,i,l)+value*real(ca(i+(p-1)*nao),4) + itemp(i,l,i)=itemp(i,l,i)+value*real(ca(i+(p-1)*nao),4) + itemp(l,i,i)=itemp(l,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(l+(p-1)*nao),4) + + elseif(i==j.and.i/=k.and.i==l)then!iiki + + itemp(i,i,k)=itemp(i,i,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,i)=itemp(i,k,i)+value*real(ca(i+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i/=j.and.i==k.and.i==l)then!ijii + + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(j,i,i)=itemp(j,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(j+(p-1)*nao),4) + + elseif(i/=j.and.j==k.and.j==l)then!ijjj + + itemp(j,j,i)=itemp(j,j,i)+value*real(ca(j+(p-1)*nao),4) + itemp(j,i,j)=itemp(j,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(i,j,j)=itemp(i,j,j)+value*real(ca(j+(p-1)*nao),4) + itemp(j,j,j)=itemp(j,j,j)+value*real(ca(i+(p-1)*nao),4) + + elseif(i==j.and.i/=k.and.k==l)then!iikk + + itemp(i,k,k)=itemp(i,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i==j.and.i/=k.and.k/=l)then!iikl + + itemp(i,k,l)=itemp(i,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(i,l,k)=itemp(i,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(l,i,i)=itemp(l,i,i)+value*real(ca(k+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(l+(p-1)*nao),4) + + elseif(i/=j.and.i/=k.and.k==l)then!ijkk + + itemp(j,k,k)=itemp(j,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,k)=itemp(i,k,k)+value*real(ca(j+(p-1)*nao),4) + itemp(k,i,j)=itemp(k,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(k,j,i)=itemp(k,j,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i/=j.and.i==k.and.j==l)then!ijij or jiji + + itemp(j,i,j)=itemp(j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(j,j,i)=itemp(j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(j+(p-1)*nao),4) + + elseif(i/=j.and.i==l.and.j==k)then!ijji or jiij + + itemp(j,i,j)=itemp(j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(j,j,i)=itemp(j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(j+(p-1)*nao),4) + + else!ijkl ijil + + itemp(j,k,l)=itemp(j,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(j,l,k)=itemp(j,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,l)=itemp(i,k,l)+value*real(ca(j+(p-1)*nao),4) + itemp(i,l,k)=itemp(i,l,k)+value*real(ca(j+(p-1)*nao),4) + itemp(l,i,j)=itemp(l,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(l,j,i)=itemp(l,j,i)+value*real(ca(k+(p-1)*nao),4) + itemp(k,i,j)=itemp(k,i,j)+value*real(ca(l+(p-1)*nao),4) + itemp(k,j,i)=itemp(k,j,i)+value*real(ca(l+(p-1)*nao),4) + + endif + + + end subroutine select_ijkl_direct + subroutine select_ijkl_directA(i,j,k,l,ca,nao,moci,itemp,value,p) + implicit none + integer :: i,j,k,l,p + integer :: moci,nao + real*4 :: itemp(nao,nao,nao) + real*4 :: value + real*8 :: ca(nao*moci) + + + if(i==j.and.i/=k.and.i==l)then!iiki + + itemp(i,i,k)=itemp(i,i,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,i)=itemp(i,k,i)+value*real(ca(i+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i==j.and.i/=k.and.k==l)then!iikk + + itemp(i,k,k)=itemp(i,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i==j.and.i/=k.and.k/=l)then!iikl + + itemp(i,k,l)=itemp(i,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(i,l,k)=itemp(i,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(l,i,i)=itemp(l,i,i)+value*real(ca(k+(p-1)*nao),4) + itemp(k,i,i)=itemp(k,i,i)+value*real(ca(l+(p-1)*nao),4) + + elseif(i/=j.and.i/=k.and.k==l)then!ijkk + + itemp(j,k,k)=itemp(j,k,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,k)=itemp(i,k,k)+value*real(ca(j+(p-1)*nao),4) + itemp(k,i,j)=itemp(k,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(k,j,i)=itemp(k,j,i)+value*real(ca(k+(p-1)*nao),4) + + elseif(i/=j.and.i==l.and.j==k)then!ijji or jiij + + itemp(j,i,j)=itemp(j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(j,j,i)=itemp(j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(j+(p-1)*nao),4) + + else!ijkl ijil + + itemp(j,k,l)=itemp(j,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(j,l,k)=itemp(j,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,l)=itemp(i,k,l)+value*real(ca(j+(p-1)*nao),4) + itemp(i,l,k)=itemp(i,l,k)+value*real(ca(j+(p-1)*nao),4) + itemp(l,i,j)=itemp(l,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(l,j,i)=itemp(l,j,i)+value*real(ca(k+(p-1)*nao),4) + itemp(k,i,j)=itemp(k,i,j)+value*real(ca(l+(p-1)*nao),4) + itemp(k,j,i)=itemp(k,j,i)+value*real(ca(l+(p-1)*nao),4) + + endif + + + end subroutine select_ijkl_directA + + subroutine select_ijkl_directB(i,j,k,l,ca,nao,moci,itemp,value,p) + implicit none + integer :: i,j,k,l,p + integer :: moci,nao + real*4 :: itemp(nao,nao,nao) + real*4 :: value + real*8 :: ca(nao*moci) + + + if(i==j.and.i==k.and.i==l)then!iiii + + itemp(i,i,i)=itemp(i,i,i)+value*ca(i+(p-1)*nao) + + elseif(i==j.and.i==k.and.k/=l)then!iiil + + itemp(i,i,l)=itemp(i,i,l)+value*real(ca(i+(p-1)*nao),4) + itemp(i,l,i)=itemp(i,l,i)+value*real(ca(i+(p-1)*nao),4) + itemp(l,i,i)=itemp(l,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(l+(p-1)*nao),4) + + elseif(i/=j.and.i==k.and.i==l)then!ijii + + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(j,i,i)=itemp(j,i,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,i)=itemp(i,i,i)+value*real(ca(j+(p-1)*nao),4) + + elseif(i/=j.and.i==k.and.j==l)then!ijij or jiji + + itemp(j,i,j)=itemp(j,i,j)+value*real(ca(i+(p-1)*nao),4) + itemp(i,i,j)=itemp(i,i,j)+value*real(ca(j+(p-1)*nao),4) + itemp(j,j,i)=itemp(j,j,i)+value*real(ca(i+(p-1)*nao),4) + itemp(i,j,i)=itemp(i,j,i)+value*real(ca(j+(p-1)*nao),4) + + else!ijkl ijil + + itemp(j,k,l)=itemp(j,k,l)+value*real(ca(i+(p-1)*nao),4) + itemp(j,l,k)=itemp(j,l,k)+value*real(ca(i+(p-1)*nao),4) + itemp(i,k,l)=itemp(i,k,l)+value*real(ca(j+(p-1)*nao),4) + itemp(i,l,k)=itemp(i,l,k)+value*real(ca(j+(p-1)*nao),4) + itemp(l,i,j)=itemp(l,i,j)+value*real(ca(k+(p-1)*nao),4) + itemp(l,j,i)=itemp(l,j,i)+value*real(ca(k+(p-1)*nao),4) + itemp(k,i,j)=itemp(k,i,j)+value*real(ca(l+(p-1)*nao),4) + itemp(k,j,i)=itemp(k,j,i)+value*real(ca(l+(p-1)*nao),4) + + endif + + + end subroutine select_ijkl_directB diff --git a/g2molden/Makefile b/g2molden/Makefile old mode 100644 new mode 100755 diff --git a/g2molden/main.f b/g2molden/main.f old mode 100644 new mode 100755 diff --git a/g2molden/stringmod.f90 b/g2molden/stringmod.f90 old mode 100644 new mode 100755 diff --git a/g_spec/Makefile b/g_spec/Makefile old mode 100644 new mode 100755 diff --git a/g_spec/g_spec.f b/g_spec/g_spec.f old mode 100644 new mode 100755 diff --git a/header.f b/header.f index 6c1c3e3..653220d 100755 --- a/header.f +++ b/header.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . -! +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ subroutine header(aarg,iarg) IMPLICIT REAL*8(A-H,O-Z) character*(*) aarg @@ -30,7 +31,6 @@ subroutine header(aarg,iarg) 130 format(/) 120 format(20x,a,5x,i4) 121 format(20x,a) - + return end - diff --git a/intpack.f90 b/intpack.f90 index 7f892f8..25b2966 100755 --- a/intpack.f90 +++ b/intpack.f90 @@ -1,19 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ ! ! Adapted from xtb4stda by MdeW !! ------------------------------------------------------------------------ @@ -21,7 +23,7 @@ module intpack use iso_fortran_env, only : wp => real64 contains -! propa split in propa0 and propa1 to avoid computing several time the same things and neglect if efact below thr +! propa split in propa0 and propa1 to avoid computing several time the same things and neglect if efact below thr subroutine propa0(aname,c,va,nt,ij,kl,efact) use stdacommon implicit real(wp)(a-h,o-z) @@ -31,10 +33,10 @@ subroutine propa0(aname,c,va,nt,ij,kl,efact) ! local common /abfunc/ ra(3),rb(3),ga,gb,ia,ib,gama, & & d(3),dd(84),e(3),aa(20),bb(20),a(3),b(3) - dimension v(nt),val(nt) - + dimension v(nt),val(nt) + a(1:3)=eta(ij,1:3) - b(1:3)=eta(kl,1:3) + b(1:3)=eta(kl,1:3) etaij4=eta(ij,4) etakl4=eta(kl,4) iff1=dint(eta(ij,5)) @@ -80,8 +82,8 @@ subroutine propa1(aname,c,va,nt,ij,kl,efact) ! local common /abfunc/ ra(3),rb(3),ga,gb,ia,ib,gama, & & d(3),dd(84),e(3),aa(20),bb(20),a(3),b(3) - common/ prptyp / mprp - dimension v(nt),val(nt) + common/ prptyp / mprp + dimension v(nt),val(nt) integer,parameter :: lin(84) = & & (/0,1,0,0,2,0,0,1,1,0,3,0,0,2,2,1,0,1,0,1,4,0,0,3,3,1,0,1,0,2,2,0, & & 2,1,1,5,0,0,3,3,2,2,0,0,4,4,1,0,0,1,1,3,1,2,2,1,6,0,0,3,3,0,5,5, & @@ -94,7 +96,7 @@ subroutine propa1(aname,c,va,nt,ij,kl,efact) & (/0,0,0,1,0,0,2,0,1,1,0,0,3,0,1,0,1,2,2,1,0,0,4,0,1,0,1,3,3,0,2,2, & & 1,1,2,0,0,5,0,2,0,3,2,3,0,1,0,1,4,4,3,1,1,1,2,2,0,0,6,0,3,3,0,1, & & 5,5,1,0,0,2,4,4,0,2,1,2,2,3,1,3,1,1,4,2/) - + iff1=ia iff2=ib val = 0 @@ -281,9 +283,9 @@ subroutine propa1(aname,c,va,nt,ij,kl,efact) return !cha end subroutine propa1 - - - + + + !======================================================================= ! cartesian gaussian functions (6d,10f...) ! iff : @@ -306,7 +308,7 @@ subroutine propa(aname,c,va,nt,ij,kl) real(wp) a(3),b(3),c(3),va(nt) ! local common /abfunc/ ra(3),rb(3),ga,gb,ia,ib - common/ prptyp / mprp + common/ prptyp / mprp dimension d(3),dd(84),v(nt),val(nt) !,v(3),val(3) dimension e(3),aa(20),bb(20) integer,parameter :: lin(84) = & @@ -321,9 +323,9 @@ subroutine propa(aname,c,va,nt,ij,kl) & (/0,0,0,1,0,0,2,0,1,1,0,0,3,0,1,0,1,2,2,1,0,0,4,0,1,0,1,3,3,0,2,2, & & 1,1,2,0,0,5,0,2,0,3,2,3,0,1,0,1,4,4,3,1,1,1,2,2,0,0,6,0,3,3,0,1, & & 5,5,1,0,0,2,4,4,0,2,1,2,2,3,1,3,1,1,4,2/) - + a(1:3)=eta(ij,1:3) - b(1:3)=eta(kl,1:3) + b(1:3)=eta(kl,1:3) etaij4=eta(ij,4) etakl4=eta(kl,4) iff1=dint(eta(ij,5)) @@ -579,7 +581,7 @@ pure subroutine rhftce(cfs,a,e,iff) integer,intent(in) :: iff real(wp), intent(in) :: a(*),e(*) real(wp), intent(inout) :: cfs(*) - real(wp), parameter :: c2 = 2.0d0 + real(wp), parameter :: c2 = 2.0d0 real(wp), parameter :: c3 = 3.0d0 real(wp) :: aex,aey,aez ! ---- e = center of product function, a = center of single gaussian @@ -588,7 +590,7 @@ pure subroutine rhftce(cfs,a,e,iff) aez = e(3)-a(3) select case(iff) - case(1) + case(1) continue case(2) cfs(1)=aex*cfs(2) @@ -1252,7 +1254,7 @@ subroutine opam(l,m,n,gama,v,d) do i=1,l s3=s3+g(i)*ovl(i) enddo - call bip(my(ia),my(ib),pa(2),pb(2)) + call bip(my(ia),my(ib),pa(2),pb(2)) m=my(ia)+my(ib) m1=m-1 do i=1,m1 @@ -1262,7 +1264,7 @@ subroutine opam(l,m,n,gama,v,d) do i=1,m s6 =s6+g(i)*ovl(i) enddo - call bip(nz(ia),nz(ib),pa(3),pb(3)) + call bip(nz(ia),nz(ib),pa(3),pb(3)) n=nz(ia)+nz(ib) n1=n-1 do i=1,n1 @@ -1281,7 +1283,7 @@ subroutine opam(l,m,n,gama,v,d) return end subroutine opam -subroutine bip(la,lb,a,b) +subroutine bip(la,lb,a,b) implicit real(wp)(a-h,o-z) common /abfunc/ ra(3),rb(3),ga,gb,ia,ib common /gf/f(7),g(8) @@ -1396,7 +1398,7 @@ subroutine bip(la,lb,a,b) f(3)=c3*a g(1)=-gb2*(a**3)*b g(2)=-gb2*a*a*(a+c3*b) - g(3)=-c6*a*gb*(a+b) + g(3)=-c6*a*gb*(a+b) g(4)=-gb2*(c3*a+b) return ! f - p @@ -1425,7 +1427,7 @@ subroutine bip(la,lb,a,b) return ! f - f 34 f(1)=(a*b)**3 - f(2)=c3*((a*b)**2)*(a+b) + f(2)=c3*((a*b)**2)*(a+b) f(3)=c3*a*b*(a*(a+c3*b)+b*b) f(4)=a*a*(a+9.d0*b)+b*b*(b+9.d0*a) f(5)=c3*(a*(a+c3*b)+b*b) diff --git a/intslvm.f b/intslvm.f index 7e758ce..8d237b9 100755 --- a/intslvm.f +++ b/intslvm.f @@ -1,26 +1,27 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc - subroutine intslvm(ncent,nmo,nbf,nprims) + subroutine intslvm(ncent,nmo,nbf,nprims) use stdacommon use intpack - implicit real*8(a-h,o-z) + implicit real*8(a-h,o-z) real*8, allocatable ::r0(:) real*8, allocatable ::r1(:) @@ -33,7 +34,7 @@ subroutine intslvm(ncent,nmo,nbf,nprims) real*8, allocatable ::r8(:) real*8, allocatable ::r9(:) integer*8 memneed,mp,nrecordlen,k,i1,lin8 - common/ prptyp / mprp + common/ prptyp / mprp common /cema / cen(3),xmolw common /amass / ams(107) @@ -41,26 +42,26 @@ subroutine intslvm(ncent,nmo,nbf,nprims) call header('A O I N T E G R A L S',0) -c overlap based neglect prim prefactor threshold +c overlap based neglect prim prefactor threshold thr=1.d-7 c center of nuclear charge and molar mass - sumwx=0.d0 - sumwy=0.d0 - sumwz=0.d0 + sumwx=0.d0 + sumwy=0.d0 + sumwz=0.d0 sumw=0.0d0 xmolw=0.0d0 - do 10 i=1,ncent - atmass=co(i,4) - sumw=sumw+atmass - sumwx=sumwx+atmass*co(i,1) - sumwy=sumwy+atmass*co(i,2) - sumwz=sumwz+atmass*co(i,3) + do 10 i=1,ncent + atmass=co(i,4) + sumw=sumw+atmass + sumwx=sumwx+atmass*co(i,1) + sumwy=sumwy+atmass*co(i,2) + sumwz=sumwz+atmass*co(i,3) xmolw=xmolw+ams(idint(atmass)) - 10 continue + 10 continue cen(1)=sumwx/sumw - cen(2)=sumwy/sumw - cen(3)=sumwz/sumw + cen(2)=sumwy/sumw + cen(3)=sumwz/sumw if(nbf.eq.0) then do i=1,nprims @@ -73,20 +74,20 @@ subroutine intslvm(ncent,nmo,nbf,nprims) iaoat(ipao(i))=ii enddo nao=nbf - endif + endif mp=nao mp=mp*(mp+1)/2 memneed=10*8*mp call byteout('AO int data',memneed) - allocate(r1(mp),r2(mp),r3(mp), - . r4(mp),r5(mp),r6(mp), + allocate(r1(mp),r2(mp),r3(mp), + . r4(mp),r5(mp),r6(mp), . r7(mp),r8(mp),r9(mp),r0(mp), . stat=ierr) if(ierr.ne.0)stop 'allocation failed in intslvm for AOs' - open(unit=40,file='sint', form='unformatted',status='replace') + open(unit=40,file='sint', form='unformatted',status='replace') open(unit=31,file='xlint',form='unformatted',status='replace') open(unit=32,file='ylint',form='unformatted',status='replace') open(unit=33,file='zlint',form='unformatted',status='replace') @@ -100,13 +101,13 @@ subroutine intslvm(ncent,nmo,nbf,nprims) ccccccccccccccccccccccccccccccccccccccccccccccccccc c -c overlap and dipole +c overlap and dipole c ccccccccccccccccccccccccccccccccccccccccccccccccccc - + point=0.0d0 - r0=0.0d0 + r0=0.0d0 r1=0.0d0 r2=0.0d0 r3=0.0d0 @@ -124,53 +125,53 @@ subroutine intslvm(ncent,nmo,nbf,nprims) iaj=ipao(j) iaa=max(iaj,iai) iii=min(iaj,iai) - ij=iii+iaa*(iaa-1)/2 + ij=iii+iaa*(iaa-1)/2 cf=c1*cxip(j)*2.0d0 -c prefactor +c prefactor call propa0(opad1,point,v,1,i,j,s) if(s.gt.thr)then mprp=0 -c S +c S call propa1(opad1,point,v,1,i,j,s) r0(ij)=r0(ij)+v(1)*cf -c R +c R call propa1(opab1,point,v,3,i,j,s) - r1(ij)=r1(ij)+v(1)*cf - r2(ij)=r2(ij)+v(2)*cf - r3(ij)=r3(ij)+v(3)*cf -C L + r1(ij)=r1(ij)+v(1)*cf + r2(ij)=r2(ij)+v(2)*cf + r3(ij)=r3(ij)+v(3)*cf +C L mprp=16 call propa1(opam,point,v,3,i,j,s) ! note that s is changed by propa1 in this very case - r4(ij)=r4(ij)+v(1)*cf - r5(ij)=r5(ij)+v(2)*cf - r6(ij)=r6(ij)+v(3)*cf -C V - mprp=0 + r4(ij)=r4(ij)+v(1)*cf + r5(ij)=r5(ij)+v(2)*cf + r6(ij)=r6(ij)+v(3)*cf +C V + mprp=0 call velo(i,j,v) - r7(ij)=r7(ij)-v(1)*cf - r8(ij)=r8(ij)-v(2)*cf - r9(ij)=r9(ij)-v(3)*cf + r7(ij)=r7(ij)-v(1)*cf + r8(ij)=r8(ij)-v(2)*cf + r9(ij)=r9(ij)-v(3)*cf endif enddo mprp=0 call propa0(opad1,point,v,1,i,i,s) call propa1(opad1,point,v,1,i,i,s) - ij=iai+iai*(iai-1)/2 + ij=iai+iai*(iai-1)/2 cf=c1*c1 - r0(ij)=r0(ij)+v(1)*cf + r0(ij)=r0(ij)+v(1)*cf call propa1(opab1,point,v,3,i,i,s) - r1(ij)=r1(ij)+v(1)*cf - r2(ij)=r2(ij)+v(2)*cf - r3(ij)=r3(ij)+v(3)*cf + r1(ij)=r1(ij)+v(1)*cf + r2(ij)=r2(ij)+v(2)*cf + r3(ij)=r3(ij)+v(3)*cf enddo - + ij=0 do i=1,nao do j=1,i-1 ij=lin8(i,j) - r0(ij)=r0(ij)*0.50d0 + r0(ij)=r0(ij)*0.50d0 r1(ij)=r1(ij)*0.50d0 r2(ij)=r2(ij)*0.50d0 r3(ij)=r3(ij)*0.50d0 @@ -180,11 +181,11 @@ subroutine intslvm(ncent,nmo,nbf,nprims) r7(ij)=r7(ij)*0.50d0 r8(ij)=r8(ij)*0.50d0 r9(ij)=r9(ij)*0.50d0 - enddo + enddo enddo write(40)r0 - close(40) + close(40) write(31)r1 write(32)r2 write(33)r3 @@ -203,9 +204,129 @@ subroutine intslvm(ncent,nmo,nbf,nprims) close(37) close(38) close(39) - + deallocate(r0,r1,r2,r3,r4,r5,r6,r7,r8,r9) write(*,*) 'done.' end +!******************************************************************************* + subroutine intslvm2(ncent,nmo,nbf,nprims) + use stdacommon + use commonlogicals + use intpack + implicit real*8(a-h,o-z) + real*8, allocatable ::r4(:) + real*8, allocatable ::r5(:) + real*8, allocatable ::r6(:) + integer*8 memneed,mp,nrecordlen,k,i1,lin8 + common/ prptyp / mprp + common /cema / cen(3),xmolw + common /amass / ams(107) + + dimension v(6),point(3) + + call header('A O I N T E G R A L S',0) + +c overlap based neglect prim prefactor threshold + thr=1.d-7 + +c center of nuclear charge and molar mass + sumwx=0.d0 + sumwy=0.d0 + sumwz=0.d0 + sumw=0.0d0 + xmolw=0.0d0 + do 10 i=1,ncent + atmass=co(i,4) + sumw=sumw+atmass + sumwx=sumwx+atmass*co(i,1) + sumwy=sumwy+atmass*co(i,2) + sumwz=sumwz+atmass*co(i,3) + xmolw=xmolw+ams(idint(atmass)) + 10 continue + cen(1)=sumwx/sumw + cen(2)=sumwy/sumw + cen(3)=sumwz/sumw + + if(nbf.eq.0) then + do i=1,nprims + iaoat(i)=ipat(i) + enddo + nao=nprims + else + do i=1,nprims + ii=ipat(i) + iaoat(ipao(i))=ii + enddo + nao=nbf + endif + + mp=nao + mp=mp*(mp+1)/2 + + memneed=3*8*mp + if(multipole.eqv..true.)then + memneed=memneed+6*8*mp + endif + call byteout('AO int data',memneed) + + allocate(r4(mp),r5(mp),r6(mp),stat=ierr) + if(ierr.ne.0)stop 'allocation failed in intslvm for AOs' + open(unit=34,file='xmint',form='unformatted',status='replace') + open(unit=35,file='ymint',form='unformatted',status='replace') + open(unit=36,file='zmint',form='unformatted',status='replace') +ccccccccccccccccccccccccccccccccccccccccccccccccccc +c +c overlap and dipole +c +ccccccccccccccccccccccccccccccccccccccccccccccccccc + + point=0.0d0 + r4=0.0d0 + r5=0.0d0 + r6=0.0d0 + + do i=1,nprims + iai=ipao(i) + c1=cxip(i) + do j=1,i-1 + iaj=ipao(j) + iaa=max(iaj,iai) + iii=min(iaj,iai) + ij=iii+iaa*(iaa-1)/2 + cf=c1*cxip(j)*2.0d0 +c prefactor + call propa0(opad1,point,v,1,i,j,s) + if(s.gt.thr)then +C L + mprp=16 + call propa1(opam,point,v,3,i,j,s) + ! note that s is changed by propa1 in this very case + r4(ij)=r4(ij)+v(1)*cf + r5(ij)=r5(ij)+v(2)*cf + r6(ij)=r6(ij)+v(3)*cf + endif + enddo + mprp=0 + enddo + + ij=0 + do i=1,nao + do j=1,i-1 + ij=lin8(i,j) + r4(ij)=r4(ij)*0.50d0 + r5(ij)=r5(ij)*0.50d0 + r6(ij)=r6(ij)*0.50d0 + enddo + enddo + + write(34)r4 + write(35)r5 + write(36)r6 + close(34) + close(35) + close(36) + deallocate(r4,r5,r6) + write(*,*) 'done.' + end diff --git a/io.f b/io.f index 42818a1..f86663c 100755 --- a/io.f +++ b/io.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ *********************************************************************** subroutine mwrite(n,iwo,v,irec) @@ -31,4 +32,3 @@ subroutine mread(n,iwo,v,irec) read(iwo,rec=irec) v return end - diff --git a/libcint.f b/libcint.f new file mode 100755 index 0000000..93caa54 --- /dev/null +++ b/libcint.f @@ -0,0 +1,904 @@ +! This file is part of std2. +! +! Copyright (C) 2025 Marc de Wergifosse +! +! std2 is free software: you can redistribute it and/or modify it under +! the terms of the GNU Lesser General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! std2 is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ + subroutine overlap(ncent,nprims,nbf,overlap_AO) + use stdacommon + use commonlibcint + use omp_lib + implicit none + integer :: i,j,k,l,n,m + integer :: ncent,nprims,nbf + integer, allocatable :: info(:) + double precision, parameter :: PI=4.D0*DATAN(1.D0) + + integer :: shls(2), di,dj,dk,dl, orb_cart(1:10,1:10) + double precision, allocatable :: buf(:,:) + double precision :: overlap_AO(nbf*(nbf+1)/2) + double precision :: norm_cart(1:10,1:10) + + integer,external :: CINTcgto_cart + + integer*8 ::lin8 + +! real*8 :: sumwx,sumwy,sumwz,sumw,atmass +! real*8 :: cen,xmolw,ams +! common /cema / cen(3),xmolw +! common /amass / ams(107) + + allocate(atm(1:6,1:ncent)) + j=21 ! variables are defined below 20 note that the array in libcint starts with 0 + Do i=1, ncent + atm(1,i)=int(co(i,4)) ! atom charge + atm(2,i)=j ! "zero" for list of atoms in env + j=j+3 + enddo + n_env=j + + allocate(info(nprims)) !indicate the number of primitives in each contractions + ! Counting the number of primitives without those by symmetry in each contractions + nbas=1 + info=1 + j=1 + Do i=2,nprims + if(nbas/=i)then + if(ipty(i)==1.or.ipty(i)==2.or.ipty(i)==5.or.ipty(i)==11)then ! remove those by symmetry + if(ipao(i)==ipao(i-1))then + info(nbas)=info(nbas)+1 + info(i)=0 + else ! jump to the next AO + nbas=i + j=j+1 + endif + else ! other than x, xx, xxx are zero, no need to count them + info(i)=0 + endif + endif + enddo + + nbas=j + allocate(bas(1:8,1:nbas)) + + j=0 + n_env=n_env+1 + Do i=1, nprims + if(info(i)/=0)then + bas(1,j+1)=ipat(i)-1 ! atom id starts with zero + if(ipty(i)==1)bas(2,j+1)=0 ! orbital quantum number l + if(ipty(i)==2)bas(2,j+1)=1 + if(ipty(i)==5)bas(2,j+1)=2 + if(ipty(i)==11)bas(2,j+1)=3 + bas(3,j+1)=info(i) ! number of primitives in each contraction + bas(4,j+1)=1 ! one contraction, no more + bas(6,j+1)=n_env-1 ! "zero" for list of exponents in env + bas(7,j+1)=n_env+info(i)-1 ! "zero" for list of contraction coefficients in env + n_env=n_env+info(i)*2 + j=j+1 + endif + enddo + + allocate(env(1:n_env)) ! start with 20 because variables are passed with values <= + !env(1) threshold on integrals + !env(1)=7.0d0 +c center of nuclear charge and molar mass +! sumwx=0.d0 +! sumwy=0.d0 +! sumwz=0.d0 +! sumw=0.0d0 +! xmolw=0.0d0 +! do i=1,ncent +! atmass=co(i,4) +! sumw=sumw+atmass +! sumwx=sumwx+atmass*co(i,1) +! sumwy=sumwy+atmass*co(i,2) +! sumwz=sumwz+atmass*co(i,3) +! xmolw=xmolw+ams(idint(atmass)) +! enddo +! cen(1)=sumwx/sumw +! cen(2)=sumwy/sumw +! cen(3)=sumwz/sumw + env(2:4)=0.0 ! env(PTR_COMMON_ORIG:PTR_COMMON_ORIG+2) + + + ! copy all data in env vector + j=21 + Do i=1,ncent + env(j+1)=co(i,1) + env(j+2)=co(i,2) + env(j+3)=co(i,3) + j=j+3 + enddo + + j=j+1 + n=1 + Do i=1,nprims + if(info(i)/=0)then + Do k=0,info(i)-1 + env(j)=exip(i+k) + j=j+1 + enddo + Do k=0,info(i)-1 + If(ipty(i)==1)then + env(j)=cxip(i+k)*dsqrt(PI*4.0d0) ! different normalization in libcint + endif + If(ipty(i)==2)then + env(j)=cxip(i+k)*dsqrt(PI*4.0d0/3.0d0) + endif + If(ipty(i)==5)then + env(j)=cxip(i+k) + endif + If(ipty(i)==11)then + env(j)=cxip(i+k) + endif + j=j+1 + enddo + n=n+1 + endif + enddo + + allocate(di_all(nbas),sum_di(nbas)) + sum_di=0 + Do i=1, nbas + di_all(i)=CINTcgto_cart(i-1,bas) + if(i. +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ subroutine blow(nbf,F,X) implicit none real*8 F(nbf*(nbf+1)/2),X(nbf,nbf) @@ -31,4 +32,3 @@ subroutine blow(nbf,F,X) enddo end - diff --git a/linear_response.f b/linear_response.f index 95b1b86..0975e26 100755 --- a/linear_response.f +++ b/linear_response.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2020 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ! written by Marc de Wegifosse 2017-2020 @@ -2871,14 +2872,14 @@ subroutine lresp_ESAbis(nci,iconf,maxconf,xl,yl,zl,moci, mu(:,2)=yl(:) mu(:,3)=zl(:) - write(*,*) - write(*,*)'==================================================== - .==================' - write(*,*)' Welcome in nonlinear response sTD-DFT - . program' - write(*,*)'==================================================== - .==================' - write(*,*) +! write(*,*) +! write(*,*)'==================================================== +! .==================' +! write(*,*)' Welcome in nonlinear response sTD-DFT +! . program' +! write(*,*)'==================================================== +! .==================' +! write(*,*) ! ! Genarating a list of indexes used in A and B formula to save a great bunch of time @@ -2927,10 +2928,10 @@ subroutine lresp_ESAbis(nci,iconf,maxconf,xl,yl,zl,moci, !Do i=1,counter_B !write(*,*)i,B_list(i,1:3) !enddo - call cpu_time(end_time) - print '("A & B indexes list Time = ",f12.2," minutes.")' - . ,(end_time-start_time)/60.0 - write(*,*) +! call cpu_time(end_time) +! print '("A & B indexes list Time = ",f12.2," minutes.")' +! . ,(end_time-start_time)/60.0 +! write(*,*) mu_s2s=0.0 Do jj=1,nroot Do ii=1, nroot @@ -2966,7 +2967,7 @@ subroutine lresp_ESAbis(nci,iconf,maxconf,xl,yl,zl,moci, enddo !$omp end do !$omp end parallel - mu_s2s(ii,jj,ix)=-(A1+A2-B1-B2)/2.0 + mu_s2s(ii,jj,ix)=-(A1+A2-B1-B2)/2.0d0 !write(*,*) ix, mu_s2s(ii,jj,ix) enddo !else @@ -2975,24 +2976,24 @@ subroutine lresp_ESAbis(nci,iconf,maxconf,xl,yl,zl,moci, !mu_s2s(ii,jj,ix)=0.0 !endif enddo - write(*,*) - write(*,*) 'State to state eV fL' +! write(*,*) +! write(*,*) 'State to state eV fL' Do ii=1, nroot osc_strength=2.0/3.0*(eci(ii)-eci(jj))* .(mu_s2s(ii,jj,1)**2.0+mu_s2s(ii,jj,2)**2.0+mu_s2s(ii,jj,3)**2.0) - write(*,11) jj, ii, (eci(ii)-eci(jj))*27.21139, - .osc_strength - enddo - write(*,*) - write(*,*) - enddo - write(*,*)'==================================================== - .==================' - write(*,*)' end of nonlinear response sTD-DFT - . program' - write(*,*)'==================================================== - .==================' - write(*,*) +! write(*,11) jj, ii, (eci(ii)-eci(jj))*27.21139, +! .osc_strength + enddo +! write(*,*) +! write(*,*) + enddo +! write(*,*)'==================================================== +! .==================' +! write(*,*)' end of nonlinear response sTD-DFT +! . program' +! write(*,*)'==================================================== +! .==================' +! write(*,*) 11 format(i6,i9,f9.3,f11.4) 12 format(a1,i3,a17,i3,a1) @@ -3105,7 +3106,7 @@ subroutine hyperpol_sos(nroot,nci,eci,Xci,Yci,xl,yl,zl,moci, .,-45.56335/(freq(iroot)*2.0),';',45.56335/freq(iroot),',' .,45.56335/freq(iroot),')' write(*,*) - call PrintBeta(beta) + call PrintBeta(beta,5555) write(*,*) '_____________________________________________ .________' enddo @@ -3138,10 +3139,12 @@ subroutine tpa_sos(nroot,nci,eci,Xci,Yci,xl,yl,zl,moci, real*4 ::freq(num_freq+1) real*4 ::Xci(nci,nroot), Yci(nci,nroot),eci(nci) - real*8 ::sigma(3,3) + real*8 ::sigma(3,3),sigma_f,sigma_g,sigma_h real*8 ::mu_s(nroot,3) real*8 ::mu_s2s(nroot,nroot,3) + if(nroot. +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ program acis_prog use stdacommon ! mostly input and primitive data use kshiftcommon ! kshiftvariables @@ -33,6 +34,10 @@ program acis_prog integer imethod,inpchk,mform,nvec logical molden,da,chkinp,xtbinp integer, dimension(8) :: datetimevals + !!! libcint + double precision, allocatable :: overlap_AO(:),mu(:,:),mag(:,:) + double precision, allocatable :: velo(:,:),quadrupole(:,:) + real*8,allocatable :: help(:),help1(:),help2(:),help3(:) call date_and_time(VALUES=datetimevals) print '(I0,"-",I0,"-",I0,1X,I0,":",I0,":",I0,".",I3)', @@ -41,22 +46,37 @@ program acis_prog write(*,'(// . 17x,''*********************************************'')') write(*,'(17x,''* *'')') - write(*,'(17x,''* s T D A *'')') + write(*,'(17x,''* s t d 2 *'')') write(*,'(17x,''* *'')') write(*,'(17x,''* S. Grimme *'')') write(*,'(17x,''* Mulliken Center for Theoretical Chemistry *'')') write(*,'(17x,''* Universitaet Bonn *'')') - write(*,'(17x,''* Version 1.6.3 *'')') - write(*,'(17x,''* Fri Aug 26 14:28:49 CEST 2022 *'')') + write(*,'(17x,''* *'')') + write(*,'(17x,''* M. de Wergifosse *'')') + write(*,'(17x,''* MOST/IMCN *'')') + write(*,'(17x,''* Universite Catholique de Louvain *'')') + write(*,'(17x,''* *'')') + write(*,'(17x,''* Version 2.0 *'')') + write(*,'(17x,''* Tue 07 Jan 2025 09:09:41 AM CET *'')') write(*,'(17x,''*********************************************'')') write(*,*) - write(*,'('' Please cite as:'')') + write(*,'('' Please cite:'')') + write(*,*) + write(*,'('' For sTDA and sTD-DFT,'')') write(*,'('' S. Grimme, J. Chem. Phys. 138 (2013) 244104'')') - write(*,'('' M. de Wergifosse, S. Grimme, J. Phys. Chem A'')') - write(*,'('' 125 (2021) 18 3841-3851'')') + write(*,'('' C. Bannwarth, S. Grimme Comput. Theor. Chem. + . 1040–1041 (2014) 45-53'')') + write(*,'('' M. de Wergifosse, S. Grimme, J. Phys. Chem A + . 125 (2021) 18 3841-3851'')') + write(*,*) + write(*,'('' For XsTDA and XsTD-DFT,'')') + write(*,'('' M. de Wergifosse, S. Grimme, J. Chem. Phys. + . 160 (2024) 204110'')') + write(*,'('' M. de Wergifosse, J. Phys. Chem. Lett. 15 + . (2024) 51 12628–12635'')') write(*,*) write(*,'('' With contributions from:'')') - write(*,'('' C. Bannwarth, P. Shushkov, M. de Wergifosse'')') + write(*,'('' C. Bannwarth, P. Shushkov, P. Beaujean'')') write(*,*) write(*,'(a,a)')'===============================================', . '=======================' @@ -109,7 +129,14 @@ program acis_prog rw=.false. rw_dual=.false. pt_off=.false. - optrot=.false. + optrota=.false. + XsTD=.false. + cint=.true. + RSH_flag=.false. + SOS_2PA=.false. + Xcore=.false. + FULL2PA=.false. + multipole=.false. ! check for input file inquire(file='.STDA',exist=da) @@ -218,6 +245,25 @@ program acis_prog num_trans=int(xx(1)) endif + if(index(dummy,'-SOS2PA').ne.0)then ! Do response function + SOS_2PA=.true. + rpachk=.true. + call getarg(i+1,dummy) + call readl(79,dummy,xx,nn) + num_trans=int(xx(1)) + endif + + if(index(dummy,'-hxc2PA').ne.0)then ! Do response function + FULL2PA=.true. + rpachk=.true. + call getarg(i+1,dummy) + call readl(79,dummy,xx,nn) + num_trans=int(xx(1)) + XsTD=.true. + write(*,*) 'hxc2PA, only with XsTD-DFT' + cint=.true. + endif + if(index(dummy,'-s2s').ne.0)then ! Do response function ESA=.true. !rpachk=.true. @@ -275,6 +321,310 @@ program acis_prog Nnto=int(xx(1)) endif + if(index(dummy,'-XsTD').ne.0)then + XsTD=.true. + if(xtbinp.eqv..true.)stop 'xTB with XsTD is not implemented' + cint=.true. + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + !dokshift=.false. + if(rpachk.eqv..false.)then + write(*,*)'Velocity correction deactivated with XsTDA by default' + velcorr=.false. + endif + endif + + if(index(dummy,'-libcintOFF').ne.0)then + cint=.false. + endif + + if(index(dummy,'-CORE').ne.0)then + Xcore=.true. + call getarg(i+1,dummy) + call readl(79,dummy,xx,nn) + Ecore=int(xx(1)) + call getarg(i+2,dummy) + call readl(79,dummy,xx,nn) + Ecore2=int(xx(1)) + write(*,*)'Doing core to valence excitations' + write(*,*)'using an occupied space from' + write(*,*)Ecore, ' to ',Ecore2 + endif +! if(index(dummy,'-RSH').ne.0)then ! Do range-separated hybrid only with XsTD +! RSH_flag=.true. +! XsTD=.true. +! cint=.true. +! dokshift=.false. +! call getarg(i+1,dummy) +! call readl(79,dummy,xx,nn) +! if(nn.gt.0) RSH=xx(1) +! call getarg(i+2,dummy) +! call readl(79,dummy,xx,nn) +! if(nn.gt.0) RSH_ax=xx(1) +! call getarg(i+3,dummy) +! call readl(79,dummy,xx,nn) +! if(nn.gt.0) RSH_beta=xx(1) +! call getarg(i+4,dummy) +! call readl(79,dummy,xx,nn) +! if(nn.gt.0) RSH_sub=xx(1) +! write(*,*)RSH_sub +! RSH_sub=.true. +! write(*,*)'Using a long-range corrected functional with XsTD' +! write(*,*)'Range-separated hybrid parameter is ', RSH,RSH_ax, +! . RSH_beta,RSH_sub +! endif + 12 format(a,3f9.4,L) + if(index(dummy,'-CAMB3LYP').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.33d0 + RSH2=RSH + RSH_ax=0.19d0 + RSH_beta=0.46d0 + RSH_sub=.true. + ax=0.38d0 + alpha=0.9d0 + beta=1.86d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using CAM-B3LYP with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'Velocity correction deactivated with XsTDA by default' + velcorr=.false. + endif + endif + + if(index(dummy,'-wB97XD2').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.2d0 + RSH2=RSH + RSH_ax=0.222d0 + RSH_beta=0.888d0 + RSH_sub=.true. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using wB97X-D with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'Velocity correction deactivated with XsTDA by default' + velcorr=.false. + endif + endif + + if(index(dummy,'-wB97XD3').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.25d0 + RSH2=RSH + RSH_ax=0.1957d0 + RSH_beta=0.8043d0 + RSH_sub=.true. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using wB97X-D3 with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'Velocity correction deactivated with XsTDA by default' + velcorr=.false. + endif + endif + + if(index(dummy,'-wB97MV').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.3d0 + RSH2=RSH + RSH_ax=0.15d0 + RSH_beta=0.85d0 + RSH_sub=.true. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using wB97MV with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'Velocity correction deactivated with XsTDA by default' + velcorr=.false. + endif + endif + + if(index(dummy,'-Bvel').ne.0)then + velcorr=.true. + write(*,*)'Velocity correction asked for XsTDA' + endif + + if(index(dummy,'-oldwB97XD3').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.25d0 + RSH2=RSH + RSH_ax=0.1957d0 + RSH_beta=1.0d0 + RSH_sub=.false. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using oldwB97X-D3 with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'No velocity correction with XsTDA/RSH for the moment' + velcorr=.false. + endif + endif + + if(index(dummy,'-oldwB97MV').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.3d0 + RSH2=RSH + RSH_ax=0.15d0 + RSH_beta=1.0d0 + RSH_sub=.false. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using oldwB97MV with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'No velocity correction with XsTDA/RSH for the moment' + velcorr=.false. + endif + endif + + if(index(dummy,'-oldwB97XD2').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH=0.2d0 + RSH2=RSH + RSH_ax=0.222d0 + RSH_beta=1.0d0 + RSH_sub=.false. + ax=0.51d0 + alpha=4.51d0 + beta=8.0d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using oldwB97X-D with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'No velocity correction with XsTDA/RSH for the moment' + velcorr=.false. + endif + endif + + if(index(dummy,'-SRC2R1').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH2=0.69d0 !short range mu + RSH=1.02d0 !long range mu + RSH_ax=0.55d0 + RSH_beta=0.08d0 + RSH_sub=.false. + !B3LYP parameters for the CSF screening + ax=0.2d0 + alpha=1.516d0 + beta=0.566d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using SRC2-R1 with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'No velocity correction with XsTDA/RSH for the moment' + velcorr=.false. + endif + endif + + if(index(dummy,'-SRC2R2').ne.0)then ! Do range-separated hybrid only with XsTD + RSH_flag=.true. + XsTD=.true. + cint=.true. + dokshift=.false. + RSH2=2.20d0 !short range mu + RSH=1.80d0 !long range mu + RSH_ax=0.91d0 + RSH_beta=0.28d0 + RSH_sub=.false. + !B3LYP parameters for the CSF screening + ax=0.2d0 + alpha=1.516d0 + beta=0.566d0 + write(*,*)'**********************' + write(*,*)'You choose to use XsTD' + write(*,*)'**********************' + write(*,*)'Using SRC2-R2 with XsTD' + write(*,12)'Range-separated hybrid parameters are ', RSH, + . RSH_ax,RSH_beta,RSH_sub + if(rpachk.eqv..false.)then + write(*,*)'No velocity correction with XsTDA/RSH for the moment' + velcorr=.false. + endif + endif + + if(index(dummy,'-intfull').ne.0)then + if(XsTD.eqv..true.)stop 'you cannot ask for full + .integrals and XsTD at the same time' + full=.true. + cint=.true. + rpachk=.true. + dokshift=.false. + endif + + if(index(dummy,'-directintfull').ne.0)then + if(XsTD.eqv..true.)stop 'you cannot ask for full + .integrals and XsTD at the same time' + direct_full=.true. + cint=.true. + rpachk=.true. + dokshift=.false. + endif + if(index(dummy,'-chk').ne.0) chkinp=.true. ! do input check if(index(dummy,'-vectm').ne.0)then eigvec=.true. ! print eigenvectors @@ -397,9 +747,60 @@ program acis_prog ccccccccccccccccccccccccccccccccc c precalculate primitive data ccccccccccccccccccccccccccccccccc + if(cint)then + write(*,*)'*****************************' + write(*,*)'*using libcint integral deck*' + write(*,*)'*****************************' + write(*,*) 'SIZEOF(int)', SIZEOF(nbf) + allocate(overlap_AO(nbf*(nbf+1)/2)) + call overlap(ncent,nprims,nbf,overlap_AO) + allocate(mu(nbf*(nbf+1)/2,1:3)) + call dipole_moment(ncent,nprims,nbf,mu) +! unfortunately libcint does not give the same result for the magnetic moment. +! thus, we still use the old integral deck for the magnetic moment +! allocate(mag(nbf*(nbf+1)/2,1:3)) +! call magnetic_moment(ncent,nprims,nbf,mag) + call intslvm2(ncent,nmo,nbf,nprims) + nao=nbf + if(nao.eq.0)nao=nprims + allocate(velo(nbf*(nbf+1)/2,1:3)) + call velo_moment(ncent,nprims,nbf,velo) + open(unit=40,file='sint', form='unformatted',status='replace') + open(unit=31,file='xlint',form='unformatted',status='replace') + open(unit=32,file='ylint',form='unformatted',status='replace') + open(unit=33,file='zlint',form='unformatted',status='replace') +! open(unit=34,file='xmint',form='unformatted',status='replace') +! open(unit=35,file='ymint',form='unformatted',status='replace') +! open(unit=36,file='zmint',form='unformatted',status='replace') + open(unit=37,file='xvint',form='unformatted',status='replace') + open(unit=38,file='yvint',form='unformatted',status='replace') + open(unit=39,file='zvint',form='unformatted',status='replace') + write(40)overlap_AO + close(40) + write(31)mu(:,1) + write(32)mu(:,2) + write(33)mu(:,3) + close(31) + close(32) + close(33) +! write(34)mag(:,1) +! write(35)mag(:,2) +! write(36)mag(:,3) +! close(34) +! close(35) +! close(36) + write(37)velo(:,1) + write(38)velo(:,2) + write(39)velo(:,3) + close(37) + close(38) + close(39) + deallocate(overlap_AO,mu,velo) + else call intslvm(ncent,nmo,nbf,nprims) nao=nbf if(nao.eq.0)nao=nprims + endif @@ -443,11 +844,8 @@ program acis_prog 21 format(3i10,3x,2f24.9) 11 format(3i5,2f9.4) - if(rw_dual)then + deallocate(ipty,exip,cxip,atnam,eta) - else - deallocate(ipat,ipty,ipao,exip,cxip,atnam,eta) - endif cccccccccccccccccccccccccccccccccccccc @@ -521,21 +919,21 @@ program acis_prog if (imethod.eq.1) then if(rw)then call stda_rw(ncent,nmo,nao,xyz,cc,eps,occ,iaoat,thre, - . thrp,ax,alpha,beta,ptlim,nvec) + . thrp,ax,alpha,beta,ptlim,nvec,nprims) else if(rw_dual)then call stda_rw_dual(ncent,nmo,nao,xyz,cc,eps,occ,iaoat,thre, . thrp,ax,alpha,beta,ptlim,nvec,ipat,ipao,nprims) - deallocate(ipat,ipao) else call stda(ncent,nmo,nao,xyz,cc,eps,occ,iaoat,thre, - . thrp,ax,alpha,beta,ptlim,nvec) + . thrp,ax,alpha,beta,ptlim,nvec,nprims) endif endif else call sutda(ncent,nmo,nao,xyz,cc,eps,occ,ccspin,iaoat,thre, . thrp,ax,alpha,beta,ptlim,nvec) endif + deallocate(ipat,ipao) call date_and_time(VALUES=datetimevals) print '(I0,"-",I0,"-",I0,1X,I0,":",I0,":",I0,".",I3)', diff --git a/meson.build b/meson.build index 42a6d92..a484c6a 100755 --- a/meson.build +++ b/meson.build @@ -1,125 +1,138 @@ -# This file is part of stda. +# This file is part of std2. # # Copyright (C) 2019 Sebastian Ehlert -# -# stda is free software: you can redistribute it and/or modify it under -# the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# stda is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with xtb4stda. If not, see . +# Copyright (C) 2024 Marc de Wergifosse -# modified to include options for Windows with Intel Fortran only (Shoubhik Maiti, April 2022) +# Modified by P. Beaujean -project('stda', 'fortran', - version: '1.6.1', - license: 'LGPL3', - meson_version: '>=0.51') +project('std2', 'fortran', + version: '1.6.1', + meson_version: '>=0.51', + default_options : ['warning_level=0', 'fortran_std=legacy'], +) -if get_option('interface') == '64' and get_option('la_backend') != 'mkl' - error('64 bit integer interface only supported for MKL backend') +if get_option('interface') == '64' and (get_option('la_backend') == 'netlib' or get_option('la_backend') == 'openblas') + error('64 bit integer interface not supported by OpenBLAS/netlib backends, use -Dinterface=32') endif +# set compiler options fc = meson.get_compiler('fortran') -if fc.get_id() == 'gcc' - add_project_arguments('-ffree-line-length-none', language: 'fortran') - add_project_arguments('-fbacktrace', language: 'fortran') - if get_option('interface') == '64' - add_project_arguments('-fdefault-integer-8', language: 'fortran') - endif -elif fc.get_id() == 'intel' - add_project_arguments('-axAVX2', language: 'fortran') - if get_option('buildtype') == 'debug' - add_project_arguments('-traceback', language: 'fortran') - endif - if get_option('interface') == '64' - add_project_arguments('-i8', language: 'fortran') - endif - if get_option('static') - add_project_link_arguments('-static', language: 'fortran') - endif -elif fc.get_id() == 'intel-cl' # for Windows with Intel Fortran - add_project_arguments('-QaxCORE-AVX2', language: 'fortran') - if get_option('buildtype') == 'debug' - add_project_arguments('-traceback', language: 'fortran') - endif - if get_option('interface') == '64' - add_project_arguments('-integer-size:64', language: 'fortran') - endif - if get_option('static') - add_project_arguments('-MT', language: 'fortran') # linker does not need MT - endif +build_args = [ + '-DPROJECT_NAME="' + meson.project_name() + '"', + '-DPROJECT_VERSION="' + meson.project_version() + '"', +] + +if fc.has_argument('-march=native') + build_args += ['-march=native', '-fno-math-errno'] + if fc.get_id() == 'intel' + build_args += ['-unroll-aggressive', '-ipo'] + else + build_args += ['-funroll-loops', '-ftree-vectorize'] + endif + message('added -march=native and loop unroling flags') endif -dependencies = [] +# configure project_dep +project_dep = [] +libcint_options = ['with_fortran=true', 'with_cint2_interface=true'] la_backend = get_option('la_backend') if la_backend == 'mkl' - if host_machine.system() == 'windows' - libmkl = [fc.find_library('libiomp5md')] + # build a pkg-config compatible string, list all possibilities with `pkg-config --list-all | grep "mkl"` + mkl_kind = 'mkl' + if get_option('static') + mkl_kind += '-static' + build_args += '-static' else - libmkl = [fc.find_library('pthread')] - libmkl += fc.find_library('m') - libmkl += fc.find_library('dl') + mkl_kind += '-dynamic' endif - if (fc.get_id() == 'intel') or (fc.get_id() == 'intel-cl') - if get_option('interface') == '64' - libmkl += fc.find_library('mkl_intel_ilp64') + + if get_option('interface') == '64' + mkl_kind += '-ilp64' + # specific requirements for ilp64 libraries, see https://www.intel.com/content/www/us/en/docs/onemkl/developer-guide-windows/2023-0/using-the-ilp64-interface-vs-lp64-interface.html + build_args += '-DMKL_ILP64' + libcint_options += 'i8=true' + if fc.get_id() == 'intel' or fc.get_id() == 'intel-llvm' + build_args += '-i8' else - libmkl += fc.find_library('mkl_intel_lp64') + build_args += '-fdefault-integer-8' endif - libmkl += fc.find_library('mkl_intel_thread') else - if get_option('interface') == '64' - libmkl += fc.find_library('mkl_gf_ilp64') - else - libmkl += fc.find_library('mkl_gf_lp64') - endif - libmkl += fc.find_library('mkl_gnu_thread') + mkl_kind += '-lp64' endif - libmkl += fc.find_library('mkl_core') - if host_machine.system() != 'windows' - libmkl += fc.find_library('iomp5') + + if get_option('openmp') + mkl_kind += '-iomp' + else + mkl_kind += '-seq' + endif + + message('MKL kind: ' + mkl_kind) + + # backups for system that do not provide pkg-config + mkl_libraries = { + 'mkl-dynamic-ilp64-iomp': ['mkl_core', 'mkl_intel_ilp64', 'mkl_gnu_thread', 'iomp5', 'pthread', 'm', 'dl'], + 'mkl-dynamic-ilp64-seq': ['mkl_core', 'mkl_intel_ilp64', 'mkl_sequential', 'm', 'dl'], + 'mkl-dynamic-lp64-iomp': ['mkl_core', 'mkl_intel_lp64', 'mkl_gnu_thread', 'iomp5', 'pthread', 'm', 'dl'], + 'mkl-dynamic-lp64-seq': ['mkl_core', 'mkl_intel_lp64', 'mkl_sequential', 'm', 'dl'] + # ... some of them are missing at the moment + } + + mkl_dep = dependency(mkl_kind, required: false) + if mkl_dep.found() # pkg-config + project_dep += mkl_dep + else # back up to finding libraries one per one + foreach lib: mkl_libraries[mkl_kind] + project_dep += fc.find_library(lib) + endforeach endif - dependencies += libmkl elif la_backend == 'openblas' - dependencies += fc.find_library('openblas', required : true) - dependencies += fc.find_library('lapack', required : true) + project_dep += fc.find_library('openblas', required : true) + project_dep += fc.find_library('lapack', required : true) +elif la_backend == 'netlib' + project_dep += fc.find_library('blas', required : true) + project_dep += fc.find_library('lapack', required : true) elif la_backend == 'custom' foreach lib: get_option('custom_libraries') - dependencies += fc.find_library(lib) + project_dep += fc.find_library(lib) endforeach -else - dependencies += fc.find_library('blas', required : true) - dependencies += fc.find_library('lapack', required : true) endif -if get_option('openmp') - if fc.get_id() == 'intel' - add_project_arguments('-qopenmp', language : 'fortran') - add_project_link_arguments('-qopenmp', language : 'fortran') - elif fc.get_id() == 'intel-cl' - add_project_arguments('-Qopenmp', language : 'fortran') +# add openMP if requested but MKL (and thus intel-openMP) was not used +if la_backend != 'mkl' and get_option('openmp') + dep_openmp = dependency('openmp', required: false) + if dep_openmp.found() + project_dep += dep_openmp else - add_project_arguments('-fopenmp', language : 'fortran') - add_project_link_arguments('-fopenmp', language : 'fortran') + if fc.get_id() == 'intel' or fc.get_id() == 'intel-llvm' + build_args += '-qopenmp' + else + build_args += '-fopenmp' + endif endif endif -stda_srcs = [ +libcint_dep = fc.find_library('libcint', required: false) +if not libcint_dep.found() + libcint_proj = subproject('libcint', default_options: libcint_options) + libcint_dep = libcint_proj.get_variable('libcint_dep') +endif +project_dep += libcint_dep + +message('Build args are: ' + ', '.join(build_args)) + +# Sources +std2_srcs = [ + '2PA.f90', 'apbtrafo.f', 'block.f', + 'full.f', 'header.f', 'intpack.f90', 'intslvm.f', 'io.f', + 'libcint.f', 'linal.f', 'linear_response.f', 'main.f', @@ -137,13 +150,14 @@ stda_srcs = [ 'sfstda.f', 'sosor.f', 'srpapack.f', - 'stdacommon.f90', 'stda.f', + 'stdacommon.f90', 'stda-rw.f', 'stda-rw_dual.f', 'stringmod.f90', 'sutda.f', - 'velo.f' + 'velo.f', + 'xstd.f90', ] g_spec_srcs = [ @@ -155,15 +169,32 @@ g2molden_srcs = [ 'g2molden/stringmod.f90' ] -stda_exe = executable(meson.project_name(), stda_srcs, - dependencies: dependencies, - install: true) +# Executables +std2_exe = executable( + meson.project_name(), + std2_srcs, + dependencies: project_dep, + fortran_args : build_args, + link_language : 'fortran', + install: true +) -g2molden_exe = executable('g2molden', g2molden_srcs, - dependencies: dependencies, - install: true) +g2molden_exe = executable( + 'g2molden', + g2molden_srcs, + dependencies: project_dep, + fortran_args : build_args, + link_language : 'fortran', + install: true +) +g_spec_exe = executable( + 'g_spec', g_spec_srcs, + dependencies: project_dep, + fortran_args : build_args, + link_language : 'fortran', + install: true +) -g_spec_exe = executable('g_spec', g_spec_srcs, - dependencies: dependencies, - install: true) +# add test +test('valid input', std2_exe, args: ['-f', '../tests/water_sto3g.molden', '-sty', '3', '-ax', '1', '-e', '20'], suite: 'app') diff --git a/meson_options.txt b/meson_options.txt index 3987f1a..2e0cc85 100755 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,28 +1,43 @@ # This file is part of stda. # # Copyright (C) 2019 Sebastian Ehlert -# -# stda is free software: you can redistribute it and/or modify it under -# the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# stda is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with xtb4stda. If not, see . +# Copyright (C) 2024 Marc de Wergifosse + +# Modified by P. Beaujean + +option( + 'openmp', + type: 'boolean', + value: true, + description: 'use OpenMP parallelisation' +) + +option( + 'la_backend', + type: 'combo', + value: 'mkl', + choices: ['mkl', 'openblas', 'netlib', 'custom'], + description : 'linear algebra backend' +) + +option( + 'custom_libraries', + type: 'array', + value: [], + description: 'libraries to load for custom linear algebra backend' +) + +option( + 'static', + type: 'boolean', + value: false, + description: 'Produce statically linked executables' +) -option('la_backend', type: 'combo', value: 'mkl', - choices: ['mkl', 'openblas', 'netlib', 'custom'], - description : 'linear algebra backend') -option('custom_libraries', type: 'array', value: [], - description: 'libraries to load for custom linear algebra backend') -option('openmp', type: 'boolean', value: true, - description: 'use OpenMP parallelisation') -option('static', type: 'boolean', value: true, - description: 'Produce statically linked executables') -option('interface', type: 'combo', value: '32', choices: ['32', '64'], - description: 'integer precision range in bits.') +option( + 'interface', + type: 'combo', + value: '32', + choices: ['32', '64'], + description: 'integer precision range in bits.' +) diff --git a/molden.f b/molden.f index 75fa111..b4aade1 100755 --- a/molden.f +++ b/molden.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! @@ -29,7 +30,7 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, integer:: nmo,nbf,imethod,icdim,ccspin(nmo),counter_BF integer:: f_info(nbf),flag,flag2 real*8:: cc(icdim),norm(nprims) - + open(unit=11,file='molden.molden') open(unit=12,file='fnorm') ! read normalization @@ -44,7 +45,7 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, write(11,21) atnam(i),i,int(co(i,4)),co(i,1:3)*0.52917721092 enddo !Basis set (sp are seperated) - + ! Counting the number of prim in each contraction prim=1 info=1 @@ -58,7 +59,7 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, endif endif enddo - + write(11,*) '[GTO]' at=0 counter_BF=0 @@ -85,14 +86,14 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, if(ipty(i)==2.and.flag==0) write(11,23)'p',info(i),'1.000000' if(ipty(i)==5) write(11,23)'d',info(i),'1.000000' if(ipty(i)==11) write(11,23)'f',info(i),'1.000000' - + if(ipty(i)==14.or.ipty(i)==15.or.ipty(i)==16.or. . ipty(i)==17.or.ipty(i)==18.or.ipty(i)==19) then f_info(counter_BF)=ipty(i) endif - - + + endif ! ! Contractactions are normalized @@ -116,7 +117,7 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, . /((2.0*exip(i))**3.0*dsqrt(2.0*exip(i))))/norm(i) if(ipty(i)==11) write(11,24)exip(i), . cxip(i)*dsqrt(5.5683279968317*1.875 - . /((2.0*exip(i))**4.0*dsqrt(2.0*exip(i))))/norm(i) + . /((2.0*exip(i))**4.0*dsqrt(2.0*exip(i))))/norm(i) at=ipat(i) if(at/=ipat(i+1)) write(11,*) if(flag==1.and.ipty(i)==4)then @@ -124,10 +125,10 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, flag2=0 endif enddo - + ! MOs - - write(11,*) '[MO]' + + write(11,*) '[MO]' Do i=1,nmo write(11,*) 'Sym= X' write(11,*) 'Ene=',eps(i) @@ -139,18 +140,18 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, endif write(11,*) 'Occup=',int(occ(i)) Do j=1,nbf - + ! f molden order if(f_info(j)==14.or.f_info(j)==15.or.f_info(j)==16.or. . f_info(j)==17.or.f_info(j)==18.or.f_info(j)==19) then - + if(f_info(j)==14)write(11,*) j, cc((i-1)*nbf+j+2) ! 16 if(f_info(j)==15)write(11,*) j, cc((i-1)*nbf+j-1) ! 14 if(f_info(j)==16)write(11,*) j, cc((i-1)*nbf+j-1) ! 15 if(f_info(j)==17)write(11,*) j, cc((i-1)*nbf+j+1) ! 18 if(f_info(j)==18)write(11,*) j, cc((i-1)*nbf+j+1) ! 19 if(f_info(j)==19)write(11,*) j, cc((i-1)*nbf+j-2) ! 17 - + else write(11,*) j, cc((i-1)*nbf+j) endif @@ -159,10 +160,10 @@ subroutine molden_file(ncent,nprims,nmo,icdim,nbf,imethod,cc, write(11,*) close(11) - + 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) diff --git a/normalize.f b/normalize.f index b88e6de..58dbaa3 100755 --- a/normalize.f +++ b/normalize.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ccccccccccccccccccccccccccccccccccc ! optional: Normalization of AOs c ccccccccccccccccccccccccccccccccccc @@ -22,14 +23,14 @@ subroutine normalize(cartbas,nprims,ipao,ipty,exip,cxip) implicit none logical, intent ( in ) :: cartbas - integer, intent ( in ) :: ipao(nprims),ipty(nprims) + integer, intent ( in ) :: ipao(nprims),ipty(nprims) integer, intent ( in ) :: nprims - real*8, intent( in ) :: exip(nprims) + real*8, intent( in ) :: exip(nprims) real*8, intent( inout ) :: cxip(nprims) integer i,j,k,l,iprimao,iprimtyp,jprimao,jprimtyp integer ifac,lang,lx,my,nz real*8 fnorm,summe,dzaehl,dnenn,expon,xlinf - + open(unit=11,file='fnorm') write(*,'(A)',advance='no') 'normalizing...' j=1 @@ -63,7 +64,7 @@ subroutine normalize(cartbas,nprims,ipao,ipty,exip,cxip) dnenn=dnenn**expon summe=summe+dzaehl/dnenn enddo - enddo + enddo summe=dsqrt(summe) fnorm=fnorm*summe fnorm=xlinf/fnorm @@ -111,7 +112,7 @@ subroutine normalize(cartbas,nprims,ipao,ipty,exip,cxip) ! enddo ! enddo ! summe=fnorm*summe -! write(*,*) 'self ovlp:', summe +! write(*,*) 'self ovlp:', summe ! j=i ! endif ! endif @@ -131,16 +132,16 @@ subroutine deflmna(iprtyp,lx,my,nz,lang,xlinf) my=0 nz=0 lang=0 -c======================================================================= -c cartesian gaussian functions (6d,10f...) -c s,px, py pz, dx**2 dy**2 dz**2 dxy dxz dyz -c 1 2 3 4 5 6 7 8 9 10 -c fxxx, fyyy, fzzz, fxxy, fxxz, fyyx, fyyz, fxzz, fyzz, fxyz -c 11 12 13 14 15 16 17 18 19 20 +c======================================================================= +c cartesian gaussian functions (6d,10f...) +c s,px, py pz, dx**2 dy**2 dz**2 dxy dxz dyz +c 1 2 3 4 5 6 7 8 9 10 +c fxxx, fyyy, fzzz, fxxy, fxxz, fyyx, fyyz, fxzz, fyzz, fxyz +c 11 12 13 14 15 16 17 18 19 20 c c assign for each ipty, the angular momentum (L), and the expinents l,m,n of x,y,z c linf is the factor to multiply normalized functions that are linearly dependent (e.g. dx**2,dy**2,dz**2) -c======================================================================= +c======================================================================= select case(iprtyp) case(1) lx=0 @@ -190,14 +191,14 @@ subroutine deflmna(iprtyp,lx,my,nz,lang,xlinf) nz=0 lang=2 xlinf=dsqrt(3.0d0) -c xlinf=1.0d0 +c xlinf=1.0d0 case(9) lx=1 my=0 nz=1 lang=2 xlinf=dsqrt(3.0d0) -c xlinf=1.0d0 +c xlinf=1.0d0 case(10) lx=0 my=1 @@ -304,4 +305,3 @@ subroutine dblfac(iin,iout) iout=jdem/jnum return end - diff --git a/onetri.f b/onetri.f index 39b2244..b00e4e6 100755 --- a/onetri.f +++ b/onetri.f @@ -1,19 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ ! SUBROUTINE ONETRI(ITY,S,S1,S2,ARRAY,N,IVAL) IMPLICIT REAL*8 (A-H,O-Z) @@ -29,7 +31,7 @@ SUBROUTINE ONETRI(ITY,S,S1,S2,ARRAY,N,IVAL) C N LINEAR DIMENSION OF ARRAYS C BERND HESS, UNIVERSITY OF BONN, JANUARY 1991 DIMENSION S(*),S1(*),S2(*),ARRAY(N,IVAL) - + C C DETERMINE IF WE HAVE AN ANTISYMMETRIC INTEGRAL IF (ITY.EQ.-1) GOTO 99 @@ -57,7 +59,7 @@ SUBROUTINE BLOWSY(ITY,A,B,N) REAL*8 A(*),B(N,N) C C DETERMINE IF WE HAVE AN ANTISYMMETRIC INTEGRAL - + IF (ITY.EQ.-1) GOTO 99 IJ=0 DO 1 I=1,N @@ -80,4 +82,3 @@ SUBROUTINE BLOWSY(ITY,A,B,N) 11 CONTINUE RETURN END - diff --git a/pckao.f b/pckao.f index c63efa9..1ce582b 100755 --- a/pckao.f +++ b/pckao.f @@ -1,23 +1,24 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ SUBROUTINE pckao(NPR,NAO,A,B) use stdacommon - IMPLICIT REAL*8(A-H,O-Z) + IMPLICIT REAL*8(A-H,O-Z) integer*8 ij,kl,k,iaa,iii dimension a(*),b(*) @@ -27,7 +28,7 @@ SUBROUTINE pckao(NPR,NAO,A,B) do i=1,npr do j=1,i k=k+1 - b(k)=a(k) + b(k)=a(k) enddo enddo return @@ -47,12 +48,12 @@ SUBROUTINE pckao(NPR,NAO,A,B) iaj=ipao(j) iaa=max(iaj,iai) iii=min(iaj,iai) - ij=iii+iaa*(iaa-1)/2 + ij=iii+iaa*(iaa-1)/2 b(ij)=b(ij)+a(kl)*c1*c2*2.0d0 enddo kl=kl+1 ij=iai - ij=ij+ij*(ij-1)/2 + ij=ij+ij*(ij-1)/2 b(ij)=b(ij)+a(kl)*c1*c1 enddo @@ -70,7 +71,7 @@ SUBROUTINE pckao(NPR,NAO,A,B) SUBROUTINE pckao3(NPR,NAO,A1,A2,A3,B1,B2,B3) use stdacommon - IMPLICIT REAL*8(A-H,O-Z) + IMPLICIT REAL*8(A-H,O-Z) integer*8 ij,kl,k dimension a1(*),b1(*) @@ -82,9 +83,9 @@ SUBROUTINE pckao3(NPR,NAO,A1,A2,A3,B1,B2,B3) do i=1,npr do j=1,i k=k+1 - b1(k)=a1(k) - b2(k)=a2(k) - b3(k)=a3(k) + b1(k)=a1(k) + b2(k)=a2(k) + b3(k)=a3(k) enddo enddo return @@ -106,14 +107,14 @@ SUBROUTINE pckao3(NPR,NAO,A1,A2,A3,B1,B2,B3) iaj=ipao(j) iaa=max(iaj,iai) iii=min(iaj,iai) - ij=iii+iaa*(iaa-1)/2 + ij=iii+iaa*(iaa-1)/2 ccf=c1*c2*2.0d0 b1(ij)=b1(ij)+a1(kl)*ccf b2(ij)=b2(ij)+a2(kl)*ccf b3(ij)=b3(ij)+a3(kl)*ccf enddo kl=kl+1 - ij=iai + ij=iai ij=ij+ij*(ij-1)/2 b1(ij)=b1(ij)+a1(kl)*c1*c1 b2(ij)=b2(ij)+a2(kl)*c1*c1 diff --git a/print_nto.f b/print_nto.f index dcdb3a7..d387009 100755 --- a/print_nto.f +++ b/print_nto.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ! written by Marc de Wegifosse 2019 ! need a cleanup ... @@ -37,7 +38,6 @@ subroutine print_nto(Xci,ca,moci,nci,nroot,nao,iconf,maxconf, . no,nv) use stdacommon use commonresp - use commonlogicals implicit none integer:: moci,nci,nroot,nao,maxconf,no,nv real*4:: Xci(nci,nroot),X(no,nv),MO(nao) @@ -73,11 +73,7 @@ subroutine print_nto(Xci,ca,moci,nci,nroot,nao,iconf,maxconf, enddo close(12,status='delete') open(unit=11,file='NTOao') - if(rw_dual)then allocate(ipty(nprims),info(nprims)) - else - allocate(ipat(nprims),ipty(nprims),ipao(nprims),info(nprims)) - endif allocate(atnam(ncent),exip(nprims),cxip(nprims),co(ncent,4)) allocate(f_info(nbf)) Do i=1, nprims @@ -143,7 +139,7 @@ subroutine print_nto(Xci,ca,moci,nci,nroot,nao,iconf,maxconf, write(14,*)'load ',fname - write(15,'(a,i,a)')'

NTO ',k,'

' + write(15,'(a,i7,a)')'

NTO ',k,'

' write(15,'(a)')'' open(unit=13,file=fname) @@ -325,8 +321,8 @@ subroutine print_nto(Xci,ca,moci,nci,nroot,nao,iconf,maxconf, write(15,'(a)')'' write(*,*)'NTOs written' 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) 26 format(a,i5.5,a,i5.5,a) @@ -364,7 +360,6 @@ subroutine Uprint_nto(Xci,cca,mocia,nexa,nci,nroot,nao,iconfa, . maxconfb,nob,nvb) use stdacommon use commonresp - use commonlogicals implicit none integer:: mocia,nci,nroot,nao,maxconfa,noa,nva real*4:: Xci(nci,nroot),Xa(noa,nva),MO(nao) @@ -406,11 +401,7 @@ subroutine Uprint_nto(Xci,cca,mocia,nexa,nci,nroot,nao,iconfa, enddo close(12,status='delete') open(unit=11,file='NTOao') - if(rw_dual)then allocate(ipty(nprims),info(nprims)) - else - allocate(ipat(nprims),ipty(nprims),ipao(nprims),info(nprims)) - endif allocate(atnam(ncent),exip(nprims),cxip(nprims),co(ncent,4)) allocate(f_info(nbf)) Do i=1, nprims @@ -504,7 +495,7 @@ subroutine Uprint_nto(Xci,cca,mocia,nexa,nci,nroot,nao,iconfa, write(14,*)'load ',fname - write(15,'(a,i,a)')'

NTO ',k,'

' + write(15,'(a,i7,a)')'

NTO ',k,'

' write(15,'(a)')'
' open(unit=13,file=fname) @@ -779,8 +770,8 @@ subroutine Uprint_nto(Xci,cca,mocia,nexa,nci,nroot,nao,iconfa, write(15,'(a)')'' write(*,*)'NTOs written' 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) 26 format(a,i5.5,a,i5.5,a) @@ -793,7 +784,6 @@ subroutine SFprint_nto(Xci,cca,mocia,nci,nroot,nao, . maxconfb,nob,nvb) use stdacommon use commonresp - use commonlogicals implicit none integer:: mocia,nci,nroot,nao,noa,nva real*4:: Xci(nci,nroot),Xa(noa,noa),MO(nao),X(noa,nvb) @@ -838,11 +828,7 @@ subroutine SFprint_nto(Xci,cca,mocia,nci,nroot,nao, enddo close(12,status='delete') open(unit=11,file='NTOao') - if(rw_dual)then allocate(ipty(nprims),info(nprims)) - else - allocate(ipat(nprims),ipty(nprims),ipao(nprims),info(nprims)) - endif allocate(atnam(ncent),exip(nprims),cxip(nprims),co(ncent,4)) allocate(f_info(nbf)) Do i=1, nprims @@ -1439,7 +1425,7 @@ subroutine SFprint_nto(Xci,cca,mocia,nci,nroot,nao, write(14,*)'load ',fname - write(15,'(a,i,a)')'

NTO ',k,'

' + write(15,'(a,i7,a)')'

NTO ',k,'

' write(15,'(a)')'
' open(unit=13,file=fname) @@ -1716,8 +1702,8 @@ subroutine SFprint_nto(Xci,cca,mocia,nci,nroot,nao, write(15,'(a)')'' write(*,*)'NTOs written' 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) 26 format(a,i5.5,a,i5.5,a) @@ -1728,7 +1714,6 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, . maxconf,no,nv,axe,mu_x,mu_y,mu_z,flag3) use stdacommon use commonresp - use commonlogicals implicit none integer:: moci,nci,nroot,nao,maxconf,no,nv real*4:: Xci(nci,nroot),X(no,nv),MO(nao) @@ -1783,11 +1768,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, close(12) endif open(unit=11,file='NTOao') - if(rw_dual)then allocate(ipty(nprims),info(nprims)) - else - allocate(ipat(nprims),ipty(nprims),ipao(nprims),info(nprims)) - endif allocate(atnam(ncent),exip(nprims),cxip(nprims),co(ncent,4)) allocate(f_info(nbf)) Do i=1, nprims @@ -1896,7 +1877,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, ! Compute the participation ratio !PR_nto=sum(SIGMA**2.0)**2.0/sum(SIGMA**4.0) should be reformulate in term of the response - if(flag3==.true.)then + if(flag3.eqv..true.)then alpha=0.0 alpha_X=0.0 alpha_Y=0.0 @@ -1920,7 +1901,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, if(sum(SIGMA)<0.0001)go to 128 write(*,*)'#wavelength:',k,'PR_NROs',PR_nto,'Prop.',sum(alpha) endif - if(flag3==.false.)then + if(flag3.eqv..false.)then alpha=0.0 alpha_X=0.0 alpha_Y=0.0 @@ -1947,7 +1928,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, write(14,*)'load ',fname - write(15,'(a,i,a)')'

NRO ',k,'

' + write(15,'(a,i7,a)')'

NRO ',k,'

' write(15,'(a)')'
' open(unit=13,file=fname) @@ -2044,7 +2025,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, .alpha_Y(i)**2.0/sum(alpha_Y**2.0).GT.0.01.or. .alpha_Z(i)**2.0/sum(alpha_Z**2.0).GT.0.01)then !only diagonal for the weight !!!!! - if(flag3==.true.)then + if(flag3.eqv..true.)then if(axe==1)then write(*,28) i,alpha(i)**2.0/sum(alpha**2.0), .' XX 2.0*',M_X(i),'*',SIGMA(i), @@ -2061,7 +2042,7 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, .'=',SIGMA(i)*M_Z(i)*2.0 endif endif - if(flag3==.false.)then + if(flag3.eqv..false.)then if(axe==1)then write(*,28) i,alpha_X(i)**2.0/sum(alpha_X**2.0), .' XX 2.0*',M_X(i),'*',SIGMA(i), @@ -2189,8 +2170,8 @@ subroutine print_nto_resp(Xci,ca,moci,nci,nroot,nao,iconf, write(*,*)'NROs written' write(*,*) 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) 26 format(a,i5.5,a,i5.5,a,i1,a) @@ -2205,7 +2186,6 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, . maxconf,no,nv,axe,mu_x,mu_y,mu_z,flag3) use stdacommon use commonresp - use commonlogicals implicit none integer:: moci,nci,nroot,nao,maxconf,no,nv real*4:: Xci(nci,nroot),X(no,nv),MO(nao) @@ -2275,11 +2255,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, close(12) endif open(unit=11,file='NTOao') - if(rw_dual)then allocate(ipty(nprims),info(nprims)) - else - allocate(ipat(nprims),ipty(nprims),ipao(nprims),info(nprims)) - endif allocate(atnam(ncent),exip(nprims),cxip(nprims),co(ncent,4)) allocate(f_info(nbf)) Do i=1, nprims @@ -2304,7 +2280,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, ! For descriptors INQUIRE(FILE="fragments", EXIST=file_exists) - if(file_exists==.true.)then + if(file_exists.eqv..true.)then open(unit=40,file='fragments',status='old') read(40,*)num_frag allocate(num_atom(num_frag),frag(num_frag,ncent)) @@ -2420,7 +2396,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, enddo write(*,*)'omega' Do i=1,num_frag - write(*,'(i,3x,50f12.3)') i,omega(i,:) + write(*,'(i7,3x,50f12.3)') i,omega(i,:) enddo write(*,*)'sum_omega',sum(omega) !write(*,*) @@ -2484,7 +2460,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, write(15,'(a)')'' ! Print density nros in the case of OR - if(flag3==.true.)then + if(flag3.eqv..true.)then write(dummy,'(a,i1,a)')'jmol-den-',axe,'.spt' @@ -2572,7 +2548,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, enddo ! Compute the participation ratio - if(flag3==.true.)then + if(flag3.eqv..true.)then alpha=0.0 alpha_X=0.0 alpha_Y=0.0 @@ -2596,7 +2572,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, if(sum(SIGMA)<0.0001)go to 128 write(*,*)'#wavelength:',k,'PR_NROs',PR_nto,'Prop.',sum(alpha) endif - if(flag3==.false.)then + if(flag3.eqv..false.)then alpha=0.0 alpha_X=0.0 alpha_Y=0.0 @@ -2623,7 +2599,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, write(14,*)'load ',fname - write(15,'(a,i,a)')'

NRO ',k,'

' + write(15,'(a,i7,a)')'

NRO ',k,'

' write(15,'(a)')'
' open(unit=13,file=fname) @@ -2713,7 +2689,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, enddo counter=0 !Densities nros - if(flag3==.true.)then + if(flag3.eqv..true.)then max_minus=0 max_plus=0 endif @@ -2727,7 +2703,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, .abs(alpha_Y(i))/sum(abs(alpha_Y)).GT.0.03.or. .abs(alpha_Z(i))/sum(abs(alpha_Z)).GT.0.03)then !only diagonal for the weight !!!!! !Densities nros - if(flag3==.true.)then + if(flag3.eqv..true.)then if(alpha(i)>0.0)then max_plus=max_plus+1 iplus(max_plus,1)=i @@ -2740,7 +2716,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, endif endif !!!!!!!!!!!!!!!!!!!! - if(flag3==.true.)then + if(flag3.eqv..true.)then if(axe==1)then write(*,28) i,abs(alpha(i))/sum(abs(alpha)), .' XX 2.0*',M_X(i),'*',SIGMA(i), @@ -2757,7 +2733,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, .'=',SIGMA(i)*M_Z(i)*2.0 endif endif - if(flag3==.false.)then + if(flag3.eqv..false.)then if(axe==1)then write(*,28) i,abs(alpha_X(i))/sum(abs(alpha_X)), .' XX 2.0*',M_X(i),'*',SIGMA(i), @@ -2882,7 +2858,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, enddo write(15,*)'
' !!! Signed densities - if(flag3==.true.)then + if(flag3.eqv..true.)then ! write a fake mo to keep normalization when printing densities write(13,*) 'Sym= Particle' write(13,*) 'Ene=',100.0 @@ -2895,7 +2871,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, !!!!!! close(13) !!! Signed densities - if(flag3==.true.)then + if(flag3.eqv..true.)then write(35,'(a)')'

Densities NROs

' @@ -3013,7 +2989,7 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, 128 enddo !!! Signed sum - if(flag3==.true.)then + if(flag3.eqv..true.)then write(35,'(a)')'' write(35,'(a)')'' endif @@ -3023,8 +2999,8 @@ subroutine print_nto_resp_new(Xci,ca,moci,nci,nroot,nao,iconf, write(*,*)'NROs written' write(*,*) 21 format(a,2i7,3f16.8) - 22 format(i,3x,a) - 23 format(a,3x,i,3x,a) + 22 format(i7,3x,a) + 23 format(a,3x,i7,3x,a) 24 format(2f16.8) 25 format(3f16.8) 26 format(a,i5.5,a,i5.5,a,i1,a) diff --git a/printvec.f b/printvec.f index 143d9c3..92a8c02 100755 --- a/printvec.f +++ b/printvec.f @@ -1,23 +1,24 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ subroutine printvectda(rpachk,nci,nroot,uci,eci) ! This routine prints out eigenvectors in TM format - integer, intent ( in ) :: nci,nroot + integer, intent ( in ) :: nci,nroot real*4, intent ( in ) :: uci(nci,nci),eci(nci) logical, intent ( in ) :: rpachk integer i,j,ij,k,jhilf,ii,ihilf,jhomo,nvec,itype,nmo,na @@ -35,7 +36,7 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) read(39,*) nvec,nmo,jhomo allocate(vecchk(nmo), iconf(nci,2),icsf(jhomo*(nmo-jhomo)), . stat=i) - if(i.ne.0)stop 'allocation failed in printz' + if(i.ne.0)stop 'allocation failed in printz' do i=1,nmo read(39,*) vecchk(i) enddo @@ -43,12 +44,12 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) read(39,*) iconf(i,1),iconf(i,2) enddo else -! unrestricted case +! unrestricted case read(39,*) nvec,nmo,jhomo read(39,*) nexa,nexb,jhomoa,jhomob na=nmo/2 ! number of alpha (and beta) mos ij=jhomoa*(na-jhomoa)+jhomob*(na-jhomob) - allocate(vecchk(na), iconf(nexa,2),iconfb(nexb,2), + allocate(vecchk(na), iconf(nexa,2),iconfb(nexb,2), . vecchkb(na),icsf(jhomoa*(na-jhomoa)),icsfb(jhomob*(na-jhomob)) . , stat=i) if(i.ne.0)stop 'allocation failed in printz' @@ -83,12 +84,12 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) open(unit=29,file=trim(fname),status='replace') write(29,'(a)',advance='yes') '$title' write(29,'(a)',advance='yes') '$symmetry c1' - write(29,'(a)',advance='no') '$tensor space dimension' + write(29,'(a)',advance='no') '$tensor space dimension' if(itype.eq.2) then na=nmo/2 ij=jhomoa*(na-jhomoa)+jhomob*(na-jhomob) write(29,'(x,i8)',advance='yes') ij - else + else write(29,'(x,i8)',advance='yes') jhomo*(nmo-jhomo) endif select case(itype) @@ -143,8 +144,8 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) endif enddo enddo - else - !sort for unrestricted case + else + !sort for unrestricted case icsfb=0 do i=1,nexa ihilf=iconf(i,1) @@ -161,7 +162,7 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) exit endif enddo -! l=l+(jhomoa-j)*(na-jhomoa) +! l=l+(jhomoa-j)*(na-jhomoa) exit else l=l+na-jhomoa @@ -174,7 +175,7 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) lhilf=iconfb(i,2) l=0 do j=1,jhomob - if (vecchkb(j).eq.khilf) then + if (vecchkb(j).eq.khilf) then do k=jhomob+1,na l=l+1 if(vecchkb(k).eq.lhilf) then @@ -192,10 +193,10 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) endif !! done sorting - + ihilf=1 do i = 1, nvec - if (ihilf.le.4.and.ihilf.gt.0) then + if (ihilf.le.4.and.ihilf.gt.0) then ihilf=0 write(29,'(a)',advance='yes') ' ' endif @@ -205,9 +206,9 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) ! now print Z/TDA vecs - if(itype.ne.2) then + if(itype.ne.2) then !restricted - l=0 + l=0 do j=1,jhomo if(vecchk(j).eq.0) then @@ -281,7 +282,7 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) end do ! loop over virts-alpha endif end do ! loop over occs-alpha - + ! beta l=0 do j=1,jhomob @@ -316,12 +317,12 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) endif end do ! llop over virts-beta endif - end do ! loop over occs-beta - + end do ! loop over occs-beta + endif ! check UKS/RKS end do ! loop over roots/nvec - + if(ihilf.le.3.and.ihilf.gt.0) write(29,'(a)',advance='yes') ' ' @@ -333,13 +334,13 @@ subroutine printvectda(rpachk,nci,nroot,uci,eci) ! note the printout in stdout write(*,'(a)',advance='no') ' eigenvectors printed to ' write(*,'(a)',advance='yes') trim(fname) - + end subroutine printvecrpa(nci,nroot,uci,hci,eci) ! This routine prints out eigenvectors in TM format - integer, intent ( in ) :: nci,nroot + integer, intent ( in ) :: nci,nroot real*4, intent ( in ) :: uci(nci,nci),hci(nci,nci),eci(nci) real*8 tmp integer i,j,ij,k,jhilf,ii,ihilf,jhomo,nvec,itype,nmo,na @@ -357,7 +358,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) read(39,*) nvec,nmo,jhomo allocate(vecchk(nmo), iconf(nci,2),icsf(jhomo*(nmo-jhomo)), . stat=i) - if(i.ne.0)stop 'allocation failed in printz' + if(i.ne.0)stop 'allocation failed in printz' do i=1,nmo read(39,*) vecchk(i) enddo @@ -365,12 +366,12 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) read(39,*) iconf(i,1),iconf(i,2) enddo else -! unrestricted case +! unrestricted case read(39,*) nvec,nmo,jhomo read(39,*) nexa,nexb,jhomoa,jhomob na=nmo/2 ij=jhomoa*(na-jhomoa)+jhomob*(na-jhomob) - allocate(vecchk(na), iconf(nexa,2),iconfb(nexb,2), + allocate(vecchk(na), iconf(nexa,2),iconfb(nexb,2), . vecchkb(na),icsf(jhomoa*(na-jhomoa)),icsfb(jhomob*(na-jhomob)) . , stat=i) if(i.ne.0)stop 'allocation failed in printz' @@ -402,12 +403,12 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) open(unit=29,file=trim(fname),status='replace') write(29,'(a)',advance='yes') '$title' write(29,'(a)',advance='yes') '$symmetry c1' - write(29,'(a)',advance='no') '$tensor space dimension' + write(29,'(a)',advance='no') '$tensor space dimension' if(itype.eq.2) then na=nmo/2 ij=jhomoa*(na-jhomoa)+jhomob*(na-jhomob) write(29,'(x,i8)',advance='yes') ij - else + else write(29,'(x,i8)',advance='yes') jhomo*(nmo-jhomo) endif select case(itype) @@ -436,7 +437,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) if (vecchk(j).eq.ihilf) then do k=jhomo+1,nmo l=l+1 - if(vecchk(k).eq.jhilf) then + if(vecchk(k).eq.jhilf) then icsf(l)=i ! l=l+nmo-k exit @@ -449,8 +450,8 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) endif enddo enddo - else - !sort for unrestricted case + else + !sort for unrestricted case icsfb=0 do i=1,nexa ihilf=iconf(i,1) @@ -467,7 +468,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) exit endif enddo -! l=l+(jhomoa-j)*(na-jhomoa) +! l=l+(jhomoa-j)*(na-jhomoa) exit else l=l+na-jhomoa @@ -480,7 +481,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) lhilf=iconfb(i,2) l=0 do j=1,jhomob - if (vecchkb(j).eq.khilf) then + if (vecchkb(j).eq.khilf) then do k=jhomob+1,na l=l+1 if(vecchkb(k).eq.lhilf) then @@ -498,10 +499,10 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) endif !! done sorting - + ihilf=1 do i = 1, nvec - if (ihilf.le.4.and.ihilf.gt.0) then + if (ihilf.le.4.and.ihilf.gt.0) then ihilf=0 write(29,'(a)',advance='yes') ' ' endif @@ -509,10 +510,10 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) & eci(i) ! print RPA vec - if(itype.ne.2) then + if(itype.ne.2) then !restricted !X+Y - l=0 + l=0 do j=1,jhomo if(vecchk(j).eq.0) then @@ -550,7 +551,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) end do ! loop over occs !X-Y - l=0 + l=0 do j=1,jhomo if(vecchk(j).eq.0) then @@ -626,7 +627,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) end do ! llop over virts-alpha endif end do ! loop over occs-alpha - + ! beta l=0 do j=1,jhomob @@ -662,7 +663,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) endif end do ! llop over virts-beta endif - end do ! loop over occs-beta + end do ! loop over occs-beta ! now X - Y , unrestricted l=0 do j=1,jhomoa @@ -701,7 +702,7 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) end do ! loop over virts-alpha endif end do ! loop over occs-alpha - + ! beta l=0 do j=1,jhomob @@ -738,11 +739,11 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) end do ! llop over virts-beta endif end do ! loop over occs-beta - + endif ! check UKS/RKS end do ! loop over roots/nvec - + if(ihilf.le.3.and.ihilf.gt.0) write(29,'(a)',advance='yes') ' ' @@ -754,5 +755,5 @@ subroutine printvecrpa(nci,nroot,uci,hci,eci) ! note the printout in stdout write(*,'(a)',advance='no') ' eigenvectors printed to ' write(*,'(a)',advance='yes') trim(fname) - + end diff --git a/prmat.f b/prmat.f index 122b92c..951a8a1 100755 --- a/prmat.f +++ b/prmat.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ SUBROUTINE PRMAT(IUOUT,R,N,M,HEAD) CHARACTER*(*) HEAD real*8 R(*) diff --git a/readbasa.f b/readbasa.f index 940e656..2541ee6 100755 --- a/readbasa.f +++ b/readbasa.f @@ -1,35 +1,36 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! -c reads the speical tm2molden binary file +!! ------------------------------------------------------------------------ +c reads the speical tm2molden binary file - subroutine readbas0a(mode,ncent,nmo,nbf,nprims,wfn) + subroutine readbas0a(mode,ncent,nmo,nbf,nprims,wfn) use stdacommon - implicit double precision (a-h,o-z) + implicit double precision (a-h,o-z) character*(*)wfn character*80 out - character*128 a128 - character*20 a20 + character*128 a128 + character*20 a20 dimension xx(10) logical ex integer i,j,maxlen - write(*,*) + write(*,*) write(*,*)'reading: ',wfn call header('M O / A O I N P U T ',0) inquire(file=wfn,exist=ex) @@ -55,17 +56,17 @@ subroutine readbas0a(mode,ncent,nmo,nbf,nprims,wfn) end subroutine readbasa(mode,imethod,ncent,nmo,nbf,nprims,cc, - .icdim,wfn,iaobas) + .icdim,wfn,iaobas) use stdacommon - implicit double precision (a-h,o-z) + implicit double precision (a-h,o-z) - dimension cc(icdim) + dimension cc(icdim) integer imethod - character*(*) wfn - character*80 out - character*128 a128 - character*20 a20 + character*(*) wfn + character*80 out + character*128 a128 + character*20 a20 logical ex,mosgen dimension xx(10) character*79 prntfrmt @@ -84,20 +85,20 @@ subroutine readbasa(mode,imethod,ncent,nmo,nbf,nprims,cc, open(unit=iwfn,file=wfn,form='unformatted') read(iwfn) nmo,nbf,nprims,ncent if(imethod.eq.2) nmo = 2*nmo - do 100 i = 1,ncent + do 100 i = 1,ncent read (iwfn) atnam(i),co(i,1),co(i,2),co(i,3),co(i,4) if(co(i,4).lt.1.0d0) atnam(i)='xx' write(*,prntfrmt) atnam(i),i,co(i,1),co(i,2),co(i,3),co(i,4) -100 continue +100 continue read(iwfn) (ipat(i),i=1,nprims) -c ipat - primitive to atom +c ipat - primitive to atom read(iwfn) (ipty(i),i=1,nprims) c ipty - angular momemtum type of primitive read(iwfn) (ipao(i),i=1,nprims) -c ipao - primitive to contracted - read(iwfn) (exip(i),i=1,nprims) -c exip - exponents of primitives - read(iwfn) (cxip(i),i=1,nprims) +c ipao - primitive to contracted + read(iwfn) (exip(i),i=1,nprims) +c exip - exponents of primitives + read(iwfn) (cxip(i),i=1,nprims) ! for debugging purposes ! do i=1,nprims @@ -105,18 +106,18 @@ subroutine readbasa(mode,imethod,ncent,nmo,nbf,nprims,cc, ! write(*,*) exip(i),cxip(i) ! write(*,*)k,jprimao,jprimtyp,cxip(k),cxip(k)**2 ! enddo - + do i=1,nmo - read(iwfn) occ(i),eps(i) -! write(*,*) occ(i),eps(i) + read(iwfn) occ(i),eps(i) +! write(*,*) occ(i),eps(i) enddo do i=1,nmo - read(iwfn) (cc(j+(i-1)*nbf),j=1,nbf) + read(iwfn) (cc(j+(i-1)*nbf),j=1,nbf) enddo ! do i=1,nmo ! write(*,*) (cc(j+(i-1)*nbf),j=1,nbf) ! enddo - read(iwfn) tote,gamma + read(iwfn) tote,gamma close(iwfn) iaobas=idint(gamma) @@ -125,20 +126,22 @@ subroutine readbasa(mode,imethod,ncent,nmo,nbf,nprims,cc, 95 format (/,1x,'# atoms =',i5,/, . 1x,'# mos =',i5,/, . 1x,'# primitive aos =',i5,/, - . 1x,'# contracted aos =',i5,/) + . 1x,'# contracted aos =',i5,/) if(iaobas.eq.0)then write(*,*) 'spherical AO basis' + spherical=.true. else write(*,*) 'cartesian AO basis' + spherical=.false. endif call etafill(nprims) -!203 format(2x,a2,i3,2x,3f14.8,3x,f10.2) +!203 format(2x,a2,i3,2x,3f14.8,3x,f10.2) + + end - end - subroutine readbasb(mode,imethod,ncent,nmo,nbf,nprims,cc,ccspin, .icdim,wfn,iaobas) use stdacommon @@ -180,13 +183,13 @@ subroutine readbasb(mode,imethod,ncent,nmo,nbf,nprims,cc,ccspin, write(*,prntfrmt) atnam(i),i,co(i,1),co(i,2),co(i,3),co(i,4) 100 continue read(iwfn) (ipat(i),i=1,nprims) -c ipat - primitive to atom +c ipat - primitive to atom read(iwfn) (ipty(i),i=1,nprims) c ipty - angular momemtum type of primitive read(iwfn) (ipao(i),i=1,nprims) -c ipao - primitive to contracted +c ipao - primitive to contracted read(iwfn) (exip(i),i=1,nprims) -c exip - exponents of primitives +c exip - exponents of primitives read(iwfn) (cxip(i),i=1,nprims) do i=1,nmo @@ -197,7 +200,7 @@ subroutine readbasb(mode,imethod,ncent,nmo,nbf,nprims,cc,ccspin, enddo read(iwfn) tote,gamma close(iwfn) - + if(imethod.eq.2) then write(*,'(/,A,/)') 'Reading orbitals data from molden.input file ' @@ -241,12 +244,14 @@ subroutine readbasb(mode,imethod,ncent,nmo,nbf,nprims,cc,ccspin, if(iaobas.eq.0)then write(*,*) 'spherical AO basis' + spherical=.true. else write(*,*) 'cartesian AO basis' + spherical=.false. endif call etafill(nprims) !203 format(2x,a2,i3,2x,3f14.8,3x,f10.2) - end + end diff --git a/readbasmold.f b/readbasmold.f index 5a495a1..8d93b97 100755 --- a/readbasmold.f +++ b/readbasmold.f @@ -1,39 +1,40 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! MOLDEN readout routine ! ! by C. Bannwarth, University of Bonn ! ! Thu Oct 23 10:44:18 CEST 2014 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! some general notes: -! 1) The Molden input is not unique, i.e. the QC programs write it differently. +! 1) The Molden input is not unique, i.e. the QC programs write it differently. ! We therefore make a sanity check by means of a Mulliken population analysis (see main.f). -! 2) Molden uses a different arrangement of f-functions than stda, therefore when the MO +! 2) Molden uses a different arrangement of f-functions than stda, therefore when the MO ! coefficients are read out, they need to be reordered for every set of f-functions. ! That is why a marking vector "ifstart" is introduced which is declared when the AO basis is set up and -! used as a checkpoint when to do the reordering in the MO readout part (which is done after reading the MO +! used as a checkpoint when to do the reordering in the MO readout part (which is done after reading the MO ! coefficients for one set of f-functions) -! 3) Related to 1): We work with Cartesian basis functions, i.e. the dx**2,dy**2,dz**2 are not linearly independent +! 3) Related to 1): We work with Cartesian basis functions, i.e. the dx**2,dy**2,dz**2 are not linearly independent ! (similar for f-functions, except fxyz). This means that the GTO contraction coefficients need to be scaled by certain prefactors. ! But these prefactors are somehow included into the MO coefficents (different in certain programs) and therefore, these need to be post-processed. c reads the molden input file just to get the dimensions (actual readout follows later on) - subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) + subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) use strings implicit none @@ -42,16 +43,16 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) character*79 line character*25 args(10) - character*1 aang - character*2 aatom + character*1 aang + character*2 aatom integer iwfn,iatom,idum,jatom,mbasf,kbasf,lang,ibas,iostatus,nargs - integer i,j,maxlen + integer i,j,maxlen logical ex - real*8 xdum,ydum,zdum + real*8 xdum,ydum,zdum - write(*,*) + write(*,*) write(*,*)'reading: ',wfn call header('M O / A O I N P U T ',0) @@ -105,13 +106,13 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) nprims=0 nmo=0 ! search for [GTO] statement to read basis - call findstr('[GTO]',5,iwfn,1,1) + call findstr('[GTO]',5,iwfn,1,1) ! go through atoms and read number of aos,caos and prims jatom=0 do i=1,ncent 555 read(iwfn,*,iostat=iostatus)iatom,idum ! 1st, read atom identifier if(iostatus.ne.0) goto 555 ! if it does not fit, read next line - if(ncent.lt.iatom) stop 'Error: no atoms does not fit to basis' + if(ncent.lt.iatom) stop 'Error: no atoms does not fit to basis' if(jatom.lt.iatom)jatom=iatom ! read line, check whether s,p,d,f orbital is present (aang) and read no of prims (ibas) do @@ -126,14 +127,14 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) call value(args(2),ibas,iostatus) if(iostatus.ne.0) stop 'ibas: error in arg to integer conv' kbasf=4 ! a set of s and p orbitals, i.e., 1 + 3 - mbasf=4 + mbasf=4 else ! general case aang=args(1) call value(args(2),ibas,iostatus) if(iostatus.ne.0) stop 'ibas: error in arg to integer conv' call aangchk(0,aang,mbasf,kbasf,lang) - if(lang.lt.0)cycle + if(lang.lt.0)cycle endif @@ -145,7 +146,7 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) nmo=nmo+mbasf ! preliminary MO number enddo backspace(iwfn) ! to be sure, go back one line - enddo + enddo ! sanity check if(jatom.ne.ncent) stop 'int. error in ncent read!' @@ -167,7 +168,7 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) enddo nmo=mbasf - + ccccccccccccccccccccccccccccccc ! check for closed/open shell c ccccccccccccccccccccccccccccccc @@ -179,10 +180,10 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) read(iwfn,'(A)',IOSTAT=iostatus) line if(iostatus.lt.0) exit line=lowercase(line) - call removesp(line) + call removesp(line) call parse(line,'=',args,nargs) if(nargs.ne.2) cycle - if(index(line,'spin').ne.0) then + if(index(line,'spin').ne.0) then if(index(line,'beta').ne.0) then idum=2 exit @@ -212,7 +213,7 @@ subroutine readmold0(ncent,nmo,nbf,nprims,wfn,idum) cccccccccccccccccccccccccccccc ! actual read out routine c -cccccccccccccccccccccccccccccc +cccccccccccccccccccccccccccccc subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin .,icdim,wfn) use strings @@ -223,7 +224,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin integer ccspin(nmo),ifstart(nbf) integer, intent( in ) :: mform,imethod integer, intent( in ) :: ncent,nmo,nbf,nprims - + character*(*), intent( in ) :: wfn character*25 args(10) character*1 aang @@ -233,14 +234,14 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ! data statements to read GTO basis data pi32 /5.56832799683170d0/ data pt187 /1.875d+00/ - data pt5,pt75,pt656 /0.5d0,0.75d0,6.5625d0/ + data pt5,pt75,pt656 /0.5d0,0.75d0,6.5625d0/ ! determine length of ncent integer (for printout to prevent ***) maxlen=0 call lenint(ncent,maxlen) prntfrmt=' ' - write(prntfrmt,'(a,i0,a)')'(2x,a2,x,i',maxlen, + write(prntfrmt,'(a,i0,a)')'(2x,a2,x,i',maxlen, . ',2x,3f14.8,3x,f10.2)' iwfn=29 open(unit=iwfn,file=wfn,status='old') @@ -251,7 +252,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ccccccccccccccccccccccccccccccccccccccccccccccccc call findstr('[Atoms]',7,iwfn,1,2) - backspace(iwfn) + backspace(iwfn) ! either coordinates are given in a.u. read(iwfn,'(A)',IOSTAT=iostatus) line call parse(line,' ',args,nargs) @@ -270,7 +271,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin co(i,4)=dble(idum) do j=1,3 co(i,j)=co(i,j)/0.52917721092d0 - enddo + enddo if(co(i,4).lt.1.0d0) atnam(i)='xx' write(*,prntfrmt) atnam(i),i,co(i,1),co(i,2),co(i,3),co(i,4) ! write(*,203) atnam(i),i,co(i,1),co(i,2),co(i,3),co(i,4) @@ -281,13 +282,13 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ! Now read basis set data c -! c +! c ! go through atoms and assign orbitals (contracted & prims) c ! search for [GTO] statement to read basis set data c ! for each set of atomic orbitals c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc icount=0 !counter for primitives - jcount=0 !counter for contractions + jcount=0 !counter for contractions call findstr('[GTO]',5,iwfn,1,1) cccccccccccccccccccc c go through atoms c @@ -341,19 +342,19 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ee=2.0d0*exip(icount) facs = pi32 / (ee * dsqrt(ee)) cxip(icount)=cxip(icount)/dsqrt(facs) -! p part +! p part fac = pt5 * facs / ee cxip(icount+ibas)=cxip(icount+ibas)/dsqrt(fac) ipat(icount)=iatom ipat(icount+ibas)=iatom -! ipat - primitive to atom +! ipat - primitive to atom ipty(icount)=1 ipty(icount+ibas)=2 ! ipty - angular momemtum type of primitive ipao(icount)=jcount ipao(icount+ibas)=jcount+1 -! ipao - primitive to contracted +! ipao - primitive to contracted enddo kbasf=3 iang=1 @@ -366,26 +367,26 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin else ! general case ! set mult. factor for higher ang. momentum functions -! we assume Cartesian coordinates - spherical ones are not implemented +! we assume Cartesian coordinates - spherical ones are not implemented ! aang: character of function type, i.e., s,p,d,f ! mbasf: interger of ang momentum increased by one; i.e., s=1,p=2,d=3,... ! kbasf: # of Cartesian functions of this type: s=1,p=3,d=6,f=10 ! lang: interger of ang momentum i.e., s=0,p=1,d=2,... call aangchk(1,aang,mbasf,kbasf,lang) ! read and assign 1st component (s,px,dxx,fxxx) - jcount=jcount+1 + jcount=jcount+1 ifstart(jcount)=0 do j=1,ibas ! read data for each primitive icount=icount+1 - read(iwfn,*) exip(icount),cxip(icount) ! exip - exponents of primitives - ipat(icount)=iatom ! ipat - primitive to atom + read(iwfn,*) exip(icount),cxip(icount) ! exip - exponents of primitives + ipat(icount)=iatom ! ipat - primitive to atom ipty(icount)=mbasf ! ipty - angular momemtum type of primitive - ipao(icount)=jcount ! ipao - primitive to contracted -cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + ipao(icount)=jcount ! ipao - primitive to contracted +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ! for TM & Molpro: contract exponent of primitive into contraction coefficient c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc - if(mform.gt.0) then + if(mform.gt.0) then ee=2.0d0*exip(icount) facs = pi32 / (ee * dsqrt(ee)) if (lang.eq.0) fac = facs @@ -402,7 +403,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ! end: contract exp. into coeff. enddo - endif ! endif belongs to check if 'sp' ist present or not + endif ! endif belongs to check if 'sp' ist present or not cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ! if l > 0, assign remaining components (py,pz,dxy,...) accordingly c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc @@ -423,7 +424,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin enddo ! set other components for l>0 else if(imethod*nbf.eq.nmo) then ! for cartesian mos select case (lang) - case(2) ! + case(2) ! do j=1,kbasf-1 jcount=jcount+1 mbasf=mbasf+1 @@ -432,7 +433,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin do k=1,ibas icount=icount+1 exip(icount)=exip(icount-ibas) - if(j.eq.3) then + if(j.eq.3) then cxip(icount)=cxip(icount-ibas)*dsqrt(3.0d0) else cxip(icount)=cxip(icount-ibas) @@ -442,7 +443,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ipao(icount)=jcount enddo ! go through primitives enddo ! set other components for l>0 - + case(3) do j=1,kbasf-1 jcount=jcount+1 @@ -456,15 +457,15 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin cxip(icount)=cxip(icount-ibas)*dsqrt(5.0d0) else if(j.eq.9) then cxip(icount)=cxip(icount-ibas)*dsqrt(3.0d0) - else + else cxip(icount)=cxip(icount-ibas) endif ipat(icount)=iatom ipty(icount)=mbasf - ipao(icount)=jcount + ipao(icount)=jcount enddo ! go through primitives enddo ! set other components for l>0 - + case default do j=1,kbasf-1 jcount=jcount+1 @@ -481,7 +482,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin enddo ! go through primitives enddo ! set other components for l>0 - end select + end select endif @@ -489,12 +490,12 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin backspace(iwfn) ! be safe not to go to far enddo ! read/go through atom - if(jcount.ne.nbf) then + if(jcount.ne.nbf) then write(0,*) jcount,'vs',nbf write(*,*) jcount,'vs',nbf stop 'int. error in nbf read!' endif - + if(icount.ne.nprims) stop 'int. error in nprims read!' @@ -503,11 +504,11 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin case(0) write(*,*) 'interpreted GTO in ORCA/xTB style' case(1) - if(imethod*nbf.gt.nmo) then + if(imethod*nbf.gt.nmo) then write(*,*) 'interpreted GTO in TURBOMOLE style' else write(*,*) 'interpreted GTO in TURBOMOLE/MOLPRO/GAUSSIAN style' - endif + endif case(2) write(*,*) 'interpreted GTO in MOLPRO style' case(3) @@ -517,7 +518,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin write(*,'(a)',advance='yes') 'done!' end select - + ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ! read occupation number of orbitals and orbital energies c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc @@ -530,15 +531,15 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin jcount=0 ! kcount is the coefficient counter kcount=0 - do + do read(iwfn,'(A)',IOSTAT=iostatus) line - if(iostatus.ne.0) exit + if(iostatus.ne.0) exit call parse(line,' ',args,nargs) if(nargs.ne.2) cycle if(args(1).eq.'Ene=') then ! if energy is found, read it and search for occupation icount=icount+1 - call value(args(2),eps(icount),iostatus) - if(iostatus.ne.0) stop 'eps: error in arg to real*8 conv' + call value(args(2),eps(icount),iostatus) + if(iostatus.ne.0) stop 'eps: error in arg to real*8 conv' ! optional in uhf case: read spin if(imethod.eq.2) then @@ -552,13 +553,13 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin if(index(dummy2,'alpha').ne.0) then ccspin(icount) = 1 else - ccspin(icount) = 2 + ccspin(icount) = 2 endif endif endif ! end: spin read - do + do read(iwfn,'(A)',IOSTAT=iostatus) dummy if(iostatus.ne.0) exit call parse(dummy,' ',args,nargs) @@ -571,7 +572,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ! read LCAO-MO coefficients jdum=0 - do + do read(iwfn,'(A)',IOSTAT=iostatus) dummy2 if(iostatus.ne.0) exit call parse(dummy2,' ',args,nargs) @@ -583,8 +584,8 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin do i=1,kdum kcount=kcount+1 - cc(kcount)=0.0d0 - if(i.eq.kdum) call value(args(2),cc(kcount),iostatus) + cc(kcount)=0.0d0 + if(i.eq.kdum) call value(args(2),cc(kcount),iostatus) if(iostatus.ne.0) stop 'MO-coef: error in arg to real*8 conv' ! rearrange MO coefficients of f functions that are different @@ -636,8 +637,8 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin ! end fill-up backspace(iwfn) ! backspace,because some molden inputs give no symmetry (then energy is overridden) - exit ! go back to epsilon loop if coeffs have been read - endif + exit ! go back to epsilon loop if coeffs have been read + endif enddo endif @@ -655,7 +656,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin iprimao=ipao(i) iprimtyp=ipty(i) if(i.gt.1)then - if(i.eq.nprims+1) iprimao=0 + if(i.eq.nprims+1) iprimao=0 if(iprimao.ne.jprimao) then kcount=kcount+1 if(jprimtyp.eq.8.or.jprimtyp.eq.9.or.jprimtyp.eq.10) then @@ -697,7 +698,7 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin endif jprimao=iprimao jprimtyp=iprimtyp - enddo + enddo enddo endif endif @@ -722,23 +723,29 @@ subroutine readmold(mform,imethod,ncent,nmo,nbf,nprims,cc,ccspin if(imethod*nbf.gt.nmo)then write(*,*) 'spherical AO basis' + if(mform==1.or.mform==2)then + spherical=.true. + else + spherical=.false. + endif else write(*,*) 'cartesian AO basis' + spherical=.false. endif call etafill(nprims) !203 format(2x,a2,i3,2x,3f14.8,3x,f10.2) - end + end ! search for string in input subroutine findstr(str,lenstr,ifile,i,n) - use strings - implicit none - character*(lenstr), intent( in ) :: str + use strings + implicit none integer, intent( in ) :: lenstr,i,n,ifile - character*(lenstr) arg(10) + character(len=lenstr), intent( in ) :: str + character*25 arg(10) integer narg,ios character*79 line if(n.le.0) then @@ -782,7 +789,7 @@ subroutine aangchk(modus,chr,mbasf,kbasf,iang) kbasf=6 mbasf=5 case('f') - kbasf=10 + kbasf=10 mbasf=7 case('g') stop'ang. momentum > f not implemented! Exiting!' @@ -792,7 +799,7 @@ subroutine aangchk(modus,chr,mbasf,kbasf,iang) stop'ang. momentum > f not implemented! Exiting!' case default iang=-1 - end select + end select else if(modus.eq.1) then select case(chr) case('s') @@ -800,7 +807,7 @@ subroutine aangchk(modus,chr,mbasf,kbasf,iang) mbasf=1 ! starter for ipty iang=0 case('p') - kbasf=3 + kbasf=3 mbasf=2 iang=1 case('d') @@ -842,18 +849,18 @@ subroutine lenint(iin,iout) c fill up eta array subroutine etafill(nprims) use stdacommon - implicit double precision (a-h,o-z) + implicit double precision (a-h,o-z) common /carte / lmn(0:3,0:3,0:3) -c======================================================================= -c cartesian gaussian functions (6d,10f...) -c s,px, py pz, dx**2 dy**2 dz**2 dxy dxz dyz -c 1 2 3 4 5 6 7 8 9 10 -c fxxx, fyyy, fzzz, fxxy, fxxz, fyyx, fyyz, fxzz, fyzz, fxyz -c 11 12 13 14 15 16 17 18 19 20 -c======================================================================= +c======================================================================= +c cartesian gaussian functions (6d,10f...) +c s,px, py pz, dx**2 dy**2 dz**2 dxy dxz dyz +c 1 2 3 4 5 6 7 8 9 10 +c fxxx, fyyy, fzzz, fxxy, fxxz, fyyx, fyyz, fxzz, fyzz, fxyz +c 11 12 13 14 15 16 17 18 19 20 +c======================================================================= lmn(0,0,0)=1 lmn(1,0,0)=2 @@ -881,13 +888,13 @@ subroutine etafill(nprims) eta(i,1)=co(iat,1) eta(i,2)=co(iat,2) eta(i,3)=co(iat,3) - eta(i,4)=exip(i) + eta(i,4)=exip(i) eta(i,5)=float(ipty(i)) if(ipty(i).gt.20) then write(*,*) ' ' write(*,*)'WARNING WARNING WARNING WARNING WARNING WARNING' write(*,*)' Functions > f present in basis but not' - write(*,*)' implemented! The program will stop here. ' + write(*,*)' implemented! The program will stop here. ' write(*,*)' Redo the SCF without functions > f!' write(*,*)'WARNING WARNING WARNING WARNING WARNING WARNING' write(0,*)'WARNING: Functions > f in basis. Program stopped!' @@ -896,7 +903,7 @@ subroutine etafill(nprims) do m=1,20 eta(i,m+5)=0.0d0 enddo - eta(i,5+ipty(i))=1.00d0 + eta(i,5+ipty(i))=1.00d0 enddo return @@ -913,14 +920,14 @@ subroutine readinp(ax,thre,alp,bet) 777 read(89,'(A)',iostat=ios) line if(ios.lt.0) stop '.STDA file empty' call parse(line,' ',arg,narg) - if(arg(1).eq.'#') goto 777 + if(arg(1).eq.'#') goto 777 if(narg.ge.1) call value(arg(1),ax,ios) if(ios.ne.0) stop 'ax from file unreadable' - if(narg.ge.2) call value(arg(2),thre,ios) + if(narg.ge.2) call value(arg(2),thre,ios) if(ios.ne.0) stop 'Ethr from file unreadable' if(narg.ge.3) call value(arg(3),alp,ios) if(ios.ne.0) stop 'alpha from file unreadable' if(narg.ge.4) call value(arg(4),bet,ios) if(ios.ne.0) stop 'beta from file unreadable' - close(89) + close(89) end diff --git a/readl.f b/readl.f index 0952bd4..01848f5 100755 --- a/readl.f +++ b/readl.f @@ -1,19 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ C ***************************************************************** @@ -138,4 +140,3 @@ FUNCTION XREAD(NL,A,ISTART,IEND,IEND2) 70 XREAD=XREAD*10**(ONE*C1) RETURN END - diff --git a/readxtb.f b/readxtb.f index e054628..d7eab69 100755 --- a/readxtb.f +++ b/readxtb.f @@ -1,36 +1,37 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ccccccccccccccccccccccccccccccccc ! read out xTB input c -ccccccccccccccccccccccccccccccccc +ccccccccccccccccccccccccccccccccc ! ncent : # atoms ! nmo : # MOs ! nbf : # AOs ! nprims : # primitives (in total) -! co(ncent,1:3) : Cartesian coordinates +! co(ncent,1:3) : Cartesian coordinates ! co(ncent,4) : nuclear charge ! cxip(nprims) : contraction coefficients of primitives ! exip(nprims) : exponents of primitives -! cmo(nbf,nmo) : LCAO-MO coefficients +! cmo(nbf,nmo) : LCAO-MO coefficients ! eps(nmo) : orbital eigenvalues ! occ(nmo) : occupation # of MO ! ipty(nprims) : angular momentum of primitive function -! ipao(nbf) : # primitives in contracted AO +! ipao(nbf) : # primitives in contracted AO ! ipat(ncent) : # of atom, the primitive is located on @@ -50,7 +51,7 @@ subroutine readxtb0(imethod,ncent,nmo,nbf,nprims) write(*,*)'file: wfn.xtb not found' stop 'input file not found' endif - + iwfn=29 open(unit=iwfn,file='wfn.xtb',form='unformatted', . status='old') @@ -115,7 +116,7 @@ subroutine readxtb(imethod,ncent,nmo,nbf,nprims,cc) do j=1,3 read(iwfn) dum co(i,j)=dum - enddo + enddo read(iwfn) k co(i,4)=dble(k) if(co(i,4).lt.1.0d0) atnam(i)='xx' @@ -129,23 +130,23 @@ subroutine readxtb(imethod,ncent,nmo,nbf,nprims,cc) !303 format(2x,a2,i3,2x,3f14.8,3x,f10.2) ************************** -! Now read basis set data +! Now read basis set data ************************** ! ipty do i=1,nprims read(iwfn) k - ipty(i)=k + ipty(i)=k enddo ! ipat - do i=1,nprims - read(iwfn) k + do i=1,nprims + read(iwfn) k ipat(i) = k enddo ! ipao do i=1,nprims - read(iwfn) k + read(iwfn) k ipao(i) = k - enddo + enddo ! first exponents, then contraction coefficients read(iwfn) exip(1:nprims) @@ -154,12 +155,12 @@ subroutine readxtb(imethod,ncent,nmo,nbf,nprims,cc) ! now the mo data * ********************* k=0 - if(imethod.eq.2) then + if(imethod.eq.2) then !uks case: nmo = nmo_a + nmo_b ! alpha first, beta second ! occs + energies - k=nmo/2 - read(iwfn) occ(1:k) + k=nmo/2 + read(iwfn) occ(1:k) read(iwfn) eps(1:k) k=k+1 read(iwfn) occ(k:nmo) @@ -169,13 +170,13 @@ subroutine readxtb(imethod,ncent,nmo,nbf,nprims,cc) read(iwfn) cc(1:i) i=i+1 k=nmo*nbf - read(iwfn) cc(i:k) + read(iwfn) cc(i:k) else !rks case - ! occs + energies + ! occs + energies read(iwfn) occ(1:nmo) read(iwfn) eps(1:nmo) - ! read MO coefficients + ! read MO coefficients read(iwfn) cc endif @@ -194,8 +195,6 @@ subroutine readxtb(imethod,ncent,nmo,nbf,nprims,cc) endif call etafill(nprims) - + return end - - diff --git a/sfstda.f b/sfstda.f index 943cf03..c59f06b 100755 --- a/sfstda.f +++ b/sfstda.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ! written by Marc de Wegifosse 2018-2019 @@ -703,8 +704,9 @@ SUBROUTINE sfstda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, . ,pija,ncent) deallocate(qija,gamj) - + if(XsTD.eqv..false.)then deallocate(clowa) + endif !!! now beta part of qab !!! q2=0.0 @@ -725,8 +727,9 @@ SUBROUTINE sfstda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo !$omp end do !$omp end parallel - + if(XsTD.eqv..false.)then deallocate(clowb) + endif !!!!!PTselect, for spin-flip!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! write(*,*) write(*,*)'selecting CSF ...' @@ -768,9 +771,14 @@ SUBROUTINE sfstda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c set the TDA matrix up * write(*,*)'calculating TDA matrix ...' ******************************************************************************** + if(XsTD)then + call SF_Xstda_mat(nci,nexb,ncent,noa,nva,nob,nvb,maxconfb,iconfb, + .ax,edb,hci,betaj,xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) + else call sfstdamat(nci,nexb,ncent,noa,nob,nvb, . maxconfb,iconfb,ax,edb, . pija,qabb,hci) + endif ******************************************************************************** diff --git a/sosor.f b/sosor.f index e4a97b5..f6fce95 100755 --- a/sosor.f +++ b/sosor.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ subroutine sosor(nroots,xmass,x,y) implicit none real*4 x(*) @@ -44,7 +45,7 @@ subroutine sosor(nroots,xmass,x,y) c .18*0.000d0, 0.0000d0, 5*0.000d0/ ************************************************************************ -* ORD at 6 nm values +* ORD at 6 nm values * conversion from R to alpha: * P. L. Polavarapu and D. K. Chakraborty * Chem.Phys. 240 (1999) page 1 @@ -55,7 +56,7 @@ subroutine sosor(nroots,xmass,x,y) c xmass=xmass+ams(idint(xyz(4,i))) c enddo - xlam(1)=632.8 + xlam(1)=632.8 xlam(2)=589.3 xlam(3)=579. xlam(4)=546. @@ -72,9 +73,9 @@ subroutine sosor(nroots,xmass,x,y) do i=1,nroots xau =x(i) c measurement point - eau =1.d+7/xlam(j)/2.19474625d+5 + eau =1.d+7/xlam(j)/2.19474625d+5 c R in au (input in 10-40 cgs) taken from TM - rau =y(i)/64604.8 + rau =y(i)/64604.8 c beta r1(j)=r1(j)+(2.*137.036/3.)*rau/(xau**2-eau**2) enddo @@ -90,10 +91,10 @@ subroutine sosor(nroots,xmass,x,y) close(33) endif - write(*,*) + write(*,*) write(*,*) 'SOS specific optical rotation ' - write(*,*) 'including Lorentz factor for common solvent (n=1.4)' - write(*,*) 'lambda [eV] alpha[grad*cm^3*g^-1*dm^-1]' + write(*,*) 'including Lorentz factor for common solvent (n=1.4)' + write(*,*) 'lambda [eV] alpha[grad*cm^3*g^-1*dm^-1]' do j=1,6 if(j.eq.2)then write(*,142) xlam(j),1.d+7/(8065.54093*xlam(j)), @@ -103,10 +104,9 @@ subroutine sosor(nroots,xmass,x,y) . r1(j) endif enddo - write(*,*) + write(*,*) 142 format(f6.1,f6.2,2f12.2,' ##') 143 format(f6.1,f6.2,2f12.2) end - diff --git a/srpapack.f b/srpapack.f index d9046ba..367afa7 100755 --- a/srpapack.f +++ b/srpapack.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ccccccccccccccccccccccccccccccccccccccccccccccccccccccc c sRPA routine c ccccccccccccccccccccccccccccccccccccccccccccccccccccccc @@ -38,7 +39,7 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) real*4 apb(n*(n+1)/2),xmy(n,nroots) real*4 eci(n) real*4 summe,x,y,omsqi,vl,vu - real*8 thr + real*8 thr integer, allocatable ::iwork(:),isuppz(:) real*4, allocatable ::u(:,:),v(:,:),w(:,:) @@ -48,7 +49,7 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) logical ggavec ! allocate(ambsqr(n*(n+1)/2), - allocate(e(n),u(n,n),v(n,n),w(n,n),stat=ierror) + allocate(e(n),u(n,n),v(n,n),w(n,n),stat=ierror) if(ierror.ne.0) stop 'allocation error (rpasolve)' @@ -67,7 +68,7 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) c form product: v = (a-b)^0.5 * w - call ssymm('l','l',n,n,1.e0,U,n,W,n,0.e0,V,n) + call ssymm('l','l',n,n,1.e0,U,n,W,n,0.e0,V,n) ! call prmat4(6,V,n,n,'M') ! for debugging: print M matrix (V) @@ -77,11 +78,11 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) c set variables for RPA diagonalization lwork =26*n liwork=10*n - vl=0 + vl=0 vu=thr**2.0 ! set nroot threshold to Ethr^2 allocate(z(n,n),work(lwork) - . ,iwork(liwork),isuppz(n),stat=ierror) - if(ierror.ne.0) stop 'allocation error (rpasolve)' + . ,iwork(liwork),isuppz(n),stat=ierror) + if(ierror.ne.0) stop 'allocation error (rpasolve)' write(*,*)'calculate eigenvalues of (A-B)^0.5*(A+B)*(A-B)^0.5 ...' call ssyevr('V','V','U',n,v,n,vl,vu,il,iu,1.e-6, @@ -91,11 +92,11 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) if(info.ne.0.or.nroots.lt.1) stop 'RPA diag failed' deallocate(v,work,iwork,isuppz,stat=ierror) if(ierror.ne.0) stop 'deallocation after RPA diag failed' - + ! testing print Z ! call prmat4(6,z,n,n,'Z') - if(TPA==.false.)then + if((TPA .eqv. .false.) .and. (FULL2PA .eqv. .false.))then ij=0 do i=1,n ij=ij+i @@ -117,8 +118,8 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) do i=1,n do j=1,i k=k+1 - xpy(i,nro)=xpy(i,nro)+ambsqr(k)*z(j,nro)/sqrt(eci(nro)) ! dividing by sqrt(eci) yields correct norm - xpy(j,nro)=xpy(j,nro)+ambsqr(k)*z(i,nro)/sqrt(eci(nro)) + xpy(i,nro)=xpy(i,nro)+ambsqr(k)*z(j,nro)/sqrt(eci(nro)) ! dividing by sqrt(eci) yields correct norm + xpy(j,nro)=xpy(j,nro)+ambsqr(k)*z(i,nro)/sqrt(eci(nro)) enddo enddo @@ -130,8 +131,8 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) do i=1,n do j=1,i k=k+1 - xmy(i,nro)=xmy(i,nro)+apb(k)*xpy(j,nro) - xmy(j,nro)=xmy(j,nro)+apb(k)*xpy(i,nro) + xmy(i,nro)=xmy(i,nro)+apb(k)*xpy(j,nro) + xmy(j,nro)=xmy(j,nro)+apb(k)*xpy(i,nro) enddo enddo @@ -152,7 +153,7 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) c write(*,'(''x '',10f8.4)')(xpy(i,nro),i=1,n) c write(*,'(''y '',10f8.4)')(xmy(i,nro),i=1,n) c write(*,*) 'norm',summe -c write(*,*) 'e ',eci(nro) +c write(*,*) 'e ',eci(nro) c write(*,'(''x+y'',10f8.4)')(xpy(i,nro),i=1,n) ! norm the vectors ! summe=1.0/sqrt(summe) @@ -186,11 +187,11 @@ subroutine srpapack(n,thr,ambsqr,apb,eci,xpy,xmy,nroots,ggavec) ! enddo if (ggavec) then - call printvectda(ggavec,n,nroots,z,e) + call printvectda(ggavec,n,nroots,z,e) endif - - deallocate(z,stat=ierror) + + deallocate(z,stat=ierror) c deallocate(ambsqr,w5,z,stat=ierror) return end @@ -216,15 +217,15 @@ subroutine smatpow(n,a) allocate(iwork(liwork),stat=ierror) if(ierror.ne.0) stop 'allocation error (iwork in matpow)' -c allocate(c(n*n),w(n*5),e(n),stat=ierror) +c allocate(c(n*n),w(n*5),e(n),stat=ierror) allocate(c(n*n),w(lwork),e(n),stat=ierror) - if(ierror.ne.0) stop 'allocation error (matpow)' + if(ierror.ne.0) stop 'allocation error (matpow)' + - c call shqrii(a,n,n,w,e,c) ! old routine - not used c call sspev('V','U',n,a,e,c,n,w,info) ! alternative LAPACK routine (not used) c used LAPACK routine using divide-and-conquer algorithm (slightly faster than sspev) - call sspevd('V','U',n,a,e,c,n,w,lwork,iwork,liwork,info) + call sspevd('V','U',n,a,e,c,n,w,lwork,iwork,liwork,info) if(e(1).lt.0) stop 'matrix power impossible' c take square root of diagonal elements do i=1,n @@ -248,8 +249,8 @@ subroutine smatpow(n,a) !$omp end do !$omp end parallel -c deallocate(c,w,e,stat=ierror) - deallocate(c,w,e,iwork,stat=ierror) +c deallocate(c,w,e,stat=ierror) + deallocate(c,w,e,iwork,stat=ierror) return end @@ -292,7 +293,7 @@ subroutine sblow_fast(n,a,b) !$omp end parallel return end - + subroutine sUnblow_fast(n,a,b) c blow up symmetric matrix to full size implicit none @@ -311,7 +312,7 @@ subroutine sUnblow_fast(n,a,b) !$omp end do !$omp end parallel return - end + end subroutine dblow_fast(n,a,b) c blow up symmetric matrix to full size @@ -333,7 +334,7 @@ subroutine dblow_fast(n,a,b) !$omp end parallel return end - + subroutine dUnblow_fast(n,a,b) c blow up symmetric matrix to full size implicit none @@ -352,4 +353,4 @@ subroutine dUnblow_fast(n,a,b) !$omp end do !$omp end parallel return - end + end diff --git a/stda_manual.pdf b/std2_manual.pdf old mode 100755 new mode 100644 similarity index 50% rename from stda_manual.pdf rename to std2_manual.pdf index 984edba8c621f048da061044bddcd1b06d7b8724..fbbdaba5e67a8ff3c2d7ffee9c363ba4b266432c GIT binary patch delta 196398 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 delta 188515 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 A<^TWy diff --git a/stda-rw.f b/stda-rw.f index 2c2b100..02006f5 100755 --- a/stda-rw.f +++ b/stda-rw.f @@ -1,21 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! - +!! ------------------------------------------------------------------------ ! adapted by Marc de Wegifosse 2018-2019 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC @@ -53,13 +53,13 @@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, - . ax,alphak,betaj,fthr,nvec) + . ax,alphak,betaj,fthr,nvec,nprims) use commonlogicals use commonresp use omp_lib IMPLICIT NONE c input: - integer ncent,nmo,nao + integer ncent,nmo,nao,nprims integer iaoat(*) real*8 thr,thrp,ax,othr,vthr real*8 c(*),eps(*),occ(*),xyz(4,*) @@ -93,6 +93,7 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, real*4 :: start_time, end_time, stda_time integer :: STATUS + integer :: nocc ccccccccccccc real*4 vu,vl integer,allocatable ::iwork(:) @@ -175,12 +176,20 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, write(*,*)'max. CSF selection range (eV) : ', fthr fthr = fthr /27.211385050d0 endif - write(*,*)'triplet : ', triplet + write(*,*)'triplet ', triplet + + If(Xcore)then + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)moci=moci+1 + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 + enddo + else do i=1,nmo if(occ(i).gt.1.990d0.and.eps(i).gt.othr)moci=moci+1 if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 enddo + endif allocate( . xl(moci*(moci+1)/2),yl(moci*(moci+1)/2), @@ -198,7 +207,57 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, write(*,*)'MOs in TDA : ', moci -! make two cases: 1st one) eigenvectors are needed, 2) eigenvectors are not needed + if(Xcore)then + if(eigvec.or.nto) then ! we want eigenvectors to be printed out + allocate(vecchk(nmo), stat=ierr) + if(ierr.ne.0)stop 'allocation failed for vecchk' + vecchk=0 + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + else ! no eigenvectors needed + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + endif + else + ! make two cases: 1st one) eigenvectors are needed, 2) eigenvectors are not needed if(eigvec.or.nto) then ! we want eigenvectors to be printed out allocate(vecchk(nmo), stat=ierr) if(ierr.ne.0)stop 'allocation failed for vecchk' @@ -248,6 +307,8 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, enddo endif + endif + no=ihomo nv=moci-no write(*,*)'oMOs in TDA: ', no @@ -282,21 +343,78 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, c CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + nocc=0 + do i=1,nmo + nocc=nocc+idint(occ(i)) + enddo + nocc=nocc/2 open(unit=31,file='xlint',form='unformatted',status='old') read(31) help +! dipole(1)=0.0 +! do i=1, ncent +! dipole(1)=dipole(1)+xyz(1,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(1)=dipole(1)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,xl) close(31,status='delete') open(unit=32,file='ylint',form='unformatted',status='old') read(32) help +! dipole(2)=0.0 +! do i=1, ncent +! dipole(2)=dipole(2)+xyz(2,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(2)=dipole(2)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,yl) close(32,status='delete') open(unit=33,file='zlint',form='unformatted',status='old') read(33) help +! dipole(3)=0.0 +! do i=1, ncent +! dipole(3)=dipole(3)+xyz(3,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(3)=dipole(3)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,zl) close(33,status='delete') +! write(*,*) +! write(*,*)'Dipole moment (au)' +! write(*,*)' X Y Z ' +! write(*,'(3f9.4,'' total : '',f8.3)') +! . dipole(1), dipole(2), dipole(3), +! .dsqrt(dipole(1)**2.0+dipole(2)**2.0+dipole(3)**2.0) +! write(*,*) +! write(*,*)'Dipole moment (Debye)' +! write(*,*)' X Y Z ' +! write(*,'(3f9.4,'' total : '',f8.3)') +! . dipole(1)*2.5418, dipole(2)*2.5418, dipole(3)*2.5418, +! .dsqrt(dipole(1)**2.0+dipole(2)**2.0+dipole(3)**2.0)*2.5418 + write(*,*) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC c @@ -492,7 +610,7 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, write(740)pia(1:ncent,i) enddo close(740) - deallocate(clow) + if(XsTD.eqv..false.)deallocate(clow) write(*,'(/'' SCF atom population (using active MOs):'')') write(*,'(10F7.3)')q2(1:ncent)*2.0 @@ -700,10 +818,27 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, allocate( apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2), . stat=ierr ) if(ierr.ne.0)stop 'allocation failed for A+B or A-B' - + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call xstd_rpamat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call xstd_rpamat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call xstd_rpamat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + deallocate(clow) + else call rrpamat_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,gamj . ,gamk,apb,ambsqr,moci) - + endif ***************************** c Linear Response functions * ***************************** @@ -714,9 +849,9 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, open(unit=53,file='amb',form='unformatted',status='old') read(53) amb close(53,status='delete') - if(velo_OR==.false.)call optrot(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..false.)call optrot(nci,apb,amb,iconf,maxconf, .xl,yl,zl,moci,no,nv,xm,ym,zm,xmolw) - if(velo_OR==.true.)call optrot_velo(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..true.)call optrot_velo(nci,apb,amb,iconf,maxconf, .xv,yv,zv,moci,no,nv,xm,ym,zm,xmolw) call cpu_time(end_time) print '("Opt. Rot. Time = ",f12.2," minutes.")' @@ -930,16 +1065,40 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, ! construct ( 0.5 * B ) for X trafo (velocity correction) and print to file * !******************************************************************************** if(velcorr) then + if(XsTD)then + call Xsrtdacorr(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed + . ,clow,nao,moci) + else call rtdacorr_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed . ,gamj,gamk,moci) + endif endif !******************************************************************************** allocate( hci(nci,nci), stat=ierr ) if(ierr.ne.0)stop 'allocation failed for TDA matrix' write(*,*)'calculating TDA matrix ...' + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call Xstda_mat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call Xstda_mat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call Xstda_mat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + deallocate(clow) + else call rtdamat_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,gamj . ,gamk,hci,moci) + endif deallocate(gamj,gamk) ! call prmat4(6,hci,nci,nci,'A-Matrix') !******************************************************************************** @@ -1438,13 +1597,14 @@ SUBROUTINE stda_rw(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, *********************************************************************** subroutine ptselect_rw(nex,ncent,no,nv,nexpt,mxcnf,iconf,kconf, . dak,dax,ed,edpt,gamj,gamk,thrp,new,moci) + use commonlogicals use omp_lib implicit none integer, intent(in) :: nex,ncent,nexpt,mxcnf integer, intent(in) :: kconf(mxcnf,2),no,nv integer, intent (inout) :: iconf(mxcnf,2) integer, intent (out) :: new - real*8, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) + real*4, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) real*8, intent(in) :: dak,dax,thrp,edpt(mxcnf) real*8, intent(inout) :: ed(mxcnf) real*4, allocatable :: qia(:,:),pia(:,:) @@ -1477,7 +1637,11 @@ subroutine ptselect_rw(nex,ncent,no,nv,nexpt,mxcnf,iconf,kconf, read(710)pij(1:ncent,ij) enddo enddo - close(710) + if(XsTD)then + close(710,status='delete') + else + close(710) + endif Do i=no+1, moci k=i-no Do j=no+1, i-1 @@ -1488,8 +1652,16 @@ subroutine ptselect_rw(nex,ncent,no,nv,nexpt,mxcnf,iconf,kconf, ij=lin(k,k) read(72)qab(1:ncent,ij) enddo - close(72) - close(73) + if(XsTD)then + close(72,status='delete') + else + close(72) + endif + if(XsTD)then + close(73,status='delete') + else + close(73) + endif Do i=1, no Do j=no+1, moci ij=(i-1)*nv+j-no @@ -1497,8 +1669,16 @@ subroutine ptselect_rw(nex,ncent,no,nv,nexpt,mxcnf,iconf,kconf, read(740)pia(1:ncent,ij) enddo enddo - close(74) - close(740) + if(XsTD)then + close(74,status='delete') + else + close(74) + endif + if(XsTD)then + close(740,status='delete') + else + close(740) + endif new=0 pt2=0.0d0 @@ -1580,7 +1760,7 @@ subroutine rrpamat_rw(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed, use omp_lib implicit none integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) - real*8, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) + real*4, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) real*4, allocatable :: qia(:,:),pia(:,:) real*4, allocatable :: qab(:,:),qij(:,:),pij(:,:) real*8, intent(in) :: dak,dax,ed(mxcnf) @@ -1780,7 +1960,7 @@ subroutine rtdamat_rw(nci,ncent,no,nv,mxcnf,iconf,dak,dax use omp_lib implicit none integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) - real*8, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) + real*4, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) real*4, allocatable :: qia(:,:),pia(:,:) real*4, allocatable :: qab(:,:),qij(:,:),pij(:,:) real*8, intent(in) :: dak,dax,ed(mxcnf) @@ -1869,7 +2049,7 @@ real*4 function integral(q_ij,q_ab,gamma,ncent) implicit none ! Compute semi-empirical integrals directly integer, intent(in) :: ncent - real*8, intent(in) :: gamma(1:ncent,1:ncent) + real*4, intent(in) :: gamma(1:ncent,1:ncent) real*4 :: q_ij(1:ncent), q_ab(1:ncent), intermediate(1:ncent) real*4 :: sdot call ssymv('u',ncent,1.0,gamma,ncent,q_ab,1,0.0,intermediate,1) @@ -1885,7 +2065,7 @@ subroutine rtdacorr_rw(nci,ncent,no,nv,mxcnf,iconf,dak,dax use omp_lib implicit none integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) - real*8, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) + real*4, intent(in) :: gamj(1:ncent,1:ncent),gamk(1:ncent,1:ncent) real*4, allocatable :: qia(:,:),pia(:,:) real*4, allocatable :: qab(:,:),qij(:,:),pij(:,:) real*8, intent(in) :: dak,dax,ed(mxcnf) @@ -1902,7 +2082,6 @@ subroutine rtdacorr_rw(nci,ncent,no,nv,mxcnf,iconf,dak,dax allocate(qia(ncent,mxcnf),qab(ncent,nv*(nv+1)/2), . pij(ncent,no*(no+1)/2),pia(ncent,mxcnf)) - open(unit=710,file='pij',form='unformatted',status='old') open(unit=72,file='qaa',form='unformatted',status='old') open(unit=73,file='qab',form='unformatted',status='old') diff --git a/stda-rw_dual.f b/stda-rw_dual.f index 094fdf1..7b564bb 100755 --- a/stda-rw_dual.f +++ b/stda-rw_dual.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ ! adapted by Marc de Wegifosse 2018-2019 @@ -93,6 +94,7 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, real*4 :: start_time, end_time, stda_time integer :: STATUS + integer :: nocc ccccccccccccc real*4 vu,vl integer,allocatable ::iwork(:) @@ -183,10 +185,18 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, endif write(*,*)'triplet : ', triplet + If(Xcore)then + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)moci=moci+1 + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 + enddo + + else do i=1,nmo if(occ(i).gt.1.990d0.and.eps(i).gt.othr)moci=moci+1 if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 enddo + endif allocate( . xl(moci*(moci+1)/2),yl(moci*(moci+1)/2), @@ -204,6 +214,58 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, write(*,*)'MOs in TDA : ', moci + write(*,*)'MOs in TDA : ', moci + + if(Xcore)then + if(eigvec.or.nto) then ! we want eigenvectors to be printed out + allocate(vecchk(nmo), stat=ierr) + if(ierr.ne.0)stop 'allocation failed for vecchk' + vecchk=0 + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + else ! no eigenvectors needed + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore/2)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + endif + else ! make two cases: 1st one) eigenvectors are needed, 2) eigenvectors are not needed if(eigvec.or.nto) then ! we want eigenvectors to be printed out allocate(vecchk(nmo), stat=ierr) @@ -254,6 +316,8 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, enddo endif + endif + no=ihomo nv=moci-no write(*,*)'oMOs in TDA: ', no @@ -288,21 +352,78 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, c CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + nocc=0 + do i=1,nmo + nocc=nocc+idint(occ(i)) + enddo + nocc=nocc/2 open(unit=31,file='xlint',form='unformatted',status='old') read(31) help +! dipole(1)=0.0 +! do i=1, ncent +! dipole(1)=dipole(1)+xyz(1,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(1)=dipole(1)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,xl) close(31,status='delete') open(unit=32,file='ylint',form='unformatted',status='old') read(32) help +! dipole(2)=0.0 +! do i=1, ncent +! dipole(2)=dipole(2)+xyz(2,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(2)=dipole(2)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,yl) close(32,status='delete') open(unit=33,file='zlint',form='unformatted',status='old') read(33) help +! dipole(3)=0.0 +! do i=1, ncent +! dipole(3)=dipole(3)+xyz(3,i)*xyz(4,i) +! enddo +! do k=1,nocc +! Do i=1,nao +! jwrk=(k-1)*nao+i +! do j=1,nao +! iwrk=(k-1)*nao+j +! dipole(3)=dipole(3)+2.0*c(jwrk)*c(iwrk)*help(lin(i,j)) +! enddo +! enddo +! enddo call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,zl) close(33,status='delete') +! write(*,*) +! write(*,*)'Dipole moment (au)' +! write(*,*)' X Y Z ' +! write(*,'(3f9.4,'' total : '',f8.3)') +! . dipole(1), dipole(2), dipole(3), +! .dsqrt(dipole(1)**2.0+dipole(2)**2.0+dipole(3)**2.0) +! write(*,*) +! write(*,*)'Dipole moment (Debye)' +! write(*,*)' X Y Z ' +! write(*,'(3f9.4,'' total : '',f8.3)') +! . dipole(1)*2.5418, dipole(2)*2.5418, dipole(3)*2.5418, +! .dsqrt(dipole(1)**2.0+dipole(2)**2.0+dipole(3)**2.0)*2.5418 + write(*,*) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC c @@ -576,12 +697,12 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, endif !write(*,*)mo_list(i) enddo - deallocate(clow) + if(XsTD.eqv..false.)deallocate(clow) allocate(mocc_1(n_MO(1)),mocc_2(n_MO(2))) j=1 k=1 Do i=1,no - if(mo_list(i)==.true.)then + if(mo_list(i).eqv..true.)then mocc_1(j)=i j=j+1 else @@ -591,9 +712,9 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, enddo !write(*,*)mocc_1 !write(*,*)mocc_2 - write(*,'(a,f6.2,a,i)')' num. of occ. MOs with a + write(*,'(a,f6.2,a,i7)')' num. of occ. MOs with a . threshold of',thresh(1),' eV :',n_MO(1) - write(*,'(a,f6.2,a,i)')' num. of occ. MOs with a + write(*,'(a,f6.2,a,i7)')' num. of occ. MOs with a . threshold of',thresh(2),' eV :',n_MO(2) thresh=thresh/27.211385050d0 @@ -829,10 +950,28 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, allocate( apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2), . stat=ierr ) if(ierr.ne.0)stop 'allocation failed for A+B or A-B' - + if(ierr.ne.0)stop 'allocation failed for A+B or A-B' + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call xstd_rpamat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call xstd_rpamat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call xstd_rpamat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + deallocate(clow) + else call rrpamat_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,gamj . ,gamk,apb,ambsqr,moci) - + endif ***************************** c Linear Response functions * ***************************** @@ -843,9 +982,9 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, open(unit=53,file='amb',form='unformatted',status='old') read(53) amb close(53,status='delete') - if(velo_OR==.false.)call optrot(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..false.)call optrot(nci,apb,amb,iconf,maxconf, .xl,yl,zl,moci,no,nv,xm,ym,zm,xmolw) - if(velo_OR==.true.)call optrot_velo(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..true.)call optrot_velo(nci,apb,amb,iconf,maxconf, .xv,yv,zv,moci,no,nv,xm,ym,zm,xmolw) call cpu_time(end_time) print '("Opt. Rot. Time = ",f12.2," minutes.")' @@ -1059,16 +1198,40 @@ SUBROUTINE stda_rw_dual(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr, ! construct ( 0.5 * B ) for X trafo (velocity correction) and print to file * !******************************************************************************** if(velcorr) then + if(XsTD)then + call Xsrtdacorr(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed + . ,clow,nao,moci) + else call rtdacorr_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed . ,gamj,gamk,moci) + endif endif !******************************************************************************** allocate( hci(nci,nci), stat=ierr ) if(ierr.ne.0)stop 'allocation failed for TDA matrix' write(*,*)'calculating TDA matrix ...' + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call Xstda_mat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call Xstda_mat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call Xstda_mat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + deallocate(clow) + else call rtdamat_rw(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,gamj . ,gamk,hci,moci) + endif deallocate(gamj,gamk) ! call prmat4(6,hci,nci,nci,'A-Matrix') !******************************************************************************** diff --git a/stda.f b/stda.f index 6bc2bd9..bad4665 100755 --- a/stda.f +++ b/stda.f @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ncent: number of atoms C nmo : number of MOs @@ -50,13 +51,13 @@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, - . ax,alphak,betaj,fthr,nvec) + . ax,alphak,betaj,fthr,nvec,nprims) use commonlogicals use commonresp use omp_lib IMPLICIT NONE c input: - integer ncent,nmo,nao + integer ncent,nmo,nao,nprims integer iaoat(*) real*8 thr,thrp,ax,othr,vthr real*8 c(*),eps(*),occ(*),xyz(4,*) @@ -90,6 +91,7 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, real*4 :: start_time, end_time, stda_time integer :: STATUS + integer :: nocc ccccccccccccc real*4 vu,vl integer,allocatable ::iwork(:) @@ -174,10 +176,20 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, endif write(*,*)'triplet : ', triplet + If(Xcore)then + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore2.and.i.ge.Ecore)then + moci=moci+1 + endif + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 + enddo + + else do i=1,nmo if(occ(i).gt.1.990d0.and.eps(i).gt.othr)moci=moci+1 if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)moci=moci+1 enddo + endif allocate( . xl(moci*(moci+1)/2),yl(moci*(moci+1)/2), @@ -195,6 +207,56 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, write(*,*)'MOs in TDA : ', moci + if(Xcore)then + if(eigvec.or.nto) then ! we want eigenvectors to be printed out + allocate(vecchk(nmo), stat=ierr) + if(ierr.ne.0)stop 'allocation failed for vecchk' + vecchk=0 + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore2.and.i.ge.Ecore)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + vecchk(i)=moci + endif + enddo + else ! no eigenvectors needed + moci=0 + do i=1,nmo + if(occ(i).gt.1.990d0.and.i.le.Ecore2.and.i.ge.Ecore)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + ihomo=moci + do i=1,nmo + if(occ(i).lt.0.010d0.and.eps(i).lt.vthr)then + moci=moci+1 + do j=1,nao + ca(j+(moci-1)*nao)=c(j+(i-1)*nao) + enddo + epsi(moci)=eps(i) + endif + enddo + endif + else ! make two cases: 1st one) eigenvectors are needed, 2) eigenvectors are not needed if(eigvec.or.nto) then ! we want eigenvectors to be printed out allocate(vecchk(nmo), stat=ierr) @@ -245,6 +307,8 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, enddo endif + endif + no=ihomo nv=moci-no write(*,*)'oMOs in TDA: ', no @@ -279,6 +343,11 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, c CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC + nocc=0 + do i=1,nmo + nocc=nocc+idint(occ(i)) + enddo + nocc=nocc/2 open(unit=31,file='xlint',form='unformatted',status='old') read(31) help call onetri(1,help,dum,scr,ca,nao,moci) @@ -294,6 +363,7 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, call onetri(1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,zl) close(33,status='delete') + write(*,*) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC c @@ -315,6 +385,8 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, read(36) help call onetri(-1,help,dum,scr,ca,nao,moci) call shrink(moci,dum,zm) + print '("Transform to MO space = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 close(36,status='delete') CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC @@ -344,17 +416,28 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC open(unit=40,file='sint',form='unformatted',status='old') + call cpu_time(start_time) read(40) help + call cpu_time(end_time) + print '("Reading sint = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 write(*,*) 'ints done.' close(40,status='delete') write(*,*) 'S^1/2 ...' + call cpu_time(start_time) call makel(nao,help,x) + call cpu_time(end_time) + print '("S^1/2 = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 + call cpu_time(start_time) call dgemm('n','n',nao,moci,nao,1.d0,X,nao,CA,nao,0.d0,SCR,nao) write(*,*) 'S^1/2 orthogonalized MO coefficients done.' - + call cpu_time(end_time) + print '("orthogonalized = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 c check and copy to real*4 array do i=1,moci sss=0.0d0 @@ -678,7 +761,9 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, enddo !$omp end do !$omp end parallel + if(XsTD.eqv..false.)then deallocate(clow) ! orthogonalized MO coefficients not needed any more + endif ! call cpu_time(hilf) ! write(*,*) 'time elapsed:',hilf-time @@ -711,9 +796,38 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, allocate( apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2), . stat=ierr ) if(ierr.ne.0)stop 'allocation failed for A+B or A-B' - + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call xstd_rpamat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call xstd_rpamat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call xstd_rpamat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + if(FULL2PA.eqv..false.)then + deallocate(clow) + endif + else + if(full)then + write(*,*)'( | ) integrals are computed exactly' + call rrpamat_full(nci,ncent,no,nv,maxconf,iconf, + . ak,ax,ed,apb,ambsqr,ca,nao,moci,nprims,epsi) + elseif(direct_full)then + call rrpamat_full_direct(nci,ncent,no,nv,maxconf,iconf, + . ak,ax,ed,apb,ambsqr,ca,nao,moci,nprims,epsi) + else call rrpamat(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,pia . ,qia,pij,qab,apb,ambsqr) + endif + endif ***************************** c Linear Response functions * @@ -725,9 +839,9 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, open(unit=53,file='amb',form='unformatted',status='old') read(53) amb close(53,status='delete') - if(velo_OR==.false.)call optrot(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..false.)call optrot(nci,apb,amb,iconf,maxconf, .xl,yl,zl,moci,no,nv,xm,ym,zm,xmolw) - if(velo_OR==.true.)call optrot_velo(nci,apb,amb,iconf,maxconf, + if(velo_OR.eqv..true.)call optrot_velo(nci,apb,amb,iconf,maxconf, .xv,yv,zv,moci,no,nv,xm,ym,zm,xmolw) call cpu_time(end_time) print '("Opt. Rot. Time = ",f12.2," minutes.")' @@ -898,6 +1012,25 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, ***************************** c Lin. Response func. 2PA * ***************************** + if(FULL2PA)then + if(triplet) stop 'not available' + call cpu_time(start_time) + allocate( amb(nci*(nci+1)/2), stat=ierr ) + if(ierr.ne.0)stop 'allocation failed for A-B' + open(unit=53,file='amb',form='unformatted',status='old') + read(53) amb + close(53,status='delete') + call lresp_2PA_full(nci,apb,amb,iconf,maxconf,xl,yl,zl,moci, + . no,nv,eci,uci,hci,nroot,ncent,ax,nao,clow) + deallocate(clow) + call cpu_time(end_time) + print '("Lresp Time = ",f12.2," minutes.")' + . ,(end_time-start_time)/60.0 + print '("sTD-DFT Time = ",f12.2," minutes.")' + . ,(end_time-stda_time)/60.0 + write(*,*) + CALL EXIT(0) + else if(TPA)then if(triplet) stop 'not available' call cpu_time(start_time) @@ -905,8 +1038,7 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, if(ierr.ne.0)stop 'allocation failed for A-B' open(unit=53,file='amb',form='unformatted',status='old') read(53) amb - close(53) - + close(53,status='delete') call lresp_2PA_SP(nci,apb,amb,iconf,maxconf,xl,yl,zl,moci, . no,nv,eci,uci,hci,nroot) @@ -927,6 +1059,7 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, CALL EXIT(0) !important because vectors are not normalized the same way endif + endif deallocate(apb,ambsqr) !******************************************************************************** open(unit=53,file='amb',form='unformatted',status='old') @@ -942,16 +1075,45 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, ! construct ( 0.5 * B ) for X trafo (velocity correction) and print to file * !******************************************************************************** if(velcorr) then + if(XsTD)then + if(RSH_flag)then + call RSH_Xsrtdacorr(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed + . ,clow,nao,moci) + else + call Xsrtdacorr(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed + . ,clow,nao,moci) + endif + else call rtdacorr(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed . ,pia,qia,pij,qab) + endif endif !******************************************************************************** allocate( hci(nci,nci), stat=ierr ) if(ierr.ne.0)stop 'allocation failed for TDA matrix' write(*,*)'calculating TDA matrix ...' + if(XsTD)then + if(RSH_flag)then + if(RSH_sub)then + call Xstda_mat_RSH2(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + else + call Xstda_mat_RSH(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + else + call Xstda_mat(nci,ncent,no,nv,maxconf,iconf, + .ak,ax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alphak,betaj, + .epsi) + endif + deallocate(clow) + else call rtdamat(nci,ncent,no,nv,maxconf,iconf,ak,ax,ed,pia . ,qia,pij,qab,hci) + endif ! call prmat4(6,hci,nci,nci,'A-Matrix') !******************************************************************************** @@ -1339,8 +1501,10 @@ SUBROUTINE stda(ncent,nmo,nao,xyz,c,eps,occ,iaoat,thr,thrp, ! call hyperpol_sos(nroot,nci,eci,uci,hci,xl,yl,zl,moci, ! .maxconf,iconf,no,nv) !to test the moments -! call tpa_sos(nroot,nci,eci,uci,hci,xl,yl,zl,moci, -! .maxconf,iconf,no,nv) !idem, it gives also information about how lresp relaxes + if(SOS_2PA)then + call tpa_sos(nroot,nci,eci,uci,hci,xl,yl,zl,moci, + .maxconf,iconf,no,nv) !idem, it gives also information about how lresp relaxes + endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! optional: print eigenvectors in TM format @@ -2007,9 +2171,9 @@ subroutine setrep(rep) * Given orbital indeces i1 and i2, lin() returns index in the linear array * **************************************************************************** - integer*4 function lin(i1,i2) + integer function lin(i1,i2) integer i1,i2 - integer*4 idum1,idum2 + integer idum1,idum2 idum1=max(i1,i2) idum2=min(i1,i2) lin=idum2+idum1*(idum1-1)/2 diff --git a/stdacommon.f90 b/stdacommon.f90 index cd87345..edd73ff 100755 --- a/stdacommon.f90 +++ b/stdacommon.f90 @@ -22,7 +22,8 @@ module stdacommon real*8, allocatable :: cxip(:),eta(:,:) integer, allocatable :: ipat(:),ipty(:),ipao(:),iaoat(:) character*2, allocatable :: atnam(:) - + logical :: spherical + real*8 :: rsh,rsh_ax,rsh_beta,rsh2 end module stdacommon ! xtb common block @@ -39,8 +40,9 @@ end module kshiftcommon module commonlogicals logical triplet,rpachk,eigvec,screen,dokshift,printexciton,velcorr logical aniso - logical resp,TPA,aresp,ESA,smp2,bfw,spinflip,rw,pt_off,nto,sf_s2 - logical optrota,velo_OR,rw_dual + logical resp,TPA,aresp,ESA,smp2,bfw,spinflip,rw,pt_off,nto,sf_s2,multipole + logical optrota,velo_OR,rw_dual,XsTD,cint,RSH_flag,RSH_sub,SOS_2PA,Xcore + logical FULL2PA,full,direct_full end module commonlogicals ! some variables for the response functions @@ -48,5 +50,14 @@ module commonresp integer :: num_freq integer :: num_trans integer :: state2opt - integer :: Nnto + integer :: Nnto, Ecore, Ecore2 end module commonresp + + module commonlibcint + integer :: n_env, nbas,n_at + integer, allocatable :: atm(:,:), bas(:,:) + integer, allocatable :: di_all(:), sum_di(:) + double precision, allocatable :: env(:) + integer,allocatable :: bas_start(:),bas_end(:),prim_at(:),counter_at(:) + integer, allocatable :: Q_atom(:) + end module commonlibcint diff --git a/stringmod.f90 b/stringmod.f90 index 8e53882..46e64a1 100755 --- a/stringmod.f90 +++ b/stringmod.f90 @@ -1,20 +1,21 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ module precision ! Real kinds @@ -43,21 +44,21 @@ module strings private :: write_dr,write_sr,write_di,write_si private :: writeq_dr,writeq_sr,writeq_di,writeq_si -interface value ! Generic operator for converting a number string to a - ! number. Calling syntax is 'call value(numstring,number,ios)' - ! where 'numstring' is a number string and 'number' is a - ! real number or an integer (single or double precision). +interface value ! Generic operator for converting a number string to a + ! number. Calling syntax is 'call value(numstring,number,ios)' + ! where 'numstring' is a number string and 'number' is a + ! real number or an integer (single or double precision). module procedure value_dr module procedure value_sr module procedure value_di module procedure value_si end interface -interface writenum ! Generic interface for writing a number to a string. The +interface writenum ! Generic interface for writing a number to a string. The ! number is left justified in the string. The calling syntax ! is 'call writenum(number,string,format)' where 'number' is ! a real number or an integer, 'string' is a character string - ! containing the result, and 'format' is the format desired, + ! containing the result, and 'format' is the format desired, ! e.g., 'e15.6' or 'i5'. module procedure write_dr module procedure write_sr @@ -68,7 +69,7 @@ module strings interface writeq ! Generic interface equating a name to a numerical value. The ! calling syntax is 'call writeq(unit,name,value,format)' where ! unit is the integer output unit number, 'name' is the variable - ! name, 'value' is the real or integer value of the variable, + ! name, 'value' is the real or integer value of the variable, ! and 'format' is the format of the value. The result written to ! the output unit has the form = . module procedure writeq_dr @@ -100,7 +101,7 @@ subroutine parse(str,delims,args,nargs) na=size(args) do i=1,na args(i)=' ' -end do +end do nargs=0 lenstr=len_trim(str) if(lenstr==0) return @@ -111,7 +112,7 @@ subroutine parse(str,delims,args,nargs) nargs=nargs+1 call split(str,delims,args(nargs)) call removebksl(args(nargs)) -end do +end do str=strsav end subroutine parse @@ -136,23 +137,23 @@ subroutine compact(str) do i=1,lenstr ch=str(i:i) ich=iachar(ch) - + select case(ich) - + case(9,32) ! space or tab character if(isp==0) then k=k+1 outstr(k:k)=' ' end if isp=1 - + case(33:) ! not a space, quote, or control character k=k+1 outstr(k:k)=ch isp=0 - + end select - + end do str=adjustl(outstr) @@ -177,10 +178,10 @@ subroutine removesp(str) do i=1,lenstr ch=str(i:i) ich=iachar(ch) - select case(ich) + select case(ich) case(0:32) ! space, tab, or control character - cycle - case(33:) + cycle + case(33:) k=k+1 outstr(k:k)=ch end select @@ -218,7 +219,7 @@ subroutine value_sr(str,rnum,ios) character(len=*)::str real(kr4) :: rnum -real(kr8) :: rnumd +real(kr8) :: rnumd call value_dr(str,rnumd,ios) if( abs(rnumd) > huge(rnum) ) then @@ -271,10 +272,10 @@ end subroutine value_si !********************************************************************** subroutine shiftstr(str,n) - + ! Shifts characters in in the string 'str' n positions (positive values ! denote a right shift and negative values denote a left shift). Characters -! that are shifted off the end are lost. Positions opened up by the shift +! that are shifted off the end are lost. Positions opened up by the shift ! are replaced by spaces. character(len=*):: str @@ -286,7 +287,7 @@ subroutine shiftstr(str,n) return end if if(n<0) str=str(nabs+1:)//repeat(' ',nabs) ! shift left -if(n>0) str=repeat(' ',nabs)//str(:lenstr-nabs) ! shift right +if(n>0) str=repeat(' ',nabs)//str(:lenstr-nabs) ! shift right return end subroutine shiftstr @@ -295,9 +296,9 @@ end subroutine shiftstr subroutine insertstr(str,strins,loc) -! Inserts the string 'strins' into the string 'str' at position 'loc'. +! Inserts the string 'strins' into the string 'str' at position 'loc'. ! Characters in 'str' starting at position 'loc' are shifted right to -! make room for the inserted string. Trailing spaces of 'strins' are +! make room for the inserted string. Trailing spaces of 'strins' are ! removed prior to insertion character(len=*):: str,strins @@ -329,7 +330,7 @@ subroutine delsubstr(str,substr) str=str(lensubstr+1:) else str=str(:ipos-1)//str(ipos+lensubstr:) -end if +end if return end subroutine delsubstr @@ -352,7 +353,7 @@ subroutine delall(str,substr) else str=str(:ipos-1)//str(ipos+lensubstr:) end if -end do +end do return end subroutine delall @@ -367,7 +368,7 @@ function uppercase(str) result(ucstr) character (len=len_trim(str)):: ucstr ilen=len_trim(str) -ioffset=iachar('A')-iachar('a') +ioffset=iachar('A')-iachar('a') iquote=0 ucstr=str do i=1,ilen @@ -436,7 +437,7 @@ subroutine readline(nunitr,line,ios) character (len=*):: line -do +do read(nunitr,'(a)', iostat=ios) line ! read input line if(ios /= 0) return line=adjustl(line) @@ -503,7 +504,7 @@ subroutine match(str,ipos,imatch) if(isum /= 0) then write(*,*) delim1,' has no matching delimiter' return -end if +end if imatch=i return @@ -593,7 +594,7 @@ subroutine trimzero(str) lstr=len_trim(str) do i=lstr,1,-1 ch=str(i:i) - if(ch=='0') cycle + if(ch=='0') cycle if(ch=='.') then str=str(1:i)//'0' if(ipos>0) str=trim(str)//trim(exp) @@ -717,9 +718,9 @@ subroutine split(str,delims,before,sep) ! Routine finds the first instance of a character from 'delims' in the ! the string 'str'. The characters before the found delimiter are ! output in 'before'. The characters after the found delimiter are -! output in 'str'. The optional output character 'sep' contains the -! found delimiter. A delimiter in 'str' is treated like an ordinary -! character if it is preceded by a backslash (\). If the backslash +! output in 'str'. The optional output character 'sep' contains the +! found delimiter. A delimiter in 'str' is treated like an ordinary +! character if it is preceded by a backslash (\). If the backslash ! character is desired in 'str', then precede it with another backslash. character(len=*) :: str,delims,before @@ -749,7 +750,7 @@ subroutine split(str,delims,before,sep) ibsl=1 cycle end if - ipos=index(delims,ch) + ipos=index(delims,ch) if(ipos == 0) then ! character is not a delimiter k=k+1 before(k:k)=ch @@ -817,6 +818,4 @@ end subroutine removebksl !********************************************************************** -end module strings - - +end module strings diff --git a/subprojects/libcint.wrap b/subprojects/libcint.wrap new file mode 100644 index 0000000..d7dc3ae --- /dev/null +++ b/subprojects/libcint.wrap @@ -0,0 +1,9 @@ +[wrap-file] +source_url = https://github.com/pierre-24/libcint-meson/releases/download/v0.3.0/libcint_v6.1.2.tar.gz +source_filename = libcint_v6.1.2.tar.gz +source_hash = e5e14786bc9d145279eacf0dd70dc774d148452a2a5df73f873ef031b9091dbd + +lead_directory_missing = libcint + +[provide] +libcint = libcint_dep diff --git a/sutda.f b/sutda.f index 7215dca..e6ec9fa 100755 --- a/sutda.f +++ b/sutda.f @@ -1,32 +1,33 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C ncent: number of atoms -C nmo : number of MOs +C nmo : number of MOs C nao : number of contracted AOs C xyz : array with atomic coordinates (1:3) and nuclear charge (4) in C Bohr C c : MO coefficients (nao*nmo) -C eps : MO energies (au) -C occ : occupation numbers +C eps : MO energies (au) +C occ : occupation numbers C csp : molecular orbital spin (alpha - 1, beta - 2) C iaoat: index array (1:nao) indicating on which atom the AO is centered -C thr : energy threshold in eV up to which energy the excited states +C thr : energy threshold in eV up to which energy the excited states C are computed = spectral range (input in eV) C thrp : threshold for perturbation selection of CSF (input) C ax : Fock exchange mixing parameter in DF used @@ -41,7 +42,7 @@ !!! used logicals from commonlogicals !!! C triplet: logical=.true. if triplet states are to be calculated C rpachk : logical=.true. if sTD-DFT is performed -C eigvec : logical=.true. print eigenvectors, ggavec is needed if eigvec and GGAs are used together +C eigvec : logical=.true. print eigenvectors, ggavec is needed if eigvec and GGAs are used together C nvec : integer, # roots for which eigenvectors are wanted C screen : prescreen in pt selection and for CSFs with small transition strengths C dokshift : shift A(ia,ia) elements if K(ia,ia) is small @@ -51,11 +52,11 @@ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, - . ax,alphak,betaj,fthr,nvec) + . ax,alphak,betaj,fthr,nvec) use commonlogicals use commonresp use omp_lib - IMPLICIT NONE + IMPLICIT NONE c input: integer ncent,nmo,nao integer iaoat(*) @@ -66,7 +67,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c local varibles: -c l=dipole lengths, v=dipole velocity (d/dxyz), m=angular momentum +c l=dipole lengths, v=dipole velocity (d/dxyz), m=angular momentum real*8, allocatable ::xla(:),yla(:),zla(:) real*8, allocatable ::xva(:),yva(:),zva(:) real*8, allocatable ::xma(:),yma(:),zma(:) @@ -74,15 +75,15 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, real*8, allocatable ::xvb(:),yvb(:),zvb(:) real*8, allocatable ::xmb(:),ymb(:),zmb(:) real*8, allocatable ::help(:),scr(:),dum(:),x(:,:) -c MOs, orbital energies and CSF printout stuff +c MOs, orbital energies and CSF printout stuff real*8, allocatable ::cca(:),epsia(:) real*8, allocatable ::ccb(:),epsib(:) real*8, allocatable ::umerk(:,:) real*8, allocatable ::umrkx(:,:),umrky(:,:),umrkz(:,:) real*8, allocatable ::rvp(:) -c stuff for diag of TDA matrix -c critical regarding memory +c stuff for diag of TDA matrix +c critical regarding memory integer info,lwork,liwork,il,iu,nfound real*4, allocatable ::uci (:,:) real*4, allocatable ::eci (:) @@ -93,7 +94,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, integer,allocatable::isuppz(:) c Löwdin MOs, repulsion terms, charges and half-transformed stuff -c critical regarding memory +c critical regarding memory real*8, allocatable ::clowa(:) real*8, allocatable ::clowb(:) real*4, allocatable ::gamj(:,:) @@ -107,7 +108,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, real*4 sdot c the maximum size of the TDA expansion space -! integer maxconf1,maxconf2 +! integer maxconf1,maxconf2 ! parameter (maxconf1=500000) !c the maximum size of the TDA pt2 space ! parameter (maxconf2=maxconf1*10) @@ -126,7 +127,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, real*4, allocatable ::apb(:) real*4, allocatable ::ambsqr(:) -c intermediates +c intermediates real*8 omax,vmin,pert,de,ek,ej,ak,xc,rabx,ef real*8 pp,hilf,uu,sss,rl,rv,rm,time,coc(3) real*8 fl,fv,ec,p23,xp,umax,xvu,yvu,zvu,xmu,ymu,zmu,xlu,ylu,zlu @@ -148,9 +149,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, ! variables for vector printout integer, allocatable :: vecchka(:),vecchkb(:) integer nvec,jhomo,jhomoa,jhomob -c atomic Hubbard parameters +c atomic Hubbard parameters real*8 eta(94) -c atomic masses +c atomic masses common /amass/ ams(107) real*8 ams character*79 dummy @@ -158,9 +159,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, real*4 :: start_time, end_time, stda_time integer :: STATUS -c just a printout +c just a printout call header('s T D A',0) - + thr =thr /27.211385050d0 c estimate the orbital energy window which corresponds to the desired c spectra range thr @@ -182,7 +183,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, jhomoa=0 jhomob=0 do i=1,nmo - if(occ(i).gt.0.990d0) then + if(occ(i).gt.0.990d0) then jhomo=jhomo+1 if(csp(i).eq.1) jhomoa = jhomoa + 1 if(csp(i).eq.2) jhomob = jhomob + 1 @@ -235,12 +236,12 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, . ccb(nao*mocib),epsib(mocib) . ) - write(*,*) 'Active space MOs in TDA : ',moci,mocia,mocib + write(*,*) 'Active space MOs in TDA : ',moci,mocia,mocib mocia=0 mocib=0 moci =0 -! optional: if eigenvectors are wanted, make set a checking variable (vecchk) that maps the +! optional: if eigenvectors are wanted, make set a checking variable (vecchk) that maps the ! TM orbital space onto the sTDA orbital space (which is reduced due to thresholds) if(eigvec.or.nto) then allocate (vecchka(nmo/2),vecchkb(nmo/2)) @@ -249,7 +250,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, l=0 k=0 do i = 1,nmo - if(occ(i).gt.0.99) then + if(occ(i).gt.0.99) then if(csp(i).eq.1) then l=l+1 ! increase alpha counter if(eps(i).gt.othr)then @@ -282,7 +283,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, nob = mocib do i = 1,nmo - if(occ(i).lt.0.01) then + if(occ(i).lt.0.01) then if(csp(i).eq.1) then l=l+1 ! increase alpha counter if(eps(i).lt.vthr)then @@ -331,13 +332,13 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, endif endif enddo - + no = moci noa = mocia nob = mocib - + do i = 1,nmo - if(occ(i).lt.0.01.and.eps(i).lt.vthr)then + if(occ(i).lt.0.01.and.eps(i).lt.vthr)then moci=moci+1 if(csp(i).eq.1) then mocia = mocia + 1 @@ -361,9 +362,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, nva = mocia - noa nvb = mocib - nob - write(*,*) 'Occupied active MOs in TDA: ', no,noa,nob - write(*,*) 'Virtual active MOs in TDA: ', nv,nva,nvb - if((noa.eq.0.or.nva.eq.0).and.(nob.eq.0.or.nvb.eq.0)) then + write(*,*) 'Occupied active MOs in TDA: ', no,noa,nob + write(*,*) 'Virtual active MOs in TDA: ', nv,nva,nvb + if((noa.eq.0.or.nva.eq.0).and.(nob.eq.0.or.nvb.eq.0)) then stop 'no CSF, increase energy threshold (-e option)' endif @@ -372,10 +373,10 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, allocate(eda(maxconfa),edpta(maxconfa), . edb(maxconfb),edptb(maxconfb), stat=ierr) if(ierr.ne.0)stop 'allocation failed for ed and edpt' - allocate(iconfa(maxconfa,2),kconfa(maxconfa,2), + allocate(iconfa(maxconfa,2),kconfa(maxconfa,2), . iconfb(maxconfb,2),kconfb(maxconfb,2), stat=ierr) if(ierr.ne.0)stop 'allocation failed for iconf and kconf' - eda=0.0d0 + eda=0.0d0 edpta=0.0d0 iconfa=0 kconfa=0 @@ -385,7 +386,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, kconfb=0 -c we arrange MOS according to energy from 1:HOMO to LUMO:MOCI +c we arrange MOS according to energy from 1:HOMO to LUMO:MOCI c (in TM they come in irreps) write(*,*) 'Sorting MOs ...' c sort for E diag @@ -464,7 +465,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c velocity dipole c CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC - + open(unit=37,file='xvint',form='unformatted',status='old') read(37) help call onetri(-1,help,dum,scr,cca,nao,mocia) @@ -479,7 +480,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, call shrink(mocia,dum,yva) call onetri(-1,help,dum,scr,ccb,nao,mocib) call shrink(mocib,dum,yvb) - close(38,status='delete') + close(38,status='delete') open(unit=39,file='zvint',form='unformatted',status='old') read(39) help @@ -490,18 +491,18 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, close(39,status='delete') CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -c calc S^1/2 and q(GS) +c calc S^1/2 and q(GS) CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC open(unit=40,file='sint',form='unformatted',status='old') read(40) help write(*,*) 'ints done.' close(40,status='delete') - + write(*,*) 'S^1/2 ...' call makel(nao,help,x) - + call dgemm('n','n',nao,mocia,nao,1.d0,x,nao,cca,nao,0.d0,scr,nao) do i=1,mocia @@ -572,7 +573,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, write(*,'(10F7.3)') q1b(1:ncent) write(*,'(10F7.3)') (q1a(1:ncent)+q1b(1:ncent)) write(*,*) - write(*,'('' # of alpha and beta electrons in TDA:'',2F8.3)') + write(*,'('' # of alpha and beta electrons in TDA:'',2F8.3)') .sum(q1a(1:ncent)),sum(q1b(1:ncent)) write(*,*) do i=noa+1,mocia @@ -590,10 +591,10 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, ak = 1.0d0 c the global parameters of the method: - beta1 = 0.20d0 - beta2 = 1.830d0 - alpha1 = 1.420d0 - alpha2 = 0.480d0 + beta1 = 0.20d0 + beta2 = 1.830d0 + alpha1 = 1.420d0 + alpha2 = 0.480d0 if(betaj.lt.-99.0d0) then ! if no beta parameter was read in betaj=beta1+beta2*ax @@ -601,7 +602,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, if(alphak.lt.-99.0d0) then ! if no alpha parameter was read in alphak=alpha1+alpha2*ax endif - + write(*,*) write(*,*) 'ax(DF) : ',ax write(*,*) 's^K : ',ak @@ -618,12 +619,12 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, xmolw=0 do i = 1,ncent ii = idint(xyz(4,i)) -c ams is the atomic mass (mol weight for output file) +c ams is the atomic mass (mol weight for output file) xmolw = xmolw+ams(ii) - do j=1,i + do j=1,i jj = idint(xyz(4,j)) - xj = 0.50d0*(eta(ii)+eta(jj)) * ax - xk = 0.50d0*(eta(ii)+eta(jj)) + xj = 0.50d0*(eta(ii)+eta(jj)) * ax + xk = 0.50d0*(eta(ii)+eta(jj)) rabx = dsqrt((xyz(1,i)-xyz(1,j))**2 . +(xyz(2,i)-xyz(2,j))**2 . +(xyz(3,i)-xyz(3,j))**2) @@ -670,13 +671,13 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, if(ierr.ne.0)stop 'allocation failed for intermediates' qiaa=0.0 piaa=0.0 -! K-type terms +! K-type terms k=0 !$omp parallel private(i,j,k,q2) !$omp do do i=1,noa do j=noa+1,mocia -! k=k+1 +! k=k+1 k=(i-1)*nva+j-noa call lo12pop(i,j,ncent,nao,iaoat,clowa,q2) qiaa(1:ncent,k)=q2(1:ncent) @@ -690,9 +691,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, -c determine singles which are lower than thr using A(ia,ia) +c determine singles which are lower than thr using A(ia,ia) c alpha excitations first: - + k=0 j=0 l=0 @@ -724,7 +725,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, iconfa(k,2)=iv eda(k)=de endif -c for PT +c for PT if(de.gt.thr.and.de.lt.fthr)then ! needs to be on if fthr is specified j=j+1 kconfa(j,1)=io @@ -759,13 +760,13 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, if(ierr.ne.0)stop 'allocation failed for intermediates' qiab=0.0 piab=0.0 -! K-type terms +! K-type terms k=0 !$omp parallel private(i,j,k,q2) !$omp do do i=1,nob do j=nob+1,mocib -! k=k+1 +! k=k+1 k=(i-1)*nvb+j-nob call lo12pop(i,j,ncent,nao,iaoat,clowb,q2) qiab(1:ncent,k)=q2(1:ncent) @@ -809,8 +810,8 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, iconfb(k,2)=iv edb(k)=de endif -c for PT - if(de.gt.thr.and.de.lt.fthr)then ! needs to be on if fthr is specified +c for PT + if(de.gt.thr.and.de.lt.fthr)then ! needs to be on if fthr is specified j=j+1 kconfb(j,1)=io kconfb(j,2)=iv @@ -821,7 +822,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo nexb=k nexptb=j - deallocate(uci) + deallocate(uci) nex = nexa + nexb nexpt = nexpta + nexptb @@ -832,32 +833,32 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c errors and warning if(nex.lt.1) stop 'No CSF, increase energy threshold (-e option)' - if(nexa.lt.1.or.nexb.lt.1) + if(nexa.lt.1.or.nexb.lt.1) . write(*,*) 'WARNING: No alpha or beta excitations included!' -! if(nexa.eq.maxconf1.or.nexb.eq.maxconf1) +! if(nexa.eq.maxconf1.or.nexb.eq.maxconf1) ! . stop 'Primary CSF space exceeded. use -e option!' -! if(nexpta.eq.maxconf2.or.nexptb.eq.maxconf2) +! if(nexpta.eq.maxconf2.or.nexptb.eq.maxconf2) ! . write(*,*)'CSF PT2 space exceeded. try -p option!' - + c sort for E diag in each spin manifold - do 141 ii = 2,nexa - i = ii - 1 - k = i - pp= eda(i) - do 121 j = ii, nexa - if (eda(j) .ge. pp) go to 121 - k = j + do 141 ii = 2,nexa + i = ii - 1 + k = i + pp= eda(i) + do 121 j = ii, nexa + if (eda(j) .ge. pp) go to 121 + k = j pp=eda(j) - 121 continue - if (k .eq. i) go to 141 - eda(k) = eda(i) - eda(i) = pp - do m=1,2 - ihilf=iconfa(i,m) - iconfa(i,m)=iconfa(k,m) - iconfa(k,m)=ihilf + 121 continue + if (k .eq. i) go to 141 + eda(k) = eda(i) + eda(i) = pp + do m=1,2 + ihilf=iconfa(i,m) + iconfa(i,m)=iconfa(k,m) + iconfa(k,m)=ihilf enddo - 141 continue + 141 continue do 142 ii = 2,nexb i = ii - 1 @@ -876,10 +877,10 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, iconfb(i,m)=iconfb(k,m) iconfb(k,m)=ihilf enddo - 142 continue + 142 continue -c just printout - write(*,*) ' ' +c just printout + write(*,*) ' ' write(*,*)'Ordered frontier alpha orbitals:' write(*,*)' eV # centers' j=max(1,noa-10) @@ -888,7 +889,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, do k=1,ncent xc=xc+qija(k,i)**2 enddo - write(*,'(i4,F10.3,F8.1)') i,epsia(i)*27.21139,1./(xc+1.d-8) + write(*,'(i4,F10.3,F8.1)') i,epsia(i)*27.21139,1./(xc+1.d-8) enddo ! write(*,*)'Unoccupied:' write(*,*) ' ' @@ -898,10 +899,10 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, do k=1,ncent xc=xc+qaba(k,i-noa)**2 enddo - write(*,'(i4,F10.3,F8.1)') i,epsia(i)*27.21139,1./(xc+1.d-8) + write(*,'(i4,F10.3,F8.1)') i,epsia(i)*27.21139,1./(xc+1.d-8) enddo - write(*,*) ' ' + write(*,*) ' ' write(*,*)'Ordered frontier beta orbitals:' write(*,*)' eV # centers' j=max(1,nob-10) @@ -920,7 +921,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, do k=1,ncent xc=xc+qabb(k,i-nob)**2 enddo - write(*,'(i4,F10.3,F8.1)') i,epsib(i)*27.21139,1./(xc+1.d-8) + write(*,'(i4,F10.3,F8.1)') i,epsib(i)*27.21139,1./(xc+1.d-8) enddo write(*,*) @@ -951,7 +952,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, . 1.d+7/(eda(i)*2.19474625d+5),iconfa(i,1:2), . 27.211*(epsia(iv)-epsia(io)),27.211*ej,27.211*ek,27.211*de,loc enddo - 16 format(i5,f6.2,f8.1, 5x,i4,' ->',i4,5x,'gap,J,K:',3f8.3, + 16 format(i5,f6.2,f8.1, 5x,i4,' ->',i4,5x,'gap,J,K:',3f8.3, . 3x,'Kshft:',f8.3,2x,'locality:',f6.3) write(*,*) write(*,*)' Beta Excitations:' @@ -998,7 +999,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo enddo !$omp end do -!$omp end parallel +!$omp end parallel allocate(pija(ncent,ihilf), stat=ierr) if(ierr.ne.0)stop 'allocation failed for (ij| intermediate' pija=0.0 @@ -1025,7 +1026,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo !$omp end do !$omp end parallel + if(XsTD.eqv..false.)then deallocate(clowa) + endif !!! now beta part of pij and qab !!! ihilf=nob*(nob+1)/2 allocate(qijb(ncent,ihilf),stat=ierr) @@ -1042,7 +1045,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo enddo !$omp end do -!$omp end parallel +!$omp end parallel allocate(pijb(ncent,ihilf), stat=ierr) if(ierr.ne.0)stop 'allocation failed for (ij| intermediate' pijb=0.0 @@ -1069,9 +1072,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo !$omp end do !$omp end parallel - + if(XsTD.eqv..false.)then deallocate(clowb) - + endif write(*,*) write(*,*)'selecting CSF ...' c determine singles which interact most strongly with all basis @@ -1089,7 +1092,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c nroot at this point is the number of primary CSF. The c number of roots in the range 0-thr (as desired) is not -c known but will be determined by the diag routine. +c known but will be determined by the diag routine. nroot = nex write(*,*) 'CSF included by PT:',new,newa,newb nexa = nexa + newa @@ -1109,22 +1112,28 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, write(*,*) 'setting up A+B and A-B matrices' ******************************************************************************** allocate(ambsqr(nci*(nci+1)/2),stat=ierr) + if(XsTD)then + call uXsrpamat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,maxconfa, + .maxconfb,iconfa,iconfb,ax,eda,edb,ambsqr, + .alphak,betaj,xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) + else call urpamat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,maxconfa, . maxconfb,iconfa,iconfb,ax,eda,edb,piaa,qiaa,piab, . qiab,pija,qaba,pijb,qabb,ambsqr) + endif ! get rid of large arrays deallocate(pija,qaba,piaa,eda,pijb,qabb,piab,edb) if(.not.printexciton)deallocate(qiaa,qiab) -! A+B was computed in routine and written to file +! A+B was computed in routine and written to file ! read it now allocate(apb(nci*(nci+1)/2),stat=ierr) - open(unit=52,file='apbmat',form='unformatted',status='old') + open(unit=52,file='apbmat',form='unformatted',status='old') read(52) apb close(52,status='delete') ******************************************************************************** -! allocate uci and hci as X and Y vectors respectively +! allocate uci and hci as X and Y vectors respectively allocate(hci(nci,nci),uci(nci,nci),stat=ierr) if(ierr.ne.0)stop 'allocation failed for X and Y matrix' ! allocate eigenvalue vector @@ -1183,20 +1192,30 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, ******************************************************************************** c set the TDA matrix up * - write(*,*)'calculating TDA matrix ...' + write(*,*)'calculating TDA matrix ...' ******************************************************************************** + if(XsTD)then + call uXstda_mat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,maxconfa, + . maxconfb,iconfa,iconfb,ax,eda,edb,hci,alphak, + . betaj,xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) + else call utdamat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,maxconfa, . maxconfb,iconfa,iconfb,ax,eda,edb,piaa,qiaa,piab, . qiab,pija,qaba,pijb,qabb,hci) + endif ******************************************************************************** !******************************************************************************** ! construct ( 0.5 * B ) for X trafo (velocity correction) and print to file * !******************************************************************************** if(velcorr) then + if(XsTD)then + stop 'velocity correction not available for UXsTDA' + else call utdacorr(nexa,nexb,ncent,noa,nva,nob,nvb,maxconfa,maxconfb, . iconfa,iconfb,ax,piaa,qiaa,piab,qiab,pija,qaba, . pijb,qabb) + endif endif !******************************************************************************** @@ -1210,22 +1229,22 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, write(*,'('' estimated time (min) '',f8.2)') . float(nci)**2*float(nroot)/8.d+8/60. -c if LAPACK does not work +c if LAPACK does not work c allocate(eci(nci),uci(nci,nroot), c . stat=ierr) c call sHQRII(hci,nci,nroot,eci,uci) c faster by a factor of 2-3 - lwork =26*nci + lwork =26*nci liwork=10*nci -c we allocate uci with nci (and not with nroot) as safe +c we allocate uci with nci (and not with nroot) as safe c choice (other values gave segfaults) nroot=min(nci,int(1.5*nroot)) allocate(eci(nci),uci(nci,nci),work(lwork), . iwork(liwork),isuppz(nci),stat=ierr) if(ierr.ne.0)stop 'allocation failed for TDA matrix diag' - vl=0 + vl=0 vu=thr call ssyevr('V','V','U',nci,hci,nci,vl,vu,il,iu,1.e-6, . nfound,eci,uci,nci,isuppz, @@ -1277,9 +1296,9 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c loop over excited states do i=1,nroot - de=dble(eci(i)) + de=dble(eci(i)) ef=1.0d0/(de+1.0d-8) - xlu=0.0d0 + xlu=0.0d0 ylu=0.0d0 zlu=0.0d0 xmu=0.0d0 @@ -1291,18 +1310,18 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, xms=0.0d0 yms=0.0d0 zms=0.0d0 - umax=-1 + umax=-1 kmem=1 ispin=1 q2=0.0 c loop over basis P-CSF -c alpha P-CSF +c alpha P-CSF do j=1,nexa io=iconfa(j,1) iv=iconfa(j,2) ij=lin(io,iv) uu=dble(uci(j,i)) - pp=dble(uci(j,i)) + pp=dble(uci(j,i)) if(rpachk)then uu=uu+dble(hci(j,i)) pp=pp-dble(hci(j,i)) @@ -1360,8 +1379,8 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, q2(1:ncent)=q2(1:ncent)+qiab(1:ncent,l)*real(uu) endif enddo -c polarizability - alp_real(1)=alp_real(1)+xlu*xlu*ef +c polarizability + alp_real(1)=alp_real(1)+xlu*xlu*ef alp_real(2)=alp_real(2)+xlu*ylu*ef alp_real(3)=alp_real(3)+ylu*ylu*ef alp_real(4)=alp_real(4)+xlu*zlu*ef @@ -1385,14 +1404,14 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo endif - xp=xlu*xlu+ylu*ylu+zlu*zlu - fl=de*p23*xp - xp=xvu*xvu+yvu*yvu+zvu*zvu - fv=ef*p23*xp - xp=xlu*xmu+ylu*ymu+zlu*zmu - rl=-235.7220d0*xp -! recalculated value for Rot with recent CODATA values and changed it (used to be 235.730) - xp=xvu*xmu+yvu*ymu+zvu*zmu + xp=xlu*xlu+ylu*ylu+zlu*zlu + fl=de*p23*xp + xp=xvu*xvu+yvu*yvu+zvu*zvu + fv=ef*p23*xp + xp=xlu*xmu+ylu*ymu+zlu*zmu + rl=-235.7220d0*xp +! recalculated value for Rot with recent CODATA values and changed it (used to be 235.730) + xp=xvu*xmu+yvu*ymu+zvu*zmu rv=-235.7220d0*xp*ef rvp(i)=rv c sum rule @@ -1522,7 +1541,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, 15 format(3x,F6.2,'(',i4,'b','->',i4,'b',')') - if(.not.velcorr) then + if(.not.velcorr) then write(*,*)'writing spectral data to tda.dat ...' call print_tdadat(nroot,xmolw,eci,umerk(2:5,:),thr,'tda.dat') @@ -1548,10 +1567,10 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, . xva,yva,zva,xma,yma,zma,xlb,ylb,zlb,xvb,yvb,zvb,xmb,ymb,zmb,xmolw . ,noa,nva,nob,nvb,coc,ncent,qiaa,qiab,maxconfa,maxconfb,iconfa, . iconfb,rvp) - else + else call apbtrafo_uks(nci,nexa,nexb,nroot,uci,eci,xla,yla,zla,xva . ,yva,zva,xma,yma,zma,xlb,ylb,zlb,xvb,yvb,zvb,xmb,ymb,zmb,xmolw, - . maxconfa,maxconfb,iconfa,iconfb,rvp) + . maxconfa,maxconfb,iconfa,iconfb,rvp) endif do i=1,nroot umerk(5,i)=rvp(i) @@ -1610,7 +1629,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, deallocate(rvp) ***************************** c Lin. Response func. ESA * -***************************** +***************************** if(ESA)then ! Unrelaxed state-to-state transition dipole moments call cpu_time(start_time) @@ -1634,15 +1653,15 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, . ,(end_time-stda_time)/60.0 endif write(*,*) - !CALL EXIT([STATUS]) + !CALL EXIT([STATUS]) endif -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! optional: print eigenvectors in TM format ! Write $eigenpairs to scratch file if (eigvec) then - ihilf=2 ! use as switch for output + ihilf=2 ! use as switch for output open(unit=39,file='TmPvEcInFo',status='replace') ! print to temporary file @@ -1663,7 +1682,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, enddo close(39) deallocate(vecchka,vecchkb) -! call printeigenvec(rpachk,ihilf,nci,nroot,uci,hci,eci,nmo, +! call printeigenvec(rpachk,ihilf,nci,nroot,uci,hci,eci,nmo, ! . nvec,jhomo,maxconf1,vecchk,iconf) if(rpachk)then call printvecrpa(nci,nroot,uci,hci,eci) @@ -1672,19 +1691,19 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, call printvectda(rpachk,nci,nroot,uci,eci) endif endif - + if(nto)then if(rpachk)then call Uprint_nto_rpa(uci,hci,cca,mocia,nexa,nci,nroot,nao,iconfa, . maxconfa,noa,nva,ccb,mocib,nexb,iconfb, . maxconfb,nob,nvb) else - + call Uprint_nto(uci,cca,mocia,nexa,nci,nroot,nao,iconfa, . maxconfa,noa,nva,ccb,mocib,nexb,iconfb, . maxconfb,nob,nvb) endif - endif + endif deallocate(uci) @@ -1695,7 +1714,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, endif -c used for fitting +c used for fitting inquire(file='.REF',exist=ex) if(.not.ex) return open(unit=27,file='.REF') @@ -1705,46 +1724,46 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, c do j=1,i c read(27,*) hilf c if(hilf.gt.0.01) -c . write(28,'(4f12.6)') +c . write(28,'(4f12.6)') c . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(2,j) c enddo if(k.eq.1)then -c take only bright ones +c take only bright ones read(27,*) hilf do j=1,nroot if(umerk(2,j).gt.0.03)then - write(28,'(4f12.6)') + write(28,'(4f12.6)') . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(2,j) exit endif enddo elseif(k.eq.2)then -c take only very bright ones +c take only very bright ones read(27,*) hilf do j=1,nroot if(umerk(2,j).gt.0.2)then - write(28,'(4f12.6)') + write(28,'(4f12.6)') . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(2,j) exit endif enddo elseif(k.eq.4)then -c take only very very bright ones +c take only very very bright ones read(27,*) hilf do j=1,nroot if(umerk(2,j).gt.2.0)then - write(28,'(4f12.6)') + write(28,'(4f12.6)') . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(2,j) exit endif enddo elseif(k.eq.3)then -c take only very bright CD ones +c take only very bright CD ones read(27,*) hilf do j=1,nroot if(abs(umerk(5,j)).gt.100)then - write(28,'(4f12.6)') + write(28,'(4f12.6)') . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(5,j) exit endif @@ -1753,7 +1772,7 @@ SUBROUTINE sutda(ncent,nmo,nao,xyz,c,eps,occ,csp,iaoat,thr,thrp, do j=1,i read(27,*) hilf if(hilf.gt.0.01) - . write(28,'(4f12.6)') + . write(28,'(4f12.6)') . (umerk(1,j)*27.211-hilf),hilf,umerk(1,j)*27.211,umerk(2,j) enddo endif @@ -1827,7 +1846,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, real*8 de,pert,amat logical, allocatable :: incl_conf(:) - allocate(qk(ncent), pta(nexa),pt2a(nexa),ptb(nexb),pt2b(nexb), + allocate(qk(ncent), pta(nexa),pt2a(nexa),ptb(nexb),pt2b(nexb), . qj(ncent),incl_conf(nexpta),stat=ierr) if(ierr.ne.0)stop 'allocation for PT intermediates crashed' incl_conf=.false. @@ -1844,8 +1863,8 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, ! loop over secondary/neglected CSF, this is done omp-parallel !$omp parallel private(i,k,io,iv,iiv,iwrk,qk,de,j,jo,jv,jjv,jwrk,ek,ej, -!$omp& l,qj,pta,ptb,amat,pert) reduction (+:pt2a,pt2b) -!$omp do +!$omp& l,qj,pta,ptb,amat,pert) reduction (+:pt2a,pt2b) +!$omp do c outer loop over alpha S-CSF do k=1,nexpta io=kconfa(k,1) @@ -1854,7 +1873,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, iwrk=(io-1)*nva + iiv qk(1:ncent)=piaa(1:ncent,iwrk) de=edpta(k) -c loop over alpha P-CSF +c loop over alpha P-CSF do j=1,nexa jo=iconfa(j,1) jv=iconfa(j,2) @@ -1870,7 +1889,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, c PT2 - e(2) = -((K-J)(ia,jb)**2)/(A(jb,jb)-A(ia,ia)) pta(j)=amat**2/(de-eda(j)+1.d-10) enddo -c loop over beta P-CSF +c loop over beta P-CSF do j=1,nexb jo=iconfb(j,1) jv=iconfb(j,2) @@ -1891,7 +1910,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, else c else accumulate in the E(PT2) contribution to the alpha and beta P-CSF do i=1,nexa - pt2a(i)=pt2a(i) + pta(i) + pt2a(i)=pt2a(i) + pta(i) enddo do l=1,nexb pt2b(l)=pt2b(l) + ptb(l) @@ -1919,8 +1938,8 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, incl_conf=.false. !$omp parallel private(i,k,io,iv,iiv,iwrk,qk,de,j,jo,jv,jjv,jwrk,ek,ej, -!$omp& l,qj,pta,ptb,amat,pert) reduction (+:pt2a,pt2b) -!$omp do +!$omp& l,qj,pta,ptb,amat,pert) reduction (+:pt2a,pt2b) +!$omp do c outer loop over beta S-CSF do k=1,nexptb io=kconfb(k,1) @@ -1929,7 +1948,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, iwrk=(io-1)*nvb + iiv qk(1:ncent)=piab(1:ncent,iwrk) de=edptb(k) -c loop over beta P-CSF +c loop over beta P-CSF do j=1,nexb jo=iconfb(j,1) jv=iconfb(j,2) @@ -1945,7 +1964,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, c PT2 - e(2) = -((K-J)(ia,jb)**2)/(A(jb,jb)-A(ia,ia)) ptb(j)=amat**2/(de-edb(j)+1.d-10) enddo -c loop over alpha P-CSF +c loop over alpha P-CSF do j=1,nexa jo=iconfa(j,1) jv=iconfa(j,2) @@ -1964,7 +1983,7 @@ subroutine ptselect_uks(nexa,nexb,ncent,noa,nva,nob,nvb,nexpta, if(pert.gt.thrp)then incl_conf(k)=.true. else -c else accumulate in the E(PT2) contribution to the alpha and beta P-CSF +c else accumulate in the E(PT2) contribution to the alpha and beta P-CSF do i=1,nexa pt2a(i)=pt2a(i) + pta(i) enddo @@ -2012,7 +2031,7 @@ end subroutine ptselect_uks *********************************************************************** *********************************************************************** -* set up A+B and A-B (packed form) in UKS case +* set up A+B and A-B (packed form) in UKS case *********************************************************************** subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, . mxcnfb,iconfa,iconfb,dax,eda,edb,piaa,qiaa,piab, @@ -2039,7 +2058,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, open(unit=52,file='apbmat',form='unformatted',status='replace') ambsqr=0.0e0 - if(abs(dax).lt.1.0d-6) then + if(abs(dax).lt.1.0d-6) then c calculate A+B and (A-B)^0.5 allocate(apb(nex*(nex+1)/2),stat=ierr) if(ierr.ne.0)stop 'allocation for A+B crashed' @@ -2089,7 +2108,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, jwrk=(jo-1)*nva+jjv ek=sdot(ncent,qk,1,qiaa(1,jwrk),1) ! ek = (ia|jb) apb(ij)=2.0*ek - enddo + enddo !... with beta do j=nexa+1,i-1 ij=lin(i,j) @@ -2112,7 +2131,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, !******************** ! now the hybrid case - ! this is tedious, since we have to diagonalize A-B + ! this is tedious, since we have to diagonalize A-B ! for alpha and beta seperately (to save time) ! since we diagonalize alpha and beta blocks of A-B separately, we temporarily use apb for this and allocate for each space separately !******************** @@ -2147,9 +2166,9 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, jwrk=(jo-1)*nva+iiv ek=sdot(ncent,qj,1,qiaa(1,jwrk),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax ! A+B part - ambsqr(ij)=ambsqr(ij)-ax*ek - ! we first use apb as A-B - apb(ij)=ax*ek-ej + ambsqr(ij)=ambsqr(ij)-ax*ek + ! we first use apb as A-B + apb(ij)=ax*ek-ej enddo ij=lin(i,j) ek=sdot(ncent,qk,1,qiaa(1,iwrk),1) @@ -2203,7 +2222,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, !$omp end parallel write(52)ambsqr - + c this the time determining step, since A-B needs to be diagonalized in full nci space write(*,*) ' calculating (A-B)^0.5 ...' write(*,'('' estimated time (min) '',f8.2)') @@ -2247,7 +2266,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, qj(1:ncent)=piab(1:ncent,jwrk) jwrk=(jo-1)*nvb+iiv ek=sdot(ncent,qj,1,qiab(1,jwrk),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax - ! we first use apb as A-B + ! we first use apb as A-B apb(ij)=ax*ek-ej enddo ij=lin(i,i) @@ -2255,7 +2274,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, apb(ij)=real(edb(i))-ek+ax*ek ! diagonal element of A-B enddo !$omp end do -!$omp end parallel +!$omp end parallel ! take power of beta-beta block of A-B call smatpow(nexb,apb) @@ -2277,7 +2296,7 @@ subroutine urpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, enddo ! free memory and reallocate for beta-beta part deallocate(apb,qj) - endif ! GGA/hybrid case + endif ! GGA/hybrid case close(52) deallocate(qk) @@ -2287,7 +2306,7 @@ end subroutine urpamat *********************************************************************** *********************************************************************** -* set up A matrix in UKS case +* set up A matrix in UKS case *********************************************************************** subroutine utdamat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, . mxcnfb,iconfa,iconfb,dax,eda,edb,piaa,qiaa, @@ -2332,10 +2351,10 @@ subroutine utdamat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa, hci(j,i)=ek-ej hci(i,j)=hci(j,i) enddo - hci(i,i)=real(eda(i)) + hci(i,i)=real(eda(i)) enddo !$omp end do -!$omp end parallel +!$omp end parallel c beta blocks !$omp parallel private(i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,qk,qj,ek,ej) @@ -2384,16 +2403,16 @@ subroutine somo_shift(nsomo,io,iv,de,ek) use kshiftcommon implicit none real*8, intent(inout) :: de ! A(ia,ia) - integer,intent (in) :: nsomo,io,iv + integer,intent (in) :: nsomo,io,iv real*8, intent (in) :: ek ! K(ia,ia) real*8 shft,wau,sau,ekia,dmp logical l1,l2 l1=io.gt.nsomo l2=iv.le.nsomo - + if(l1.or.l2)then - ! shiftmax and width are given eV, convert to a.u. + ! shiftmax and width are given eV, convert to a.u. sau=shftmax_somo*0.036749320d0 wau=shftwidth*0.036749320d0*5.0d0 shft = 1.0d0 + (ek/wau)**shftsteep diff --git a/tests/compare.py b/tests/compare.py new file mode 100644 index 0000000..37bb8a0 --- /dev/null +++ b/tests/compare.py @@ -0,0 +1,135 @@ +""" +Compare the results for different files of std2 and report errors if the info they contain differs +""" + +import argparse +import math + +def get_tda_results(f): + """ + Extract the list of excitations with corresponding fL + """ + results = { + 'excitation energy': [], + 'fL': [], + } + + lines = f.readlines() + datxy_found = -1 + for i, line in enumerate(lines): + if 'DATXY' in line: + datxy_found = i + break + + if datxy_found < 0: + raise Exception('DATXY not found') + + for line in lines[datxy_found + 1:]: + chunks = line.split() + + results['excitation energy'].append(float(chunks[1])) + results['fL'].append(float(chunks[2])) + + return results + +def get_beta_HRS_results(f): + """ + Extract the list of beta HRS + """ + + results = { + 'beta HRS': [], + } + + lines = f.readlines() + + for line in lines: + chunks = line.split() + results['beta HRS'].append(float(chunks[1])) + + return results + +def get_2PA_results(f): + """ + Extract the list of 2PA quantities + """ + + results = { + 'excitation energy': [], + 'Delta_2PA_//': [], + 'Delta_2PA__|_': [], + 'Delta_2PA_circ': [], + 'rho': [], + } + lines = f.readlines() + + for line in lines: + chunks = line.split() + results['excitation energy'].append(float(chunks[1])) + results['Delta_2PA_//'].append(float(chunks[2])) + results['Delta_2PA__|_'].append(float(chunks[3])) + results['Delta_2PA_circ'].append(float(chunks[4])) + results['rho'].append(float(chunks[5])) + + return results + + +def check_equal(expected, actual, label, delta=1e-3): + """ + Check if two arrays contain the same data, with a difference < `delta` + """ + + if len(expected) != len(actual): + print('! ERROR: the size of `expected` and `actual` differs') + return abs(len(expected) - len(actual)) + + n_errors = 0 + for left, right in zip(expected[label], actual[label]): + if math.fabs(left - right) > delta: + n_errors += 1 + + if n_errors > 0: + print('! ERROR: differences are larger than {} for {}'.format(delta, label)) + print(' expected ::', expected[label]) + print(' actual ::', actual[label]) + + return n_errors + +parser = argparse.ArgumentParser() +parser.add_argument('-t', '--type', choices=['tda', 'beta_HRS', '2PA']) +parser.add_argument('expected', type=argparse.FileType('r')) +parser.add_argument('actual', type=argparse.FileType('r')) + +args = parser.parse_args() + +# count errors +n_errors = 0 + +if args.type == 'tda': + expected_data = get_tda_results(args.expected) + actual_data = get_tda_results(args.actual) + + n_errors += check_equal(expected_data, actual_data, 'excitation energy') + n_errors += check_equal(expected_data, actual_data, 'fL') + +if args.type == 'beta_HRS': + expected_data = get_beta_HRS_results(args.expected) + actual_data = get_beta_HRS_results(args.actual) + + n_errors += check_equal(expected_data, actual_data, 'beta HRS') + +if args.type == '2PA': + expected_data = get_2PA_results(args.expected) + actual_data = get_2PA_results(args.actual) + + n_errors += check_equal(expected_data, actual_data, 'excitation energy') + n_errors += check_equal(expected_data, actual_data, 'Delta_2PA_//', delta=1e-2) + n_errors += check_equal(expected_data, actual_data, 'Delta_2PA__|_', delta=1e-2) + n_errors += check_equal(expected_data, actual_data, 'Delta_2PA_circ', delta=1e-2) + n_errors += check_equal(expected_data, actual_data, 'rho', delta=1e-2) + +# exit +if n_errors == 0: + print('OK') + +exit(n_errors) diff --git a/tests/expected_results/2PA_TEST1.txt b/tests/expected_results/2PA_TEST1.txt new file mode 100644 index 0000000..dcda2a8 --- /dev/null +++ b/tests/expected_results/2PA_TEST1.txt @@ -0,0 +1,3 @@ + 1 14.084 0.000 0.000 0.001 1.333 + 2 16.786 1.675 0.259 0.519 6.458 + 3 17.507 0.003 0.002 0.005 1.333 diff --git a/tests/expected_results/2PA_TEST2.txt b/tests/expected_results/2PA_TEST2.txt new file mode 100644 index 0000000..1ab949c --- /dev/null +++ b/tests/expected_results/2PA_TEST2.txt @@ -0,0 +1,3 @@ + 1 20.484 0.000 0.000 0.000 1.333 + 2 23.037 0.801 0.121 0.242 6.608 + 3 23.977 0.001 0.000 0.001 1.333 diff --git a/tests/expected_results/2PA_TEST3.txt b/tests/expected_results/2PA_TEST3.txt new file mode 100644 index 0000000..db4aa72 --- /dev/null +++ b/tests/expected_results/2PA_TEST3.txt @@ -0,0 +1,3 @@ + 1 15.854 0.000 0.000 0.000 1.333 + 2 18.378 1.599 0.238 0.476 6.722 + 3 19.200 0.002 0.001 0.003 1.333 diff --git a/tests/expected_results/BETA_TEST1.txt b/tests/expected_results/BETA_TEST1.txt new file mode 100644 index 0000000..c4c9c03 --- /dev/null +++ b/tests/expected_results/BETA_TEST1.txt @@ -0,0 +1,3 @@ + 0.00000000 3.8684883130827541 + 0.650153160 3.8896786186568040 + 1.16526508 3.9373102946817227 diff --git a/tests/expected_results/BETA_TEST2.txt b/tests/expected_results/BETA_TEST2.txt new file mode 100644 index 0000000..7cfb86a --- /dev/null +++ b/tests/expected_results/BETA_TEST2.txt @@ -0,0 +1,3 @@ + 0.00000000 2.1702449693748593 + 0.650153160 2.1768514651053148 + 1.16526508 2.1915914414174331 diff --git a/tests/expected_results/BETA_TEST3.txt b/tests/expected_results/BETA_TEST3.txt new file mode 100644 index 0000000..11465e6 --- /dev/null +++ b/tests/expected_results/BETA_TEST3.txt @@ -0,0 +1,3 @@ + 0.00000000 3.5053039084722921 + 0.650153160 3.5222514169638854 + 1.16526508 3.5602659034625943 diff --git a/tests/expected_results/EXCI_TEST1.dat b/tests/expected_results/EXCI_TEST1.dat new file mode 100644 index 0000000..92746bd --- /dev/null +++ b/tests/expected_results/EXCI_TEST1.dat @@ -0,0 +1,17 @@ + NM + VELO + MMASS + 18.015200000000000 + LFAKTOR + 0.5 + RFAKTOR + 1.0 + WIDTH + 0.20 + SHIFT + 0.00 + DATXY + 1 14.0839 0.003718 0.024292 -0.000001 -0.000002 + 2 16.8121 0.140138 0.189382 0.000000 0.000000 + 3 17.5071 0.000000 0.000000 -0.000000 -0.000000 + 4 19.8865 0.291637 0.151505 0.000001 0.000001 diff --git a/tests/expected_results/EXCI_TEST2.dat b/tests/expected_results/EXCI_TEST2.dat new file mode 100644 index 0000000..017b660 --- /dev/null +++ b/tests/expected_results/EXCI_TEST2.dat @@ -0,0 +1,18 @@ + NM + VELO + MMASS + 18.015200000000000 + LFAKTOR + 0.5 + RFAKTOR + 1.0 + WIDTH + 0.20 + SHIFT + 0.00 + DATXY + 1 20.4845 0.005407 0.016702 -0.000022 -0.000014 + 2 23.0717 0.168656 0.124823 0.000000 0.000000 + 3 23.9769 0.000000 0.000000 -0.000000 -0.000000 + 4 26.0985 0.242207 0.069563 -0.000003 -0.000004 + 5 28.5816 1.307409 0.400764 0.000025 0.000014 diff --git a/tests/expected_results/EXCI_TEST3.dat b/tests/expected_results/EXCI_TEST3.dat new file mode 100644 index 0000000..33852ce --- /dev/null +++ b/tests/expected_results/EXCI_TEST3.dat @@ -0,0 +1,19 @@ + NM + VELO + MMASS + 18.015200000000000 + LFAKTOR + 0.5 + RFAKTOR + 1.0 + WIDTH + 0.20 + SHIFT + 0.00 + DATXY + 1 15.8543 0.004185 0.021579 0.000000 0.000000 + 2 18.3873 0.190150 0.206896 0.000000 0.000000 + 3 19.2001 0.000000 0.000000 -0.000000 -0.000000 + 4 21.5984 0.427986 0.194846 -0.000000 -0.000000 + 5 24.1600 0.862816 0.383928 0.000000 0.000000 + 6 28.1492 0.601623 0.178281 0.000000 0.000000 diff --git a/tests/run_tests.sh b/tests/run_tests.sh new file mode 100755 index 0000000..c04f3e4 --- /dev/null +++ b/tests/run_tests.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# check parameters +if [ "$#" -ne 1 ]; then + >&2 echo "Illegal number of parameters" + >&2 echo "usage: run_test.sh STD2_EXE" + exit 1 +fi + +# EXE +STD2_EXE=${1} + +# directory for the results +EXPECTED_RESULTS_DIR="./expected_results" + +# total number of errors in the whole suite +TOT_NERRORS=0 + +# -- test suite for std2 (excitations energies) +declare -A TESTS_STD2_EXCI + +TESTS_STD2_EXCI[EXCI_TEST1]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 20' +TESTS_STD2_EXCI[EXCI_TEST2]='-f water_sto3g.molden -sty 3 -ax 0.5 -e 30' +TESTS_STD2_EXCI[EXCI_TEST3]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 30 -be 1.0 -al 3.0' + +# run test suite +for TEST in "${!TESTS_STD2_EXCI[@]}"; do + # fetch parameters and run test + TEST_PARAMS=${TESTS_STD2_EXCI[${TEST}]} + echo "** Running test ${TEST} using '${TEST_PARAMS}'" + ${STD2_EXE} ${TEST_PARAMS} > /dev/null + + # compare with expected results + python3 compare.py -t tda ${EXPECTED_RESULTS_DIR}/${TEST}.dat tda.dat + + # count errors + TEST_NERR=$? + TOT_NERRORS=$(( ${TOT_NERRORS} + ${TEST_NERR} )) +done + +# -- test suite for std2 (beta) +declare -A TESTS_STD2_BETA + +TESTS_STD2_BETA[BETA_TEST1]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 20 -resp 2' +TESTS_STD2_BETA[BETA_TEST2]='-f water_sto3g.molden -sty 3 -ax 0.5 -e 30 -resp 2' +TESTS_STD2_BETA[BETA_TEST3]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 30 -be 1.0 -al 3.0 -resp 2' + +# run test suite +for TEST in "${!TESTS_STD2_BETA[@]}"; do + # fetch parameters and run test + TEST_PARAMS=${TESTS_STD2_BETA[${TEST}]} + echo "** Running test ${TEST} using '${TEST_PARAMS}'" + ${STD2_EXE} ${TEST_PARAMS} > /dev/null + + # compare with expected results + python3 compare.py -t beta_HRS ${EXPECTED_RESULTS_DIR}/${TEST}.txt beta_HRS + + # count errors + TEST_NERR=$? + TOT_NERRORS=$(( ${TOT_NERRORS} + ${TEST_NERR} )) +done + +# -- test suite for std2 (beta) +declare -A TESTS_STD2_2PA + +TESTS_STD2_2PA[2PA_TEST1]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 20 -2PA 3' +TESTS_STD2_2PA[2PA_TEST2]='-f water_sto3g.molden -sty 3 -ax 0.5 -e 30 -2PA 3' +TESTS_STD2_2PA[2PA_TEST3]='-f water_sto3g.molden -sty 3 -ax 1.0 -e 30 -be 1.0 -al 3.0 -2PA 3' + +# run test suite +for TEST in "${!TESTS_STD2_2PA[@]}"; do + # fetch parameters and run test + TEST_PARAMS=${TESTS_STD2_2PA[${TEST}]} + echo "** Running test ${TEST} using '${TEST_PARAMS}'" + ${STD2_EXE} ${TEST_PARAMS} > /dev/null + + # compare with expected results + python3 compare.py -t 2PA ${EXPECTED_RESULTS_DIR}/${TEST}.txt 2PA-abs + + # count errors + TEST_NERR=$? + TOT_NERRORS=$(( ${TOT_NERRORS} + ${TEST_NERR} )) +done + +# exit +exit ${TOT_NERRORS} diff --git a/tests/water_sto3g.molden b/tests/water_sto3g.molden new file mode 100644 index 0000000..de52550 --- /dev/null +++ b/tests/water_sto3g.molden @@ -0,0 +1,106 @@ +[Molden Format] +[Atoms] Angs +O 1 8 0.0000000000 0.0000000000 0.1196030000 +H 2 1 0.0000000000 0.7618130000 -0.4784100000 +H 3 1 0.0000000000 -0.7618130000 -0.4784100000 +[GTO] + 1 0 + s 3 1.00 + 0.1307093214d+03 0.1543289673d+00 + 0.2380886605d+02 0.5353281423d+00 + 0.6443608313d+01 0.4446345422d+00 + sp 3 1.00 + 0.5033151319d+01 -0.9996722919d-01 0.1559162750d+00 + 0.1169596125d+01 0.3995128261d+00 0.6076837186d+00 + 0.3803889600d+00 0.7001154689d+00 0.3919573931d+00 + + 2 0 + s 3 1.00 + 0.3425250914d+01 0.1543289673d+00 + 0.6239137298d+00 0.5353281423d+00 + 0.1688554040d+00 0.4446345422d+00 + + 3 0 + s 3 1.00 + 0.3425250914d+01 0.1543289673d+00 + 0.6239137298d+00 0.5353281423d+00 + 0.1688554040d+00 0.4446345422d+00 + +[MO] + Sym= 1 + Ene= -20.2441800000000 + Spin= Alpha + Occup= 2.000000 + 1 0.9941600000 + 2 0.0263200000 + 3 0.0000000000 + 4 0.0000000000 + 5 -0.0042600000 + 6 -0.0058400000 + 7 -0.0058400000 + Sym= 2 + Ene= -1.26362000000000 + Spin= Alpha + Occup= 2.000000 + 1 -0.2331700000 + 2 0.8374900000 + 3 0.0000000000 + 4 0.0000000000 + 5 -0.1264900000 + 6 0.1577900000 + 7 0.1577900000 + Sym= 3 + Ene= -0.610740000000000 + Spin= Alpha + Occup= 2.000000 + 1 0.0000000000 + 2 0.0000000000 + 3 0.0000000000 + 4 0.6071900000 + 5 0.0000000000 + 6 0.4461700000 + 7 -0.4461700000 + Sym= 4 + Ene= -0.453510000000000 + Spin= Alpha + Occup= 2.000000 + 1 -0.1030700000 + 2 0.5354400000 + 3 0.0000000000 + 4 0.0000000000 + 5 0.7718300000 + 6 -0.2831800000 + 7 -0.2831800000 + Sym= 5 + Ene= -0.391120000000000 + Spin= Alpha + Occup= 2.000000 + 1 0.0000000000 + 2 0.0000000000 + 3 1.0000000000 + 4 0.0000000000 + 5 0.0000000000 + 6 0.0000000000 + 7 0.0000000000 + Sym= 6 + Ene= 0.595890000000000 + Spin= Alpha + Occup= 0.0000000E+00 + 1 -0.130440000000000 + 2 0.863430000000000 + 3 0.000000000000000E+000 + 4 0.000000000000000E+000 + 5 -0.745860000000000 + 6 -0.788160000000000 + 7 -0.788160000000000 + Sym= 7 + Ene= 0.726820000000000 + Spin= Alpha + Occup= 0.0000000E+00 + 1 0.000000000000000E+000 + 2 0.000000000000000E+000 + 3 0.000000000000000E+000 + 4 0.981910000000000 + 5 0.000000000000000E+000 + 6 -0.829080000000000 + 7 0.829080000000000 diff --git a/tests/wavelength b/tests/wavelength new file mode 100644 index 0000000..275abd6 --- /dev/null +++ b/tests/wavelength @@ -0,0 +1,2 @@ +1907 +1064 diff --git a/velo.f b/velo.f index c4bfb55..c974169 100755 --- a/velo.f +++ b/velo.f @@ -1,23 +1,24 @@ -! This file is part of stda. +! This file is part of std2. ! -! Copyright (C) 2013-2019 Stefan Grimme +! Copyright (C) 2013-2025 Stefan Grimme and Marc de Wergifosse ! -! stda is free software: you can redistribute it and/or modify it under +! std2 is free software: you can redistribute it and/or modify it under ! the terms of the GNU Lesser General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! -! stda is distributed in the hope that it will be useful, +! std2 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Lesser General Public License for more details. ! ! You should have received a copy of the GNU Lesser General Public License -! along with stda. If not, see . +! along with std2. If not, see . ! +!! ------------------------------------------------------------------------ SUBROUTINE SETETA(J,MNL) use stdacommon - IMPLICIT REAL*8(A-H,O-Z) + IMPLICIT REAL*8(A-H,O-Z) common /carte/ lmn(0:3,0:3,0:3) dimension mnl(3) @@ -46,12 +47,12 @@ SUBROUTINE SETETA(J,MNL) SUBROUTINE VELO(I,J,D) use stdacommon use intpack - IMPLICIT REAL*8(A-H,O-Z) + IMPLICIT REAL*8(A-H,O-Z) common /carte/ lmn(0:3,0:3,0:3) dimension v(3),point(3),nml(3),d(*) - + point=0 ity=ipty(j) if(ity.gt.10.or.ipty(i).gt.10) then @@ -71,9 +72,9 @@ SUBROUTINE VELO(I,J,D) enddo enddo enddo - + 100 alp=exip(j) - if(ity.gt.10) goto 99 + if(ity.gt.10) goto 99 C first term dipole @@ -122,7 +123,7 @@ SUBROUTINE VELO(I,J,D) 3 continue return - + 99 continue c write(*,*) 'no f-functions for velocity integrals' return @@ -136,12 +137,12 @@ SUBROUTINE VELO(I,J,D) SUBROUTINE LXYZ(I,J,D) use stdacommon use intpack - IMPLICIT REAL*8(A-H,O-Z) + IMPLICIT REAL*8(A-H,O-Z) common /carte/ lmn(0:3,0:3,0:3) - + dimension v(3),point(3),nml(3),d(*) - + ity=ipty(j) do l=0,2 do m=0,2 @@ -155,9 +156,9 @@ SUBROUTINE LXYZ(I,J,D) enddo enddo enddo - + 100 alp=exip(j) - if(ity.gt.10) goto 99 + if(ity.gt.10) goto 99 C all terms overlap @@ -198,7 +199,7 @@ SUBROUTINE LXYZ(I,J,D) nml(jj)=nml(jj)-1 call seteta(j,nml) vz2=2.*alp*v(ii) - + if(nml(ii).gt.0) then nml(ii)=nml(ii)-1 call seteta(j,nml) @@ -222,7 +223,7 @@ SUBROUTINE LXYZ(I,J,D) enddo return - + 99 write(*,*) 'no f-functions for lxyz integrals' stop end diff --git a/xstd.f90 b/xstd.f90 new file mode 100644 index 0000000..e1bda43 --- /dev/null +++ b/xstd.f90 @@ -0,0 +1,2769 @@ +! This file is part of std2. +! +! Copyright (C) 2025 Marc de Wergifosse +! +! std2 is free software: you can redistribute it and/or modify it under +! the terms of the GNU Lesser General Public License as published by +! the Free Software Foundation, either version 3 of the License, or +! (at your option) any later version. +! +! std2 is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with std2. If not, see . +! +!! ------------------------------------------------------------------------ +subroutine xstd_rpamat(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),P_ij(:,:),AABB_integral(:,:) + +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + + + + +if(abs(dax).lt.1.0d-6) then + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +else + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao),P_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ij,AABB_integral) + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +endif + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(dax) +! calculate A+B and A-B +apb=0.0e0 +ambsqr=0.0e0 + +! if ax=0, A-B is diagonal and its off-diagonal elements do not need to be calculated +if(abs(dax).lt.1.0d-6) then + ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,ek,de) +!$omp do +do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + jjv=jv-no + jwrk=(jo-1)*nv+jjv + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + apb(ij)=2.0*ak*ek + ambsqr(ij)=0.0 + enddo ! j + de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + ij=lin(i,i) + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) + if(aresp.or.resp.or.optrota) then + ambsqr(ij)=de ! diagonal element of (A-B) + else + ambsqr(ij)=sqrt(de) ! diagonal element of (A-B)^0.5 + endif + apb(ij)=de+ak*ek*2.0 ! diagonal element of A+B +enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia) + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) ambsqr + close(53) +else + ij=0 + ! for now ambsqr=A+B and apb=A-B, since we need to take the sqrt of A-B (but want to save memory) +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,iwrk2,ek,ej) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + jjv=jv-no + jwrk=(jo-1)*nv+jjv + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + ambsqr(ij)=2.0*ak*ek + iwrk2=(io-1)*nv+jjv + jwrk=(jo-1)*nv+iiv + ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax +ek=sdot(nao,P_ia(io,jv,:),1,Q_ia(jo,iv,:),1) + ambsqr(ij)=ambsqr(ij)-ax*ek-ej + apb(ij)=ax*ek-ej + enddo ! j + ij=lin(i,i) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + apb(ij)=de+ax*ek -ej ! diagonal element of A-B + ambsqr(ij)=de-ax*ek+2.0*ak*ek -ej! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,P_ij,Q_ab) + + +! call prmat4(6,apb,nci,0,'A-B') +! call prmat4(6,ambsqr,nci,0,'A+B') +if(aresp.or.resp.or.optrota) then + write(*,*) ' calculating (A-B)^0.5 not necessary...' + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + close(53) + apb=ambsqr +else + open(unit=52,file='apbmat',form='unformatted',status='replace') + write(52) ambsqr + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)')float(nci)**2*float(nci)/4.d+8/60. + call smatpow(nci,apb) ! calculate sqrt(a-b), termed ambsqr + + ambsqr=apb + + rewind(52) + read(52) apb + close(52,status='delete') + close(53) +endif + + +endif ! GGA/hybrid case + +return + +end subroutine xstd_rpamat + +subroutine Xstda_mat(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: hci(nci,nci) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),P_ij(:,:),AABB_integral(:,:) + +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao),P_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ij,AABB_integral) + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(dax) +! calculate A+B and A-B +hci=0.0e0 +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + do j=1,i-1 + jo=iconf(j,1) + jv=iconf(j,2) + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + hci(i,j)=ak*ek-ej + hci(j,i)=hci(i,j) + enddo ! j +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + hci(i,i)=de+ak*ek-ej + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,P_ij,Q_ab) + +return + +end subroutine Xstda_mat + +subroutine two_elec_int(ncent,nbfA,nbfB,integral,start_basA,end_basA,start_basB,end_basB) +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer :: i,j,k,l,start_basA,end_basA,start_basB,end_basB +integer,target :: n,m,o,p,mm,nn +integer,pointer :: ddj,ddk,ddl,dddl +logical :: extra_step +integer :: ncent,nbfA,nbfB,canon + + +integer :: shls(4),counter +integer, target :: di,dj,dk,dl +integer :: orb_cart(1:10,1:10) +double precision, allocatable :: buf(:,:,:,:) +real*4 :: integral(nbfA,nbfB) +double precision :: norm_cart(1:10,1:10),thresh + +integer,external :: CINTcgto_cart + +integer*8 :: opt + +integer :: sm_di(start_basA:end_basA),sm_dj(start_basB:end_basB) + +! enforce not RSH integrals, putting mu to zero +env(9)=0.0d0 + +!only (aa|aa) to compute + +! To get the same order as in libcint +orb_cart(1,1)=1 +orb_cart(3,1)=1 +orb_cart(3,2)=2 +orb_cart(3,3)=3 +orb_cart(6,1)=1 +orb_cart(6,2)=4 +orb_cart(6,3)=5 +orb_cart(6,4)=2 +orb_cart(6,5)=6 +orb_cart(6,6)=3 +orb_cart(10,1)=1 +orb_cart(10,2)=4 +orb_cart(10,3)=5 +orb_cart(10,4)=6 +orb_cart(10,5)=10 +orb_cart(10,6)=8 +orb_cart(10,7)=2 +orb_cart(10,8)=7 +orb_cart(10,9)=9 +orb_cart(10,10)=3 +! For cartesian basis libcint uses d and f not normalized +if(spherical)then +norm_cart=1.0 +else +norm_cart=1.0d0 +norm_cart(6,1)=1.0d0 +norm_cart(6,2)=dsqrt(3.0d0) +norm_cart(6,3)=dsqrt(3.0d0) +norm_cart(6,4)=1.0d0 +norm_cart(6,5)=dsqrt(3.0d0) +norm_cart(6,6)=1.0d0 +norm_cart(10,1)=1.0d0 +norm_cart(10,2)=dsqrt(5.0d0) +norm_cart(10,3)=dsqrt(5.0d0) +norm_cart(10,4)=dsqrt(5.0d0) +norm_cart(10,5)=dsqrt(15.0d0) +norm_cart(10,6)=dsqrt(5.0d0) +norm_cart(10,7)=1.0d0 +norm_cart(10,8)=dsqrt(5.0d0) +norm_cart(10,9)=dsqrt(5.0d0) +norm_cart(10,10)=1.0d0 +endif + +integral=0.0 +thresh=1.0d-7 +write(*,*)"number of AO's (aa|bb)",nbfA*nbfB +!compute (ij|kl) +call cint2e_cart_optimizer(opt,atm,ncent,bas,nbas,env) + +sm_di(start_basA)=0 +Do i=start_basA,end_basA-1 +sm_di(i+1)=sm_di(i)+di_all(i) +enddo +sm_dj(start_basB)=0 +Do i=start_basB,end_basB-1 +sm_dj(i+1)=sm_dj(i)+di_all(i) +enddo + +!$omp parallel private(i,j,m,o,shls,di,dj,dk,dl,buf) +!$omp do +Do i=start_basA,end_basA +shls(1)=i-1 ; di=di_all(i) +shls(2)=i-1 ; dj=di_all(i) +Do j=start_basB,end_basB +shls(3)=j-1 ; dk=di_all(j) +shls(4)=j-1 ; dl=di_all(j) +allocate(buf(di,dj,dk,dl)) +call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) +Do m=1,di +Do o=1,dk +integral(sm_di(i)+orb_cart(di,m),sm_dj(j)+orb_cart(dk,o))& +&=real(buf(m,m,o,o)*norm_cart(di,m)*norm_cart(di,m)*norm_cart(dk,o)*norm_cart(dk,o),4) +enddo +enddo + +deallocate(buf) + +enddo +enddo +!$omp end do +!$omp end parallel + +call CINTdel_optimizer(opt) +write(*,*)"AO's (aa|bb) done" +end subroutine two_elec_int + +subroutine two_elec_int_RSH(ncent,nbfA,nbfB,integral,start_basA,end_basA,start_basB,end_basB) +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer :: i,j,k,l,start_basA,end_basA,start_basB,end_basB +integer,target :: n,m,o,p,mm,nn +integer,pointer :: ddj,ddk,ddl,dddl +logical :: extra_step +integer :: ncent,nbfA,nbfB,canon + + +integer :: shls(4),counter +integer, target :: di,dj,dk,dl +integer :: orb_cart(1:10,1:10) +double precision, allocatable :: buf(:,:,:,:) +real*4 :: integral(nbfA,nbfB) +double precision :: norm_cart(1:10,1:10),thresh + +integer,external :: CINTcgto_cart + +integer*8 :: opt + +integer :: sm_di(start_basA:end_basA),sm_dj(start_basB:end_basB) + +! Range separated hybrid functional + +env(9)=RSH + +!only (aa|aa) to compute + +! To get the same order as in libcint +orb_cart(1,1)=1 +orb_cart(3,1)=1 +orb_cart(3,2)=2 +orb_cart(3,3)=3 +orb_cart(6,1)=1 +orb_cart(6,2)=4 +orb_cart(6,3)=5 +orb_cart(6,4)=2 +orb_cart(6,5)=6 +orb_cart(6,6)=3 +orb_cart(10,1)=1 +orb_cart(10,2)=4 +orb_cart(10,3)=5 +orb_cart(10,4)=6 +orb_cart(10,5)=10 +orb_cart(10,6)=8 +orb_cart(10,7)=2 +orb_cart(10,8)=7 +orb_cart(10,9)=9 +orb_cart(10,10)=3 +! For cartesian basis libcint uses d and f not normalized +if(spherical)then +norm_cart=1.0 +else +norm_cart=1.0d0 +norm_cart(6,1)=1.0d0 +norm_cart(6,2)=dsqrt(3.0d0) +norm_cart(6,3)=dsqrt(3.0d0) +norm_cart(6,4)=1.0d0 +norm_cart(6,5)=dsqrt(3.0d0) +norm_cart(6,6)=1.0d0 +norm_cart(10,1)=1.0d0 +norm_cart(10,2)=dsqrt(5.0d0) +norm_cart(10,3)=dsqrt(5.0d0) +norm_cart(10,4)=dsqrt(5.0d0) +norm_cart(10,5)=dsqrt(15.0d0) +norm_cart(10,6)=dsqrt(5.0d0) +norm_cart(10,7)=1.0d0 +norm_cart(10,8)=dsqrt(5.0d0) +norm_cart(10,9)=dsqrt(5.0d0) +norm_cart(10,10)=1.0d0 +endif + +integral=0.0 +thresh=1.0d-7 +write(*,*)"number of AO's (aa|bb)",nbfA*nbfB +!compute (ij|kl) +call cint2e_cart_optimizer(opt,atm,ncent,bas,nbas,env) + +sm_di(start_basA)=0 +Do i=start_basA,end_basA-1 +sm_di(i+1)=sm_di(i)+di_all(i) +enddo +sm_dj(start_basB)=0 +Do i=start_basB,end_basB-1 +sm_dj(i+1)=sm_dj(i)+di_all(i) +enddo + +!$omp parallel private(i,j,m,o,shls,di,dj,dk,dl,buf) +!$omp do +Do i=start_basA,end_basA +shls(1)=i-1 ; di=di_all(i) +shls(2)=i-1 ; dj=di_all(i) +Do j=start_basB,end_basB +shls(3)=j-1 ; dk=di_all(j) +shls(4)=j-1 ; dl=di_all(j) +allocate(buf(di,dj,dk,dl)) +call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) +Do m=1,di +Do o=1,dk +integral(sm_di(i)+orb_cart(di,m),sm_dj(j)+orb_cart(dk,o))& +&=real(buf(m,m,o,o)*norm_cart(di,m)*norm_cart(di,m)*norm_cart(dk,o)*norm_cart(dk,o),4) +enddo +enddo + +deallocate(buf) + +enddo +enddo +!$omp end do +!$omp end parallel + +call CINTdel_optimizer(opt) +write(*,*)"AO's (aa|bb) done" +end subroutine two_elec_int_RSH + +subroutine two_elec_int_RSH_SR(ncent,nbfA,nbfB,integral,start_basA,end_basA,start_basB,end_basB) +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer :: i,j,k,l,start_basA,end_basA,start_basB,end_basB +integer,target :: n,m,o,p,mm,nn +integer,pointer :: ddj,ddk,ddl,dddl +logical :: extra_step +integer :: ncent,nbfA,nbfB,canon + + +integer :: shls(4),counter +integer, target :: di,dj,dk,dl +integer :: orb_cart(1:10,1:10) +double precision, allocatable :: buf(:,:,:,:) +real*4 :: integral(nbfA,nbfB) +double precision :: norm_cart(1:10,1:10),thresh + +integer,external :: CINTcgto_cart + +integer*8 :: opt + +integer :: sm_di(start_basA:end_basA),sm_dj(start_basB:end_basB) + +! Range separated hybrid functional + +env(9)=-RSH2 + +!only (aa|aa) to compute + +! To get the same order as in libcint +orb_cart(1,1)=1 +orb_cart(3,1)=1 +orb_cart(3,2)=2 +orb_cart(3,3)=3 +orb_cart(6,1)=1 +orb_cart(6,2)=4 +orb_cart(6,3)=5 +orb_cart(6,4)=2 +orb_cart(6,5)=6 +orb_cart(6,6)=3 +orb_cart(10,1)=1 +orb_cart(10,2)=4 +orb_cart(10,3)=5 +orb_cart(10,4)=6 +orb_cart(10,5)=10 +orb_cart(10,6)=8 +orb_cart(10,7)=2 +orb_cart(10,8)=7 +orb_cart(10,9)=9 +orb_cart(10,10)=3 +! For cartesian basis libcint uses d and f not normalized +if(spherical)then +norm_cart=1.0 +else +norm_cart=1.0d0 +norm_cart(6,1)=1.0d0 +norm_cart(6,2)=dsqrt(3.0d0) +norm_cart(6,3)=dsqrt(3.0d0) +norm_cart(6,4)=1.0d0 +norm_cart(6,5)=dsqrt(3.0d0) +norm_cart(6,6)=1.0d0 +norm_cart(10,1)=1.0d0 +norm_cart(10,2)=dsqrt(5.0d0) +norm_cart(10,3)=dsqrt(5.0d0) +norm_cart(10,4)=dsqrt(5.0d0) +norm_cart(10,5)=dsqrt(15.0d0) +norm_cart(10,6)=dsqrt(5.0d0) +norm_cart(10,7)=1.0d0 +norm_cart(10,8)=dsqrt(5.0d0) +norm_cart(10,9)=dsqrt(5.0d0) +norm_cart(10,10)=1.0d0 +endif + +integral=0.0 +thresh=1.0d-7 +write(*,*)"number of AO's (aa|bb)",nbfA*nbfB +!compute (ij|kl) +call cint2e_cart_optimizer(opt,atm,ncent,bas,nbas,env) + +sm_di(start_basA)=0 +Do i=start_basA,end_basA-1 +sm_di(i+1)=sm_di(i)+di_all(i) +enddo +sm_dj(start_basB)=0 +Do i=start_basB,end_basB-1 +sm_dj(i+1)=sm_dj(i)+di_all(i) +enddo + +!$omp parallel private(i,j,m,o,shls,di,dj,dk,dl,buf) +!$omp do +Do i=start_basA,end_basA +shls(1)=i-1 ; di=di_all(i) +shls(2)=i-1 ; dj=di_all(i) +Do j=start_basB,end_basB +shls(3)=j-1 ; dk=di_all(j) +shls(4)=j-1 ; dl=di_all(j) +allocate(buf(di,dj,dk,dl)) +call cint2e_cart(buf,shls,atm,ncent,bas,nbas,env,opt) +Do m=1,di +Do o=1,dk +integral(sm_di(i)+orb_cart(di,m),sm_dj(j)+orb_cart(dk,o))& +&=real(buf(m,m,o,o)*norm_cart(di,m)*norm_cart(di,m)*norm_cart(dk,o)*norm_cart(dk,o),4) +enddo +enddo + +deallocate(buf) + +enddo +enddo +!$omp end do +!$omp end parallel + +call CINTdel_optimizer(opt) +write(*,*)"AO's (aa|bb) done" +end subroutine two_elec_int_RSH_SR + +subroutine xstd_rpamat_RSH(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj,ek_RSH + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),P_ij(:,:),AABB_integral(:,:),P_ia_RSH(:,:,:),P_ij_RSH(:,:) +real*4,allocatable :: P_ia_RSH_SR(:,:,:),P_ij_RSH_SR(:,:) +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!RSH integrals short range + +allocate(AABB_integral(nao,nao)) +call two_elec_int_RSH_SR(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ia_RSH_SR(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia_RSH_SR(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ij_RSH_SR(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH_SR(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +!RSH integrals long range + +allocate(AABB_integral(nao,nao)) +call two_elec_int_RSH(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ia_RSH(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia_RSH(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ij_RSH(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + + +deallocate(Q_ij,AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(RSH_ax,4) +! calculate A+B and A-B +apb=0.0e0 +ambsqr=0.0e0 + + + ij=0 + ! for now ambsqr=A+B and apb=A-B, since we need to take the sqrt of A-B (but want to save memory) +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,iwrk2,ek,ej) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + jjv=jv-no + jwrk=(jo-1)*nv+jjv + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij_RSH_SR(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + ambsqr(ij)=2.0*ak*ek + iwrk2=(io-1)*nv+jjv + jwrk=(jo-1)*nv+iiv + ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax +ek=ax*sdot(nao,P_ia_RSH_SR(io,jv,:),1,Q_ia(jo,iv,:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,jv,:),1,Q_ia(jo,iv,:),1) + ambsqr(ij)=ambsqr(ij)-ek-ej + apb(ij)=ek-ej + enddo ! j + ij=lin(i,i) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ek_RSH=ax*sdot(nao,P_ia_RSH_SR(io,iv,:),1,Q_ia(io,iv,:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij_RSH_SR(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + apb(ij)=de+ek_RSH -ej ! diagonal element of A-B + ambsqr(ij)=de-ek_RSH+2.0*ak*ek -ej! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,Q_ab,P_ia_RSH,P_ij_RSH,P_ia_RSH_SR,P_ij_RSH_SR) + + +! call prmat4(6,apb,nci,0,'A-B') +! call prmat4(6,ambsqr,nci,0,'A+B') +if(aresp.or.resp.or.optrota) then + write(*,*) ' calculating (A-B)^0.5 not necessary...' + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + close(53) + apb=ambsqr +else + open(unit=52,file='apbmat',form='unformatted',status='replace') + write(52) ambsqr + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)')float(nci)**2*float(nci)/4.d+8/60. + call smatpow(nci,apb) ! calculate sqrt(a-b), termed ambsqr + + ambsqr=apb + + rewind(52) + read(52) apb + close(52,status='delete') + close(53) +endif + + + + +return + +end subroutine xstd_rpamat_RSH + +subroutine xstd_rpamat_RSH2(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,apb,ambsqr,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: apb(nci*(nci+1)/2),ambsqr(nci*(nci+1)/2) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj,ek_RSH + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),P_ij(:,:),AABB_integral(:,:),P_ia_RSH(:,:,:),P_ij_RSH(:,:) +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +!RSH integrals long range + +allocate(AABB_integral(nao,nao)) +call two_elec_int_RSH(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ia_RSH(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia_RSH(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ij_RSH(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + + +deallocate(Q_ij,AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(RSH_ax,4) +! calculate A+B and A-B +apb=0.0e0 +ambsqr=0.0e0 + + + ij=0 + ! for now ambsqr=A+B and apb=A-B, since we need to take the sqrt of A-B (but want to save memory) +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,iwrk2,ek,ej) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + jjv=jv-no + jwrk=(jo-1)*nv+jjv + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + ambsqr(ij)=2.0*ak*ek + iwrk2=(io-1)*nv+jjv + jwrk=(jo-1)*nv+iiv + ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax +ek=ax*sdot(nao,P_ia(io,jv,:),1,Q_ia(jo,iv,:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,jv,:),1,Q_ia(jo,iv,:),1) + ambsqr(ij)=ambsqr(ij)-ek-ej + apb(ij)=ek-ej + enddo ! j + ij=lin(i,i) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ek_RSH=ax*sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + apb(ij)=de+ek_RSH -ej ! diagonal element of A-B + ambsqr(ij)=de-ek_RSH+2.0*ak*ek -ej! diagonal element of A+B + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,Q_ab,P_ia_RSH,P_ij_RSH,P_ij) + + +! call prmat4(6,apb,nci,0,'A-B') +! call prmat4(6,ambsqr,nci,0,'A+B') +if(aresp.or.resp.or.optrota) then + write(*,*) ' calculating (A-B)^0.5 not necessary...' + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + close(53) + apb=ambsqr +else + open(unit=52,file='apbmat',form='unformatted',status='replace') + write(52) ambsqr + open(unit=53,file='amb',form='unformatted',status='replace') + write(53) apb + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)')float(nci)**2*float(nci)/4.d+8/60. + call smatpow(nci,apb) ! calculate sqrt(a-b), termed ambsqr + + ambsqr=apb + + rewind(52) + read(52) apb + close(52,status='delete') + close(53) +endif + + + + +return + +end subroutine xstd_rpamat_RSH2 + +subroutine Xstda_mat_RSH(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: hci(nci,nci) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj,ek_RSH + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),AABB_integral(:,:),P_ij_RSH(:,:) +real*4,allocatable :: P_ij_RSH_SR(:,:) + +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + + +!RSH integrals short range + +allocate(AABB_integral(nao,nao)) +call two_elec_int_RSH_SR(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ij_RSH_SR(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH_SR(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +!RSH integrals long range + +allocate(AABB_integral(nao,nao)) +call two_elec_int_RSH(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ij_RSH(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ij,AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(RSH_ax,4) +! calculate A+B and A-B +hci=0.0e0 +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + do j=1,i-1 + jo=iconf(j,1) + jv=iconf(j,2) + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij_RSH_SR(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + hci(i,j)=ak*ek-ej + hci(j,i)=hci(i,j) + enddo ! j +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij_RSH_SR(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + hci(i,i)=de+ak*ek-ej + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,P_ij_RSH,P_ij_RSH_SR,Q_ab) + +return + +end subroutine Xstda_mat_RSH + +subroutine Xstda_mat_RSH2(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,hci,alphak,betaj,xyz,nao,moci,clow,alpha,beta,epsi) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dak,dax,ed(mxcnf),alpha,beta +real*4, intent(out) :: hci(nci,nci) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ak,ax,de,alphak,betaj,ek_RSH + +real*4 :: start_time,end_time,start +integer :: ino,nno,inv,nnv + +integer :: nao,moci +real*8 :: clow(nao*moci) + +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),Q_ij(:,:),Q_ab(:,:),P_ij(:,:),AABB_integral(:,:),P_ij_RSH(:,:) + +real*4 :: value1,value2,value3,rabx +real*8 :: epsi(moci) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno +Do k=ino, i +Do j=1, nao + Q_ij(lin(i,k),j)=clow(j+(i-1)*nao)*clow(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ij(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +allocate(Q_ab(inv*(inv+1)/2:nnv*(nnv+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inv,nnv +Do l=inv, j +Do i=1,nao + Q_ab(lin(j,l),i)=clow(i+(j-1)*nao)*clow(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + + + +!RSH integrals long range + +allocate(AABB_integral(nao,nao)) + +call two_elec_int_RSH(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + +allocate(P_ij_RSH(ino*(ino+1)/2:nno*(nno+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=ino, nno + Do k=ino, nno + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ij(lin(i,k),:),1,0.0,P_ij_RSH(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ij,AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ak=real(dak) +ax=real(RSH_ax,4) +! calculate A+B and A-B +hci=0.0e0 +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + do j=1,i-1 + jo=iconf(j,1) + jv=iconf(j,2) + ! ek = (ia|jb) +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ij(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,jo),:),1,Q_ab(lin(iv,jv),:),1) + hci(i,j)=ak*ek-ej + hci(j,i)=hci(i,j) + enddo ! j +ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) +ej=ax*sdot(nao,P_ij(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1)& +&+real(RSH_beta,4)*sdot(nao,P_ij_RSH(lin(io,io),:),1,Q_ab(lin(iv,iv),:),1) +de=real(epsi(iconf(i,2))-epsi(iconf(i,1)),4) + hci(i,i)=de+ak*ek-ej + enddo ! i +!$omp end do +!$omp end parallel + +deallocate(P_ia,Q_ia,P_ij_RSH,P_ij,Q_ab) + +return + +end subroutine Xstda_mat_RSH2 + + +subroutine Xsrtdacorr(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,clow,nao,moci) +use omp_lib +use commonlogicals +use stdacommon +use commonlibcint +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: dak,dax,ed(mxcnf) +real*4, allocatable :: bmat(:) +integer i,j,k,io,iv,jo,jv,ierr,iiv,jjv,iwrk,jwrk,lin,ij +real*4 ek,ej,sdot,ak,ax,de,fact + + +real*4 :: start_time,end_time,start +integer :: nao,moci +integer :: ino,nno,inv,nnv +real*8 :: clow(nao*moci) +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),AABB_integral(:,:) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + +ij=nci +ij=ij*(ij+1)/2 +allocate(bmat(ij), stat=ierr) +if(ierr.ne.0)stop 'allocation for bmat crashed' +ak=real(dak) +ax=real(dax) +! calculate 0.5*B +bmat=0.0e0 +fact=0.50d0 ! this is the scaling of the B-contribution +open(unit=52,file='bmat',form='unformatted',status='replace') +ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,ek,ej) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + bmat(ij)=(fact)*ak*ek + + ek=sdot(nao,P_ia(io,jv,:),1,Q_ia(jo,iv,:),1) + bmat(ij)=bmat(ij)-fact*ax*ek ! scaled by ax + enddo + ij=lin(i,i) + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) + bmat(ij)=fact*(ak*ek-ax*ek) ! diagonal element of 0.5*B + enddo +!$omp end do +!$omp end parallel +write(52)bmat +close(52) +deallocate(bmat,P_ia,Q_ia) +return + +end subroutine XSrtdacorr + +subroutine uXstda_mat(nci,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa,mxcnfb,iconfa,iconfb,dax,eda,edb,hci,alpha,beta,& +&xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,nexa,nexb,ncent,noa,nva,mxcnfa,iconfa(mxcnfa,2),nob,nvb,mxcnfb,iconfb(mxcnfb,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dax,eda(mxcnfa),edb(mxcnfb),alpha,beta +real*4, intent(out) :: hci(nci,nci) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ax,de,alphak,betaj + +real*4 :: start_time,end_time,start +integer :: inoa,nnoa,inva,nnva +integer :: inob,nnob,invb,nnvb + +integer :: nao,mocia,mocib +real*8 :: clowa(nao*mocia),clowb(nao*mocib) + +real*4,allocatable :: Q_iaA(:,:,:),P_iaA(:,:,:),Q_ijA(:,:),Q_abA(:,:),P_ijA(:,:),AABB_integral(:,:) +real*4,allocatable :: Q_iaB(:,:,:),P_iaB(:,:,:),Q_ijB(:,:),Q_abB(:,:),P_ijB(:,:) +real*4 :: value1,value2,value3,rabx +real*8 :: epsia(mocia),epsib(mocib) + +alphaK=real(alpha,4) +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +inoa=minval(iconfa(1:nexa,1)) +nnoa=maxval(iconfa(1:nexa,1)) +inva=minval(iconfa(1:nexa,2)) ! start with no+1 +nnva=maxval(iconfa(1:nexa,2)) +write(*,*)'alpha MOs' +write(*,*)'Q transition charges computed for occ.',inoa,'to',nnoa +write(*,*)'and for unocc.',inva,'to',nnva + +allocate(Q_iaA(inoa:nnoa,inva:nnva,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inoa, nnoa +Do j=inva,nnva +Do k=1,nao + Q_iaA(i,j,k)=clowa(k+(i-1)*nao)*clowa(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_iaA(inoa:nnoa,inva:nnva,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inoa, nnoa + Do j=inva,nnva + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_iaA(i,j,:),1,0.0,P_iaA(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao),P_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa +Do k=inoa, i +Do j=1, nao + Q_ijA(lin(i,k),j)=clowa(j+(i-1)*nao)*clowa(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa + Do k=inoa, nnoa + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ijA(lin(i,k),:),1,0.0,P_ijA(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ijA) + +allocate(Q_abA(inva*(inva+1)/2:nnva*(nnva+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inva,nnva +Do l=inva, j +Do i=1,nao + Q_abA(lin(j,l),i)=clowa(i+(j-1)*nao)*clowa(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +inob=minval(iconfb(1:nci-nexa,1)) +nnob=maxval(iconfb(1:nci-nexa,1)) +invb=minval(iconfb(1:nci-nexa,2)) ! start with no+1 +nnvb=maxval(iconfb(1:nci-nexa,2)) +write(*,*)'beta MOs' +write(*,*)'Q transition charges computed for occ.',inob,'to',nnob +write(*,*)'and for unocc.',invb,'to',nnvb + +allocate(Q_iaB(inob:nnob,invb:nnvb,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inob, nnob +Do j=invb,nnvb +Do k=1,nao + Q_iaB(i,j,k)=clowb(k+(i-1)*nao)*clowb(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_iaB(inob:nnob,invb:nnvb,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inob, nnob + Do j=invb,nnvb + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_iaB(i,j,:),1,0.0,P_iaB(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ijB(inob*(inob+1)/2:nnob*(nnob+1)/2,nao),P_ijB(inob*(inob+1)/2:nnob*(nnob+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=inob, nnob +Do k=inob, i +Do j=1, nao + Q_ijB(lin(i,k),j)=clowb(j+(i-1)*nao)*clowb(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=inob, nnob + Do k=inob, nnob + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ijB(lin(i,k),:),1,0.0,P_ijB(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ijB,AABB_integral) + +allocate(Q_abB(invb*(invb+1)/2:nnvb*(nnvb+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=invb,nnvb +Do l=invb, j +Do i=1,nao + Q_abB(lin(j,l),i)=clowb(i+(j-1)*nao)*clowb(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ax=real(dax) +! calculate A+B and A-B +hci=0.0e0 + +!alpha-alpha block +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i=1,nexa + io=iconfa(i,1) + iv=iconfa(i,2) + do j=1,i-1 + jo=iconfa(j,1) + jv=iconfa(j,2) + ! ek = (ia|jb) +ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(jo,jv,:),1) + ! ej = (ij|ab) +ej=ax*sdot(nao,P_ijA(lin(io,jo),:),1,Q_abA(lin(iv,jv),:),1) + hci(i,j)=ek-ej + hci(j,i)=hci(i,j) + enddo ! j +ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(io,iv,:),1) +ej=ax*sdot(nao,P_ijA(lin(io,io),:),1,Q_abA(lin(iv,iv),:),1) +de=real(epsia(iconfa(i,2))-epsia(iconfa(i,1)),4) + hci(i,i)=de+ek-ej + enddo ! i +!$omp end do +!$omp end parallel + +! beta blocks +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i = nexa+1,nci + io=iconfb(i-nexa,1) + iv=iconfb(i-nexa,2) +! alpha-beta + do j = 1,nexa + jo=iconfa(j,1) + jv=iconfa(j,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaA(jo,jv,:),1) + hci(j,i)=ek + hci(i,j)=ek + enddo +! beta-beta + do j = nexa+1,i-1 + jo=iconfb(j-nexa,1) + jv=iconfb(j-nexa,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(jo,jv,:),1) + ej=ax*sdot(nao,P_ijB(lin(io,jo),:),1,Q_abB(lin(iv,jv),:),1) + hci(j,i)=ek-ej + hci(i,j)=hci(j,i) + enddo + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(io,iv,:),1) + ej=ax*sdot(nao,P_ijB(lin(io,io),:),1,Q_abB(lin(iv,iv),:),1) + de=real(epsib(iconfb(i-nexa,2))-epsib(iconfb(i-nexa,1)),4) + hci(i,i)=de+ek-ej + enddo +!$omp end do +!$omp end parallel + +deallocate(P_iaA,Q_iaA,P_ijA,Q_abA,P_iaB,Q_iaB,P_ijB,Q_abB) + +return + +end subroutine uXstda_mat + +subroutine SF_Xstda_mat(nci,nexb,ncent,noa,nva,nob,nvb,mxcnfb,iconfb,dax,edb,hci,beta,& +&xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) ! (AA|BB) only +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nci,nexb,ncent,noa,nva,nob,nvb,mxcnfb,iconfb(mxcnfb,2) +real*8, intent(in) :: xyz(4,ncent) +real*8, intent(in) :: dax,edb(mxcnfb),beta +real*4, intent(out) :: hci(nci,nci) +integer i,j,ij,io,iv,jo,jv,ierr,lin,iiv,jjv,iwrk,jwrk,iwrk2,k,l,a,b,m,n,o,p,aa,bb,ia,jb +real*4 ek,ej,sdot,ax,de,betaj + +real*4 :: start_time,end_time,start +integer :: inoa,nnoa,inva,nnva +integer :: inob,nnob,invb,nnvb + +integer :: nao,mocia,mocib +real*8 :: clowa(nao*mocia),clowb(nao*mocib) + +real*4,allocatable :: Q_ijA(:,:),P_ijA(:,:),AABB_integral(:,:) +real*4,allocatable :: Q_abB(:,:) +real*4 :: value1,value2,value3,rabx +real*8 :: epsia(mocia),epsib(mocib) + +betaJ=real(beta,4) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +inoa=minval(iconfb(1:nci,1)) +nnoa=maxval(iconfb(1:nci,1)) +write(*,*)'alpha MOs' +write(*,*)'Q transition charges computed for occ.',inoa,'to',nnoa + +allocate(Q_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao),P_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa +Do k=inoa, i +Do j=1, nao + Q_ijA(lin(i,k),j)=clowa(j+(i-1)*nao)*clowa(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa + Do k=inoa, nnoa + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ijA(lin(i,k),:),1,0.0,P_ijA(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ijA) + + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +invb=minval(iconfb(1:nci,2)) ! start with no+1 +nnvb=maxval(iconfb(1:nci,2)) +write(*,*)'beta MOs' +write(*,*)'and for unocc.',invb,'to',nnvb + +allocate(Q_abB(invb*(invb+1)/2:nnvb*(nnvb+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=invb,nnvb +Do l=invb, j +Do i=1,nao + Q_abB(lin(j,l),i)=clowb(i+(j-1)*nao)*clowb(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ax=real(dax) +! calculate A+B and A-B +hci=0.0e0 + +! beta blocks +!$omp parallel private(i,j,io,iv,jo,jv,ek,ej,de) +!$omp do + do i = 1,nci + io=iconfb(i,1) + iv=iconfb(i,2) +! beta-beta + do j = 1,i-1 + jo=iconfb(j,1) + jv=iconfb(j,2) + ej=ax*sdot(nao,P_ijA(lin(io,jo),:),1,Q_abB(lin(iv,jv),:),1) + hci(j,i)=-ej + hci(i,j)=hci(j,i) + enddo + ej=ax*sdot(nao,P_ijA(lin(io,io),:),1,Q_abB(lin(iv,iv),:),1) + de=real(epsib(iconfb(i,2))-epsia(iconfb(i,1)),4) + hci(i,i)=de-ej + enddo +!$omp end do +!$omp end parallel + +deallocate(P_ijA,Q_abB) + +return + +end subroutine SF_Xstda_mat + +subroutine uXsrpamat(nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa,& + &mxcnfb,iconfa,iconfb,dax,eda,edb,ambsqr,& + &alpha,beta,xyz,nao,mocia,mocib,clowa,clowb,epsia,epsib) +use commonlogicals +use stdacommon +use commonlibcint +use omp_lib +implicit none +integer, intent(in) :: nex,nexa,nexb,ncent,noa,nva,nob,nvb,mxcnfa,nao,mocia,mocib +real*8, intent(in) :: xyz(4,ncent) +integer, intent(in) :: mxcnfb,iconfa(mxcnfa,2),iconfb(mxcnfb,2) +real*4, intent(out) :: ambsqr(nex*(nex+1)/2) +real*8, intent(in) :: dax,eda(mxcnfa),edb(mxcnfb),alpha,beta +real*4, allocatable :: apb(:) +integer i,j,ij,io,iv,jo,jv,ierr,lin,k,iiv,jjv,iwrk,jwrk,iwrk2,l,a,b,m,n,o,p,aa,bb,ia,jb,nci +real*4 ek,ej,sdot,ax,de,alphak,betaj +real*8 :: clowa(nao*mocia),clowb(nao*mocib) +real*8 :: epsia(mocia),epsib(mocib) +real*4 :: start_time,end_time,start +integer :: inoa,nnoa,inva,nnva +integer :: inob,nnob,invb,nnvb +real*4,allocatable :: Q_iaA(:,:,:),P_iaA(:,:,:),Q_ijA(:,:),Q_abA(:,:),P_ijA(:,:),AABB_integral(:,:) +real*4,allocatable :: Q_iaB(:,:,:),P_iaB(:,:,:),Q_ijB(:,:),Q_abB(:,:),P_ijB(:,:) +real*4 :: value1,value2,value3,rab +nci=nex +alphaK=real(alpha,4) +betaJ=real(beta,4) +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +inoa=minval(iconfa(1:nexa,1)) +nnoa=maxval(iconfa(1:nexa,1)) +inva=minval(iconfa(1:nexa,2)) ! start with no+1 +nnva=maxval(iconfa(1:nexa,2)) +write(*,*)'alpha MOs' +write(*,*)'Q transition charges computed for occ.',inoa,'to',nnoa +write(*,*)'and for unocc.',inva,'to',nnva + +allocate(Q_iaA(inoa:nnoa,inva:nnva,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inoa, nnoa +Do j=inva,nnva +Do k=1,nao + Q_iaA(i,j,k)=clowa(k+(i-1)*nao)*clowa(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_iaA(inoa:nnoa,inva:nnva,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inoa, nnoa + Do j=inva,nnva + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_iaA(i,j,:),1,0.0,P_iaA(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao),P_ijA(inoa*(inoa+1)/2:nnoa*(nnoa+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa +Do k=inoa, i +Do j=1, nao + Q_ijA(lin(i,k),j)=clowa(j+(i-1)*nao)*clowa(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=inoa, nnoa + Do k=inoa, nnoa + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ijA(lin(i,k),:),1,0.0,P_ijA(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ijA) + +allocate(Q_abA(inva*(inva+1)/2:nnva*(nnva+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=inva,nnva +Do l=inva, j +Do i=1,nao + Q_abA(lin(j,l),i)=clowa(i+(j-1)*nao)*clowa(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +inob=minval(iconfb(1:nci-nexa,1)) +nnob=maxval(iconfb(1:nci-nexa,1)) +invb=minval(iconfb(1:nci-nexa,2)) ! start with no+1 +nnvb=maxval(iconfb(1:nci-nexa,2)) +write(*,*)'beta MOs' +write(*,*)'Q transition charges computed for occ.',inob,'to',nnob +write(*,*)'and for unocc.',invb,'to',nnvb + +allocate(Q_iaB(inob:nnob,invb:nnvb,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inob, nnob +Do j=invb,nnvb +Do k=1,nao + Q_iaB(i,j,k)=clowb(k+(i-1)*nao)*clowb(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_iaB(inob:nnob,invb:nnvb,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=inob, nnob + Do j=invb,nnvb + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_iaB(i,j,:),1,0.0,P_iaB(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +allocate(Q_ijB(inob*(inob+1)/2:nnob*(nnob+1)/2,nao),P_ijB(inob*(inob+1)/2:nnob*(nnob+1)/2,nao)) + +!$omp parallel private(i,k) +!$omp do +Do i=inob, nnob +Do k=inob, i +Do j=1, nao + Q_ijB(lin(i,k),j)=clowb(j+(i-1)*nao)*clowb(j+(k-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +!$omp parallel private(i,k) +!$omp do +Do i=inob, nnob + Do k=inob, nnob + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ijB(lin(i,k),:),1,0.0,P_ijB(lin(i,k),:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(Q_ijB,AABB_integral) + +allocate(Q_abB(invb*(invb+1)/2:nnvb*(nnvb+1)/2,nao)) + +!$omp parallel private(j,l) +!$omp do +Do j=invb,nnvb +Do l=invb, j +Do i=1,nao + Q_abB(lin(j,l),i)=clowb(i+(j-1)*nao)*clowb(i+(l-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + + +ax=real(dax) + +open(unit=52,file='apbmat',form='unformatted',status='replace') +ambsqr=0.0e0 + +if(abs(dax).lt.1.0d-6) then +! calculate A+B and (A-B)^0.5 + allocate(apb(nex*(nex+1)/2),stat=ierr) + if(ierr.ne.0)stop 'allocation for A+B crashed' + apb=0.0e0 + ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,ek,de) +!$omp do +! alpha-alpha block + do i = 1,nexa + io=iconfa(i,1) + iv=iconfa(i,2) + do j=1,i-1 + ij=lin(i,j) + jo=iconfa(j,1) + jv=iconfa(j,2) + ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(jo,jv,:),1)! ek = (ia|jb) + apb(ij)=2.0*ek + ambsqr(ij)=0.0 + enddo + ij=lin(i,i) + ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(io,iv,:),1) + de=real(epsia(iconfa(i,2))-epsia(iconfa(i,1)),4) + ambsqr(ij)=sqrt(de) ! diagonal element of (A-B)^0.5 + apb(ij)=de+ek*2.0 ! diagonal element of A+B + enddo +!$omp end do +!$omp end parallel +!$omp parallel private(ij,i,j,io,iv,jo,jv,de,ek) +!$omp do +! beta block + do i = nexa+1,nex + io=iconfb(i-nexa,1) + iv=iconfb(i-nexa,2) +!... with alpha + do j = 1,nexa + ij=lin(i,j) + jo=iconfa(j,1) + jv=iconfa(j,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaA(jo,jv,:),1)! ek = (ia|jb) + apb(ij)=2.0*ek + enddo +!... with beta + do j=nexa+1,i-1 + ij=lin(i,j) + jo=iconfb(j-nexa,1) + jv=iconfb(j-nexa,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(jo,jv,:),1) ! ek = (ia|jb) + apb(ij)=2.0*ek + enddo + ij=lin(i,i) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(io,iv,:),1) + de=real(epsib(iconfb(i-nexa,2))-epsib(iconfb(i-nexa,1)),4) + ambsqr(ij)=sqrt(de) ! diagonal element of (A-B)^0.5 + apb(ij)=de+ek*2.0 ! diagonal element of A+B + enddo +!$omp end do +!$omp end parallel + write(52)apb +else + +!******************** +! now the hybrid case +! this is tedious, since we have to diagonalize A-B +! for alpha and beta seperately (to save time) +! since we diagonalize alpha and beta blocks of A-B separately, we temporarily use apb for this and allocate for each space separately +!******************** + allocate(apb(nexa*(nexa+1)/2),stat=ierr) + apb=0.0e0 + if(ierr.ne.0)stop 'allocation failed for A-B vector' +! calculate A+B and A-B +! alpha-alpha block + ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,de,ek,ej) +!$omp do + do i = 1,nexa + io=iconfa(i,1) + iv=iconfa(i,2) + do j=1,i-1 + ij=lin(i,j) + jo=iconfa(j,1) + jv=iconfa(j,2) + ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(jo,jv,:),1) ! ek = (ia|jb) + ej=ax*sdot(nao,P_ijA(lin(io,jo),:),1,Q_abA(lin(iv,jv),:),1) ! ej = (ij|ab) + ambsqr(ij)=2.0*ek-ej + ek=sdot(nao,P_iaA(io,jv,:),1,Q_iaA(jo,iv,:),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax + ! A+B part + ambsqr(ij)=ambsqr(ij)-ax*ek + ! we first use apb as A-B + apb(ij)=ax*ek-ej + enddo + ij=lin(i,j) + ek=sdot(nao,P_iaA(io,iv,:),1,Q_iaA(io,iv,:),1) + ej=ax*sdot(nao,P_ijA(lin(io,io),:),1,Q_abA(lin(iv,iv),:),1) + de=real(epsia(iconfa(i,2))-epsia(iconfa(i,1)),4) + apb(ij)=de+ax*ek-ej! diagonal element of A-B + ambsqr(ij)=de-ax*ek+2.0*ek-ej ! diagonal element of A+B + enddo +!$omp end do +!$omp end parallel + +! beta... +!$omp parallel private(ij,i,j,io,iv,jo,jv,de,ek,ej) +!$omp do + do i = nexa+1,nex + io=iconfb(i-nexa,1) + iv=iconfb(i-nexa,2) +! ...alpha block + do j = 1,nexa + ij=lin(i,j) + jo=iconfa(j,1) + jv=iconfa(j,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaA(jo,jv,:),1)! ek = (ia|jb) + ambsqr(ij)=2.0*ek + enddo +! ...beta block + do j = nexa+1,i-1 + ij=ij+1 + jo=iconfb(j-nexa,1) + jv=iconfb(j-nexa,2) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(jo,jv,:),1) ! ek = (ia|jb) + ej=ax*sdot(nao,P_ijB(lin(io,jo),:),1,Q_abB(lin(iv,jv),:),1) ! ej = (ij|ab) + ambsqr(ij)=2.0*ek-ej + ek=sdot(nao,P_iaB(io,jv,:),1,Q_iaB(jo,iv,:),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax + ambsqr(ij)=ambsqr(ij)-ax*ek ! scaled by ax + enddo + ij=lin(i,j) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(io,iv,:),1) + ej=ax*sdot(nao,P_ijB(lin(io,io),:),1,Q_abB(lin(iv,iv),:),1) + de=real(epsib(iconfb(i-nexa,2))-epsib(iconfb(i-nexa,1)),4) + ambsqr(ij)=de+2.0*ek-ax*ek-ej ! diagonal element of A+0.5*B (beta part) + enddo +!$omp end do +!$omp end parallel + + write(52)ambsqr + +! this the time determining step, since A-B needs to be diagonalized in full nci space + write(*,*) ' calculating (A-B)^0.5 ...' + write(*,'('' estimated time (min) '',f8.2)') (float(nexb)**2*float(nexb)+float(nexa)**2*float(nexa))/4.d+8/60. + +! take power of alpha-alpha block of A-B + call smatpow(nexa,apb) +! blow up alpha-alpha block of (A-B)^0.5 + ij=0 + do i=1,nexa + do j=1,i + ij=ij+1 + ambsqr(ij)=apb(ij) + enddo + enddo + +! free memory anf reallocate for beta-beta part + deallocate(apb) + allocate(apb(nexb*(nexb+1)/2),stat=ierr) + if(ierr.ne.0)stop 'allocation failed for A-B vector' + +! beta-beta block + ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,de,ek,ej) +!$omp do + do i = 1,nexb + io=iconfb(i,1) + iv=iconfb(i,2) + do j = 1,i-1 + ij=lin(i,j) + jo=iconfb(j,1) + jv=iconfb(j,2) + ej=ax*sdot(nao,P_ijB(lin(io,jo),:),1,Q_abB(lin(iv,jv),:),1) ! ej = (ij|ab) + ek=sdot(nao,P_iaB(io,jv,:),1,Q_iaB(jo,iv,:),1) ! now ek = (ib|aj), results from Fock-exchange, thus we scale by ax + ! we first use apb as A-B + apb(ij)=ax*ek-ej + enddo + ij=lin(i,i) + ek=sdot(nao,P_iaB(io,iv,:),1,Q_iaB(io,iv,:),1) + ej=ax*sdot(nao,P_ijB(lin(io,io),:),1,Q_abB(lin(iv,iv),:),1) + de=real(epsib(iconfb(i,2))-epsib(iconfb(i,1)),4) + apb(ij)=de+ax*ek-ej ! diagonal element of A-B + enddo +!$omp end do +!$omp end parallel + +! take power of beta-beta block of A-B + call smatpow(nexb,apb) +! blow up beta-beta block of (A-B)^0.5 + + k=nexa*(nexa+1) + k=k/2 + ij=0 + do i=nexa+1,nex + do j=1,nexa + k=k+1 + ambsqr(k)=0.0e0 + enddo + do j=nexa+1,i + k=k+1 + ij=ij+1 + ambsqr(k)=apb(ij) + enddo + enddo +! free memory and reallocate for beta-beta part + deallocate(apb) +endif ! GGA/hybrid case +close(52) + +deallocate(P_iaA,Q_iaA,P_ijA,Q_abA,P_iaB,Q_iaB,P_ijB,Q_abB) + +return + +end subroutine uXsrpamat + + +subroutine RSH_Xsrtdacorr(nci,ncent,no,nv,mxcnf,iconf,dak,dax,ed,clow,nao,moci) +use omp_lib +use commonlogicals +use stdacommon +use commonlibcint +implicit none +integer, intent(in) :: nci,ncent,no,nv,mxcnf,iconf(mxcnf,2) +real*8, intent(in) :: dak,dax,ed(mxcnf) +real*4, allocatable :: bmat(:) +integer i,j,k,io,iv,jo,jv,ierr,iiv,jjv,iwrk,jwrk,lin,ij +real*4 ek,ej,sdot,ak,ax,de,fact,ek_RSH + + +real*4 :: start_time,end_time,start +integer :: nao,moci +integer :: ino,nno,inv,nnv +real*8 :: clow(nao*moci) +real*4,allocatable :: Q_ia(:,:,:),P_ia(:,:,:),AABB_integral(:,:),P_ia_RSH(:,:,:) + +write(*,*)'using on_site AO integrals' + +! Read AO integrals data + +allocate(AABB_integral(nao,nao)) +call two_elec_int(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) + + +write(*,*)'AO integrals read' + +call cpu_time(start_time) + +! reduce the mo range to match the configuration space +ino=minval(iconf(1:nci,1)) +nno=maxval(iconf(1:nci,1)) +inv=minval(iconf(1:nci,2)) ! start with no+1 +nnv=maxval(iconf(1:nci,2)) +write(*,*)'Q transition charges computed for occ.',ino,'to',nno +write(*,*)'and for unocc.',inv,'to',nnv + +allocate(Q_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno +Do j=inv,nnv +Do k=1,nao + Q_ia(i,j,k)=clow(k+(i-1)*nao)*clow(k+(j-1)*nao) +enddo +enddo +enddo +!$omp end do +!$omp end parallel + +allocate(P_ia(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +!RSH integrals long range + +allocate(AABB_integral(nao,nao)) + +call two_elec_int_RSH(ncent,nao,nao,AABB_integral,1,nbas,1,nbas) +allocate(P_ia_RSH(ino:nno,inv:nnv,nao)) + +!$omp parallel private(i,j) +!$omp do +Do i=ino, nno + Do j=inv,nnv + + call sgemv('T',nao,nao,1.0,AABB_integral,nao,Q_ia(i,j,:),1,0.0,P_ia_RSH(i,j,:),1) + + enddo +enddo +!$omp end do +!$omp end parallel + +deallocate(AABB_integral) + +write(*,*)"Intermediates computed" +call cpu_time(end_time) +print '("time = ",f12.2," minutes.")',(end_time-start_time)/60.0 + +ij=nci +ij=ij*(ij+1)/2 +allocate(bmat(ij), stat=ierr) +if(ierr.ne.0)stop 'allocation for bmat crashed' +ak=real(dak) +ax=real(dax) +! calculate 0.5*B +bmat=0.0e0 +fact=0.50d0 ! this is the scaling of the B-contribution +open(unit=52,file='bmat',form='unformatted',status='replace') +ij=0 +!$omp parallel private(ij,i,j,io,iv,jo,jv,iiv,iwrk,jjv,jwrk,ek,ej) +!$omp do + do i=1,nci + io=iconf(i,1) + iv=iconf(i,2) + iiv=iv-no + iwrk=(io-1)*nv + iiv + do j=1,i-1 + ij=lin(i,j) + jo=iconf(j,1) + jv=iconf(j,2) + + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(jo,jv,:),1) + bmat(ij)=(fact)*ak*ek + + ek=ax*sdot(nao,P_ia(io,jv,:),1,Q_ia(jo,iv,:),1)& + &+real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,jv,:),1,Q_ia(jo,iv,:),1) + bmat(ij)=bmat(ij)-fact*ek ! scaled by ax + enddo + ij=lin(i,i) + ek=sdot(nao,P_ia(io,iv,:),1,Q_ia(io,iv,:),1) + ek_RSH=real(RSH_beta,4)*sdot(nao,P_ia_RSH(io,iv,:),1,Q_ia(io,iv,:),1) + bmat(ij)=fact*(ak*ek-ax*ek-ek_RSH) ! diagonal element of 0.5*B + enddo +!$omp end do +!$omp end parallel +write(52)bmat +close(52) +deallocate(bmat,P_ia,Q_ia) +return + +end subroutine RSH_XSrtdacorr