From 39db434f63573a6ca484dabb1f2e83f13d8c3bec Mon Sep 17 00:00:00 2001 From: Manu Date: Thu, 2 Jul 2015 00:45:36 +0200 Subject: [PATCH 1/2] MRCC(PT2) converges --- plugins/MRCC/mrcc.irp.f | 2 +- plugins/MRCC/mrcc_dress.irp.f | 6 +- plugins/MRCC/mrcc_utils.irp.f | 94 +++++-- plugins/loc_cele/NEEDED_CHILDREN_MODULES | 1 + plugins/loc_cele/README.rst | 28 ++ plugins/loc_cele/loc.f | 163 +++++++++++ plugins/loc_cele/loc_cele.irp.f | 333 +++++++++++++++++++++++ plugins/loc_cele/tree_dependency.png | Bin 0 -> 48913 bytes src/Determinants/davidson.irp.f | 2 +- src/Determinants/occ_pattern.irp.f | 1 + src/Determinants/psi_cas.irp.f | 54 ++++ 11 files changed, 664 insertions(+), 20 deletions(-) create mode 100644 plugins/loc_cele/NEEDED_CHILDREN_MODULES create mode 100644 plugins/loc_cele/README.rst create mode 100644 plugins/loc_cele/loc.f create mode 100644 plugins/loc_cele/loc_cele.irp.f create mode 100644 plugins/loc_cele/tree_dependency.png diff --git a/plugins/MRCC/mrcc.irp.f b/plugins/MRCC/mrcc.irp.f index 2b879882..eaf3f6fa 100644 --- a/plugins/MRCC/mrcc.irp.f +++ b/plugins/MRCC/mrcc.irp.f @@ -48,7 +48,7 @@ subroutine run_mrcc E_new = 0.d0 delta_E = 1.d0 iteration = 0 - do while (delta_E > 1.d-8) + do while (delta_E > 1.d-10) iteration += 1 print *, '===========================' print *, 'MRCC Iteration', iteration diff --git a/plugins/MRCC/mrcc_dress.irp.f b/plugins/MRCC/mrcc_dress.irp.f index 083cea5a..23c15d13 100644 --- a/plugins/MRCC/mrcc_dress.irp.f +++ b/plugins/MRCC/mrcc_dress.irp.f @@ -138,7 +138,11 @@ subroutine mrcc_dress(delta_ij_,Ndet,i_generator,n_selected,det_buffer,Nint,ipro do i_state=1,N_states delta_ij_(idx_non_cas(k_sd),idx_cas(i_I),i_state) += dIa_hla(i_state,k_sd) delta_ij_(idx_cas(i_I),idx_non_cas(k_sd),i_state) += dIa_hla(i_state,k_sd) - delta_ij_(idx_cas(i_I),idx_cas(i_I),i_state) -= dIa_hla(i_state,k_sd) * ci_inv(i_state) * psi_non_cas_coef(k_sd,i_state) + if(dabs(psi_cas_coef(i_I,i_state)).ge.5.d-5)then + delta_ij_(idx_cas(i_I),idx_cas(i_I),i_state) -= dIa_hla(i_state,k_sd) * ci_inv(i_state) * psi_non_cas_coef(k_sd,i_state) + else + delta_ij_(idx_cas(i_I),idx_cas(i_I),i_state) = 0.d0 + endif enddo enddo call omp_unset_lock( psi_cas_lock(i_I) ) diff --git a/plugins/MRCC/mrcc_utils.irp.f b/plugins/MRCC/mrcc_utils.irp.f index 716d5ffc..476bd739 100644 --- a/plugins/MRCC/mrcc_utils.irp.f +++ b/plugins/MRCC/mrcc_utils.irp.f @@ -1,35 +1,78 @@ - -BEGIN_PROVIDER [ double precision, lambda_mrcc, (N_states,psi_det_size) ] + BEGIN_PROVIDER [ double precision, lambda_mrcc, (N_states,psi_det_size) ] &BEGIN_PROVIDER [ double precision, lambda_pert, (N_states,psi_det_size) ] implicit none BEGIN_DOC ! cm/ END_DOC integer :: i,k - double precision :: ihpsi(N_states), hij(N_states) + double precision :: ihpsi(N_states), hii +!integer :: icount +!integer :: icount_manu +!integer :: icount_gregoire +!icount = 0 +!icount_manu = 0 +!icount_gregoire = 0 + + + k = 1 + print*,'psi_cas_energy_diagonalized = ', psi_cas_energy_diagonalized(k) + nuclear_repulsion do i=1,N_det_non_cas + ! Questions : psi_cas_coef normalized or not ? call i_h_psi(psi_non_cas(1,1,i), psi_cas, psi_cas_coef, N_int, N_det_cas, & size(psi_cas_coef,1), n_states, ihpsi) - call i_h_j(psi_non_cas(1,1,i),psi_non_cas(1,1,i),N_int,hij) + call i_h_j(psi_non_cas(1,1,i),psi_non_cas(1,1,i),N_int,hii) do k=1,N_states - lambda_pert(k,i) = 1d0 / (CI_electronic_energy(k)-hij(k)) + + lambda_pert(k,i) = 0.d0 + lambda_mrcc(k,i) = 0.d0 + lambda_pert(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) lambda_mrcc(k,i) = psi_non_cas_coef(i,k)/ihpsi(k) - if ((lambda_mrcc(k,i)/lambda_pert(k,i))<0.d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>4.d0) then - lambda_mrcc(k,i) = lambda_pert(k,i) + lambda_mrcc(k,i) = lambda_pert(k,i) + cycle + if (dabs(psi_non_cas_coef(i,k)).le.1.d-6) then + cycle + else + lambda_pert(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) + lambda_mrcc(k,i) = psi_non_cas_coef(i,k)/ihpsi(k) + lambda_mrcc(k,i) = lambda_pert(k,i) + cycle +! icount = icount+1 + if (dabs(ihpsi(k)).le.1.d-6) then + lambda_pert(k,i) = 0.d0 + lambda_mrcc(k,i) = 0.d0 +! icount_manu = icount_manu+1 + cycle else - if ((lambda_mrcc(k,i)/lambda_pert(k,i))<0.1d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>=0d0) then - lambda_mrcc(k,i) = lambda_mrcc(k,i)*((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1d0)/2.d0) & - + lambda_pert(k,i)*(1.d0-((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1.d0)/2.d0)) - elseif ((lambda_mrcc(k,i)/lambda_pert(k,i))<=4.0d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>2.0d0) then - lambda_mrcc(k,i) = lambda_mrcc(k,i)*(1.d0-(cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/2.0d0+3.141592653589793d0)+1.d0)/2d0) & - + lambda_pert(k,i)*((cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/2.0d0+3.141592653589793d0)+1.d0)/2.d0) - else - lambda_mrcc(k,i) = lambda_mrcc(k,i) - endif - endif + if ((lambda_mrcc(k,i)*lambda_pert(k,i))<0.d0)then + lambda_mrcc(k,i) = lambda_pert(k,i) + else if ((lambda_mrcc(k,i)/lambda_pert(k,i))>1.2d0) then + lambda_mrcc(k,i) = lambda_pert(k,i) +! icount_gregoire = icount_gregoire + 1 + else + if ((lambda_mrcc(k,i)/lambda_pert(k,i))<0.1d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>=0d0) then + lambda_mrcc(k,i) = lambda_mrcc(k,i)*((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1d0)/2.d0) & + + lambda_pert(k,i)*(1.d0-((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1.d0)/2.d0)) + elseif ((lambda_mrcc(k,i)/lambda_pert(k,i))<=1.2d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>1.0d0) then + lambda_mrcc(k,i) = lambda_mrcc(k,i)*(1.d0-(cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/0.2d0+3.141592653589793d0)+1.d0)/2d0) & + + lambda_pert(k,i)*((cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/0.2d0+3.141592653589793d0)+1.d0)/2.d0) +! icount_gregoire = icount_gregoire + 1 + endif + endif + endif + endif enddo enddo +!print *, 'icount, icount_manu, icount_gregoire' +!print *, icount, icount_manu, icount_gregoire + + +!do i=1,N_det_non_cas +! write(33,*) float(lambda_mrcc(1,i)), float(lambda_pert(1,i)) +!enddo +!write(33,*) '' +!write(33,*) '' + END_PROVIDER @@ -71,6 +114,23 @@ BEGIN_PROVIDER [ double precision, delta_ij, (N_det,N_det,N_states) ] enddo enddo endif + do i = 1, N_det + do j = 1, N_det + do m = 1, N_states + if(isnan(delta_ij(j,i,m)))then + delta_ij(j,i,m) = 0.d0 + endif + enddo + enddo + enddo + +!integer :: i_I +!do i_I = 1, N_det_cas +! print*,'' +! print*,'i_I = ',i_I +! print*,'psi_coef_cas = ',psi_coef(idx_cas(i_I), 1) +! print*,'delta_ij ',delta_ij(idx_cas(i_I),idx_cas(i_I),1) +!enddo END_PROVIDER BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det) ] diff --git a/plugins/loc_cele/NEEDED_CHILDREN_MODULES b/plugins/loc_cele/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..a23aa5ae --- /dev/null +++ b/plugins/loc_cele/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +AO_Basis Electrons Ezfio_files MO_Basis Nuclei Utils diff --git a/plugins/loc_cele/README.rst b/plugins/loc_cele/README.rst new file mode 100644 index 00000000..431dae8a --- /dev/null +++ b/plugins/loc_cele/README.rst @@ -0,0 +1,28 @@ +=============== +loc_cele Module +=============== + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +`loc_rasorb `_ + Undocumented + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `AO_Basis `_ +* `Electrons `_ +* `Ezfio_files `_ +* `MO_Basis `_ +* `Nuclei `_ +* `Utils `_ + diff --git a/plugins/loc_cele/loc.f b/plugins/loc_cele/loc.f new file mode 100644 index 00000000..e2439b7f --- /dev/null +++ b/plugins/loc_cele/loc.f @@ -0,0 +1,163 @@ +c************************************************************************ + subroutine maxovl(n,m,s,t,w) +C +C This subprogram contains an iterative procedure to find the +C unitary transformation of a set of n vectors which maximizes +C the sum of their square overlaps with a set of m reference +C vectors (m.le.n) +C +C S: overlap matrix +C T: rotation matrix +C W: new overlap matrix +C +C + implicit real*8(a-h,o-y),logical*1(z) + parameter (id1=300) + dimension s(id1,id1),t(id1,id1),w(id1,id1) + data small/1.d-6/ + + zprt=.true. + niter=100 + conv=1.d-8 + + write (6,5) n,m,conv + 5 format (//5x,'Unitary transformation of',i3,' vectors'/ + * 5x,'following the principle of maximum overlap with a set of', + * i3,' reference vectors'/5x,'required convergence on rotation ', + * 'angle =',f13.10///5x,'Starting overlap matrix'/) + do 6 i=1,m + write (6,145) i + 6 write (6,150) (s(i,j),j=1,n) + 8 mm=m-1 + if (m.lt.n) mm=m + iter=0 + do 20 j=1,n + do 16 i=1,n + t(i,j)=0.d0 + 16 continue + do 18 i=1,m + 18 w(i,j)=s(i,j) + 20 t(j,j)=1.d0 + sum=0.d0 + do 10 i=1,m + sum=sum+s(i,i)*s(i,i) + 10 continue + sum=sum/m + if (zprt) write (6,12) sum + 12 format (//5x,'Average square overlap =',f10.6) + if (n.eq.1) goto 100 + last=n + j=1 + 21 if (j.ge.last) goto 30 + sum=0.d0 + + do 22 i=1,n + 22 sum=sum+s(i,j)*s(i,j) + if (sum.gt.small) goto 28 + do 24 i=1,n + sij=s(i,j) + s(i,j)=-s(i,last) + s(i,last)=sij + tij=t(i,j) + t(i,j)=-t(i,last) + t(i,last)=tij + 24 continue + last=last-1 + goto 21 + 28 j=j+1 + goto 21 + 30 iter=iter+1 + imax=0 + jmax=0 + dmax=0.d0 + amax=0.d0 + do 60 i=1,mm + ip=i+1 + do 50 j=ip,n + a=s(i,j)*s(i,j)-s(i,i)*s(i,i) + b=-s(i,i)*s(i,j) + if (j.gt.m) goto 31 + a=a+s(j,i)*s(j,i)-s(j,j)*s(j,j) + b=b+s(j,i)*s(j,j) + 31 b=b+b + if (a.eq.0.d0) goto 32 + ba=b/a + if (dabs(ba).gt.small) goto 32 + if (a.gt.0.d0) goto 33 + tang=-0.5d0*ba + cosine=1.d0/dsqrt(1.d0+tang*tang) + sine=tang*cosine + goto 34 + 32 tang=0.d0 + if (b.ne.0.d0) tang=(a+dsqrt(a*a+b*b))/b + cosine=1.d0/dsqrt(1.d0+tang*tang) + sine=tang*cosine + goto 34 + 33 cosine=0.d0 + sine=1.d0 + 34 delta=sine*(a*sine+b*cosine) + if (zprt.and.delta.lt.0.d0) write (6,71) i,j,a,b,sine,cosine,delta + do 35 k=1,m + p=s(k,i)*cosine-s(k,j)*sine + q=s(k,i)*sine+s(k,j)*cosine + s(k,i)=p + 35 s(k,j)=q + do 40 k=1,n + p=t(k,i)*cosine-t(k,j)*sine + q=t(k,i)*sine+t(k,j)*cosine + t(k,i)=p + t(k,j)=q + 40 continue + 45 d=dabs(sine) + if (d.le.amax) goto 50 + imax=i + jmax=j + amax=d + dmax=delta + 50 continue + 60 continue + if (zprt) write (6,70) iter,amax,imax,jmax,dmax + 70 format (' iter=',i4,' largest rotation=',f12.8, + * ', vectors',i3,' and',i3,', incr. of diag. squares=',g12.5) + 71 format (' i,j,a,b,sin,cos,delta =',2i3,5f10.5) + if (amax.lt.conv) goto 100 + if (iter.lt.niter) goto 30 + write (6,80) + write (6,*) 'niter=',niter + 80 format (//5x,'*** maximum number of cycles exceeded ', + * 'in subroutine maxovl ***'//) + stop + 100 continue + do 120 j=1,n + if (s(j,j).gt.0.d0) goto 120 + do 105 i=1,m + 105 s(i,j)=-s(i,j) + do 110 i=1,n + 110 t(i,j)=-t(i,j) + 120 continue + sum=0.d0 + do 125 i=1,m + 125 sum=sum+s(i,i)*s(i,i) + sum=sum/m + do 122 i=1,m + do 122 j=1,n + sw=s(i,j) + s(i,j)=w(i,j) + 122 w(i,j)=sw + if (.not.zprt) return + write (6,12) sum + write (6,130) + 130 format (//5x,'transformation matrix') + do 140 i=1,n + write (6,145) i + 140 write (6,150) (t(i,j),j=1,n) + 145 format (i8) + 150 format (2x,10f12.8) + write (6,160) + 160 format (//5x,'new overlap matrix'/) + do 170 i=1,m + write (6,145) i + 170 write (6,150) (w(i,j),j=1,n) + return + end + diff --git a/plugins/loc_cele/loc_cele.irp.f b/plugins/loc_cele/loc_cele.irp.f new file mode 100644 index 00000000..5b9112ca --- /dev/null +++ b/plugins/loc_cele/loc_cele.irp.f @@ -0,0 +1,333 @@ + program loc_rasorb + + implicit none + +! + +! This program performs a localization of the active orbitals + +! of a CASSCF wavefunction, reading the orbitals from a RASORB + +! file of molcas. + +! + +! id1=max number of MO in a given symmetry. + +! + + + + + + + + integer id1 + + parameter (id1=300) + + + + character*1 jobz,uplo + + character*64 file1,file2 + + character*72 string(id1,8),cdum + + double precision :: cmo(id1,id1,1),cmoref(id1,id1,1),newcmo(id1,id1,1) + + double precision ::s(id1,id1,1),dum,ddum(id1,id1),ovl(id1,id1) + + double precision :: w(id1),work(3*id1),t(id1,id1),wi(id1,id1) + + integer n,i,j,k,l,nmo(8),isym,nsym,idum,nrot(8),irot(id1,8) + + integer ipiv(id1),info,lwork + + logical *1 z54 + print*,'passed the first copy' + + z54=.false. + + + + !Read the name of the RasOrb file + + + print*,'Entering in the loc program' + +! read(5,*) z54 + print*,'before = ' + accu_norm = 0.d0 + do i =1,mo_tot_num + accu_norm += dabs(mo_overlap(i,i)) + enddo + print*,'accu_norm = ',accu_norm + + nsym = 1 + + nmo(1) = mo_tot_num + + print*,'nmo(1) = ',nmo(1) + + cmo = 0.d0 + do isym=1,nsym + + do i=1,nmo(isym) + + do j = 1, ao_num + + cmo(j,i,isym) = mo_coef(j,i) + + enddo + + enddo + + enddo + print*,'passed the first copy' + + + + do isym=1,nsym + + do j=1,mo_tot_num + + do i=1,ao_num + + newcmo(i,j,isym)=cmo(i,j,isym) + + enddo + + enddo + + enddo + print*,'passed the copy' + + + + nrot(1) = 6 ! number of orbitals to be localized + + + integer :: index_rot(1000,1) + + + cmoref = 0.d0 + + ! Definition of the index of the MO to be rotated + irot(1,1) = 20 ! the first mo to be rotated is the 19 th MO + irot(2,1) = 21 ! the first mo to be rotated is the 20 th MO + irot(3,1) = 22 ! etc.... + irot(4,1) = 23 ! + irot(5,1) = 24 ! + irot(6,1) = 25 ! + + ! you define the guess vectors that you want + ! the new MO to be close to + ! cmore(i,j,1) = < AO_i | guess_vector_MO(j) > + ! i goes from 1 to ao_num + ! j goes from 1 to nrot(1) + + ! Here you must go to the GAMESS output file + ! where the AOs are listed and explicited + ! From the basis of this knowledge you can build your + ! own guess vectors for the MOs + ! The new MOs are provided in output + ! in the same order than the guess MOs + cmoref(3,1,1) = 1.d0 ! + cmoref(12,1,1) = 1.d0 ! + + cmoref(21,2,1) = 1.d0 ! + cmoref(30,2,1) = 1.d0 ! + + cmoref(39,3,1) = 1.d0 ! + cmoref(48,3,1) = 1.d0 ! + + cmoref(3,4,1) = 1.d0 ! + cmoref(12,4,1) =-1.d0 ! + + cmoref(21,5,1) = 1.d0 ! + cmoref(30,5,1) =-1.d0 ! + + cmoref(39,6,1) = 1.d0 ! + cmoref(48,6,1) =-1.d0 ! + + + + + print*,'passed the definition of the referent vectors ' + !Building the S (overlap) matrix in the AO basis. + + + + do isym=1,nsym + + if (nrot(isym).eq.0) cycle + + do i=1,ao_num + + s(i,i,isym)=1.d0 + + do j=1,ao_num + + if (i.ne.j) s(i,j,isym)=0.d0 + + ddum(i,j)=0.d0 + + do k=1,nmo(isym) + + ddum(i,j)=ddum(i,j)+cmo(i,k,isym)*cmo(j,k,isym) + + enddo + + enddo + + enddo + + call dgesv(ao_num,ao_num,ddum,id1,ipiv,s(1,1,isym),id1,info) + + if (info.ne.0) then + + write (6,*) 'Something wrong in dgsev',isym + + stop + + endif + + + + enddo + + + + + + !Now big loop over symmetry + + + + do isym=1,nsym + + if (nrot(isym).eq.0) cycle + + + + write (6,*) + + write (6,*) + + write (6,*) + + write (6,*) 'WORKING ON SYMMETRY',isym + + write (6,*) + + + + + + !Compute the overlap matrix + + + + + +! do i=1,nmo(isym) + do i=1,ao_num + + do j=1,nrot(isym) + + ddum(i,j)=0.d0 + + do k=1,ao_num + + ddum(i,j)=ddum(i,j)+s(i,k,isym)*cmo(k,irot(j,isym),isym) + + enddo + + enddo + + enddo + + + + do i=1,nrot(isym) + + do j=1,nrot(isym) + + ovl(i,j)=0.d0 + + do k=1,ao_num +! do k=1,mo_tot_num + + ovl(i,j)=ovl(i,j)+cmoref(k,i,isym)*ddum(k,j) + + enddo + + enddo + + enddo + + + + call maxovl(nrot(isym),nrot(isym),ovl,t,wi) + + + + do i=1,nrot(isym) + do j=1,ao_num + write (6,*) 'isym,',isym,nrot(isym),nmo(isym) + newcmo(j,irot(i,isym),isym)=0.d0 + do k=1,nrot(isym) + newcmo(j,irot(i,isym),isym)=newcmo(j,irot(i,isym),isym) + cmo(j,irot(k,isym),isym)*t(k,i) + enddo + enddo + enddo +! if(dabs(newcmo(3,19,1) - mo_coef(3,19)) .gt.1.d-10 )then +! print*,'Something wrong bitch !!' +! print*,'newcmo(3,19,1) = ',newcmo(3,19,1) +! print*,'mo_coef(3,19) = ',mo_coef(3,19) +! stop +! endif + + + + enddo !big loop over symmetry + + 10 format (4E18.12) + + +! Now we copyt the newcmo into the mo_coef + + mo_coef = 0.d0 + do isym=1,nsym + do i=1,nmo(isym) + do j = 1, ao_num + mo_coef(j,i) = newcmo(j,i,isym) + enddo + enddo + enddo +! if(dabs(newcmo(3,19,1) - mo_coef(3,19)) .gt.1.d-10 )then + print*,'mo_coef(3,19)',mo_coef(3,19) + pause + + +! we say that it hase been touched, and valid and that everything that +! depends on mo_coef must not be reprovided + double precision :: accu_norm + touch mo_coef + print*,'after = ' + accu_norm = 0.d0 + do i =1,mo_tot_num + accu_norm += dabs(mo_overlap(i,i)) + enddo + print*,'accu_norm = ',accu_norm +! We call the routine that saves mo_coef in the ezfio format + call save_mos + + + + + + stop + + end diff --git a/plugins/loc_cele/tree_dependency.png b/plugins/loc_cele/tree_dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..244d9db0fba0ade3de45acd50a33b4bbb740d614 GIT binary patch literal 48913 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 CLo2l>>rVW54qga*lUZ{f@qjH{eRkJ3 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 literal 0 HcmV?d00001 diff --git a/src/Determinants/davidson.irp.f b/src/Determinants/davidson.irp.f index bdc979c4..e59fde4f 100644 --- a/src/Determinants/davidson.irp.f +++ b/src/Determinants/davidson.irp.f @@ -376,7 +376,7 @@ end ! Can be : [ energy | residual | both | wall_time | cpu_time | iterations ] END_DOC davidson_criterion = 'residual' - davidson_threshold = 1.d-6 + davidson_threshold = 1.d-9 END_PROVIDER subroutine davidson_converged(energy,residual,wall,iterations,cpu,N_st,converged) diff --git a/src/Determinants/occ_pattern.irp.f b/src/Determinants/occ_pattern.irp.f index a0fd4a3c..8027cf60 100644 --- a/src/Determinants/occ_pattern.irp.f +++ b/src/Determinants/occ_pattern.irp.f @@ -256,6 +256,7 @@ subroutine make_s2_eigenfunction integer :: N_det_new integer, parameter :: bufsze = 1000 logical, external :: is_in_wavefunction + return ! !TODO DEBUG ! do i=1,N_det diff --git a/src/Determinants/psi_cas.irp.f b/src/Determinants/psi_cas.irp.f index 8ca081d6..304a2370 100644 --- a/src/Determinants/psi_cas.irp.f +++ b/src/Determinants/psi_cas.irp.f @@ -13,6 +13,9 @@ use bitmasks logical :: good N_det_cas = 0 do i=1,N_det + do l = 1, N_states + psi_cas_coef(i,l) = 0.d0 + enddo do l=1,n_cas_bitmask good = .True. do k=1,N_int @@ -109,6 +112,57 @@ END_PROVIDER END_PROVIDER +BEGIN_PROVIDER [double precision, H_matrix_cas, (N_det_cas,N_det_cas)] + implicit none + integer :: i,j + double precision :: hij + do i = 1, N_det_cas + do j = 1, N_det_cas + call i_H_j(psi_cas(1,1,i),psi_cas(1,1,j),N_int,hij) + H_matrix_cas(i,j) = hij + enddo + enddo +END_PROVIDER + + BEGIN_PROVIDER [double precision, psi_coef_cas_diagonalized, (N_det_cas,N_states)] +&BEGIN_PROVIDER [double precision, psi_cas_energy_diagonalized, (N_states)] + implicit none + integer :: i,j + double precision, allocatable :: eigenvectors(:,:), eigenvalues(:) + allocate (eigenvectors(size(H_matrix_cas,1),N_det_cas)) + allocate (eigenvalues(N_det_cas)) + call lapack_diag(eigenvalues,eigenvectors, & + H_matrix_cas,size(H_matrix_cas,1),N_det_cas) + do i = 1, N_states + psi_cas_energy_diagonalized(i) = eigenvalues(i) + do j = 1, N_det_cas + psi_coef_cas_diagonalized(j,i) = eigenvectors(j,i) + enddo + enddo + + + END_PROVIDER + + BEGIN_PROVIDER [double precision, psi_cas_energy, (N_states)] + implicit none + integer :: i,j,k + double precision :: hij,norm,u_dot_v + psi_cas_energy = 0.d0 + + + do k = 1, N_states + norm = 0.d0 + do i = 1, N_det_cas + norm += psi_cas_coef(i,k) * psi_cas_coef(i,k) + do j = 1, N_det_cas + psi_cas_energy(k) += psi_cas_coef(i,k) * psi_cas_coef(j,k) * H_matrix_cas(i,j) + enddo + enddo + psi_cas_energy(k) = psi_cas_energy(k) /norm + enddo + +END_PROVIDER + From 517c1a14ac8b6d80df5cf07ea20b85c9407b3532 Mon Sep 17 00:00:00 2001 From: Manu Date: Fri, 3 Jul 2015 11:49:07 +0200 Subject: [PATCH 2/2] MRCC(Var) converges --- plugins/MRCC/davidson.irp.f | 13 +++---- plugins/MRCC/mrcc_utils.irp.f | 67 +++-------------------------------- 2 files changed, 12 insertions(+), 68 deletions(-) diff --git a/plugins/MRCC/davidson.irp.f b/plugins/MRCC/davidson.irp.f index 52f03ff3..57900082 100644 --- a/plugins/MRCC/davidson.irp.f +++ b/plugins/MRCC/davidson.irp.f @@ -389,16 +389,17 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,Nint,istate) Vt = 0.d0 !$OMP DO SCHEDULE(guided) do i=1,n - idx(0) = i - call filter_connected_davidson(keys_tmp,keys_tmp(1,1,i),Nint,i-1,idx) - do jj=1,idx(0) - j = idx(jj) - if ( (dabs(u_0(j)) > 1.d-7).or.((dabs(u_0(i)) > 1.d-7)) ) then +! idx(0) = i +! call filter_connected_davidson(keys_tmp,keys_tmp(1,1,i),Nint,i-1,idx) +! do jj=1,idx(0) +! j = idx(jj) +! if ( (dabs(u_0(j)) > 1.d-7).or.((dabs(u_0(i)) > 1.d-7)) ) then + do j = 1, i-1 call i_H_j(keys_tmp(1,1,j),keys_tmp(1,1,i),Nint,hij) hij = hij + delta_ij(j,i,istate) vt (i) = vt (i) + hij*u_0(j) vt (j) = vt (j) + hij*u_0(i) - endif +! endif enddo enddo !$OMP END DO diff --git a/plugins/MRCC/mrcc_utils.irp.f b/plugins/MRCC/mrcc_utils.irp.f index 476bd739..b175d655 100644 --- a/plugins/MRCC/mrcc_utils.irp.f +++ b/plugins/MRCC/mrcc_utils.irp.f @@ -2,76 +2,26 @@ &BEGIN_PROVIDER [ double precision, lambda_pert, (N_states,psi_det_size) ] implicit none BEGIN_DOC - ! cm/ + ! cm/ or perturbative 1/Delta_E(m) END_DOC integer :: i,k double precision :: ihpsi(N_states), hii -!integer :: icount -!integer :: icount_manu -!integer :: icount_gregoire - -!icount = 0 -!icount_manu = 0 -!icount_gregoire = 0 - - k = 1 - print*,'psi_cas_energy_diagonalized = ', psi_cas_energy_diagonalized(k) + nuclear_repulsion do i=1,N_det_non_cas - ! Questions : psi_cas_coef normalized or not ? call i_h_psi(psi_non_cas(1,1,i), psi_cas, psi_cas_coef, N_int, N_det_cas, & size(psi_cas_coef,1), n_states, ihpsi) call i_h_j(psi_non_cas(1,1,i),psi_non_cas(1,1,i),N_int,hii) do k=1,N_states - lambda_pert(k,i) = 0.d0 - lambda_mrcc(k,i) = 0.d0 lambda_pert(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) lambda_mrcc(k,i) = psi_non_cas_coef(i,k)/ihpsi(k) - lambda_mrcc(k,i) = lambda_pert(k,i) - cycle - if (dabs(psi_non_cas_coef(i,k)).le.1.d-6) then - cycle - else - lambda_pert(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) - lambda_mrcc(k,i) = psi_non_cas_coef(i,k)/ihpsi(k) - lambda_mrcc(k,i) = lambda_pert(k,i) - cycle -! icount = icount+1 - if (dabs(ihpsi(k)).le.1.d-6) then - lambda_pert(k,i) = 0.d0 - lambda_mrcc(k,i) = 0.d0 -! icount_manu = icount_manu+1 - cycle - else - if ((lambda_mrcc(k,i)*lambda_pert(k,i))<0.d0)then - lambda_mrcc(k,i) = lambda_pert(k,i) - else if ((lambda_mrcc(k,i)/lambda_pert(k,i))>1.2d0) then - lambda_mrcc(k,i) = lambda_pert(k,i) -! icount_gregoire = icount_gregoire + 1 - else - if ((lambda_mrcc(k,i)/lambda_pert(k,i))<0.1d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>=0d0) then - lambda_mrcc(k,i) = lambda_mrcc(k,i)*((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1d0)/2.d0) & - + lambda_pert(k,i)*(1.d0-((cos((lambda_mrcc(k,i)/lambda_pert(k,i))*3.141592653589793d0/0.1d0+3.141592653589793d0)+1.d0)/2.d0)) - elseif ((lambda_mrcc(k,i)/lambda_pert(k,i))<=1.2d0 .or. (lambda_mrcc(k,i)/lambda_pert(k,i))>1.0d0) then - lambda_mrcc(k,i) = lambda_mrcc(k,i)*(1.d0-(cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/0.2d0+3.141592653589793d0)+1.d0)/2d0) & - + lambda_pert(k,i)*((cos(abs(2.d0-(lambda_mrcc(k,i)/lambda_pert(k,i)))*3.141592653589793d0/0.2d0+3.141592653589793d0)+1.d0)/2.d0) -! icount_gregoire = icount_gregoire + 1 - endif - endif - endif + if (dabs(ihpsi(k)).le.1.d-3) then + lambda_mrcc(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) + icount_manu = icount_manu+1 + cycle endif enddo enddo -!print *, 'icount, icount_manu, icount_gregoire' -!print *, icount, icount_manu, icount_gregoire - - -!do i=1,N_det_non_cas -! write(33,*) float(lambda_mrcc(1,i)), float(lambda_pert(1,i)) -!enddo -!write(33,*) '' -!write(33,*) '' END_PROVIDER @@ -124,13 +74,6 @@ BEGIN_PROVIDER [ double precision, delta_ij, (N_det,N_det,N_states) ] enddo enddo -!integer :: i_I -!do i_I = 1, N_det_cas -! print*,'' -! print*,'i_I = ',i_I -! print*,'psi_coef_cas = ',psi_coef(idx_cas(i_I), 1) -! print*,'delta_ij ',delta_ij(idx_cas(i_I),idx_cas(i_I),1) -!enddo END_PROVIDER BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det) ]