From 13abddef2d95041d2f33a34d1318a5a6670d55bb Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 31 Aug 2020 23:04:34 +0200 Subject: [PATCH] Orthogonalized PT2 --- src/cipsi/energy.irp.f | 8 ++++++++ src/cipsi/pt2_stoch_routines.irp.f | 6 ++++++ src/cipsi/selection.irp.f | 10 +++++----- src/cipsi/zmq_selection.irp.f | 2 ++ src/scf_utils/roothaan_hall_scf.irp.f | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/cipsi/energy.irp.f b/src/cipsi/energy.irp.f index 37b29593..1d8c6bf5 100644 --- a/src/cipsi/energy.irp.f +++ b/src/cipsi/energy.irp.f @@ -37,3 +37,11 @@ BEGIN_PROVIDER [ double precision, pt2_E0_denominator, (N_states) ] END_PROVIDER +BEGIN_PROVIDER [ double precision, pt2_overlap, (N_states, N_states) ] + implicit none + BEGIN_DOC + ! Overlap between the perturbed wave functions + END_DOC + pt2_overlap(1:N_states,1:N_states) = 0.d0 +END_PROVIDER + diff --git a/src/cipsi/pt2_stoch_routines.irp.f b/src/cipsi/pt2_stoch_routines.irp.f index a10cfebd..f268430f 100644 --- a/src/cipsi/pt2_stoch_routines.irp.f +++ b/src/cipsi/pt2_stoch_routines.irp.f @@ -314,6 +314,12 @@ subroutine ZMQ_pt2(E, pt2_data, pt2_data_err, relative_error, N_in) print '(A)', '========== ================= =========== =============== =============== =================' + pt2_overlap(:,pt2_stoch_istate) = pt2_data % overlap(:,pt2_stoch_istate) +print *, 'Overlap' +print *, pt2_overlap(:,pt2_stoch_istate) +print *, '-------' + SOFT_TOUCH pt2_overlap + enddo FREE pt2_stoch_istate diff --git a/src/cipsi/selection.irp.f b/src/cipsi/selection.irp.f index e315a852..6813b5a1 100644 --- a/src/cipsi/selection.irp.f +++ b/src/cipsi/selection.irp.f @@ -787,11 +787,11 @@ subroutine fill_buffer_double(i_generator, sp, h1, h2, bannedOrb, banned, fock_d enddo ! Gram-Schmidt using input overlap matrix -! do istate=1,N_states -! do jstate=1,istate-1 -! coef(istate) = coef(istate) - pt2_overlap(jstate,istate)/(pt2_overlap(jstate,jstate)) * coef(jstate) -! enddo -! enddo + do istate=1,N_states + do jstate=1,istate-1 + coef(istate) = coef(istate) - pt2_overlap(istate,jstate)/(1.d0+pt2_overlap(jstate,jstate)) * coef(jstate) + enddo + enddo do istate=1,N_states alpha_h_psi = mat(istate, p1, p2) diff --git a/src/cipsi/zmq_selection.irp.f b/src/cipsi/zmq_selection.irp.f index e94fd422..9ce345cf 100644 --- a/src/cipsi/zmq_selection.irp.f +++ b/src/cipsi/zmq_selection.irp.f @@ -140,6 +140,8 @@ subroutine ZMQ_selection(N_in, pt2_data) pt2_data % pt2(k)/(1.d0 + pt2_data % overlap(k,k)) enddo + pt2_overlap(:,:) = pt2_data % overlap(:,:) + SOFT_TOUCH pt2_overlap call update_pt2_and_variance_weights(pt2_data, N_states) end subroutine diff --git a/src/scf_utils/roothaan_hall_scf.irp.f b/src/scf_utils/roothaan_hall_scf.irp.f index 17458d9a..2b231c2b 100644 --- a/src/scf_utils/roothaan_hall_scf.irp.f +++ b/src/scf_utils/roothaan_hall_scf.irp.f @@ -186,10 +186,10 @@ END_DOC implicit none + integer,intent(inout) :: dim_DIIS double precision,intent(in) :: Fock_matrix_DIIS(ao_num,ao_num,dim_DIIS),error_matrix_DIIS(ao_num,ao_num,dim_DIIS) integer,intent(in) :: iteration_SCF, size_Fock_matrix_AO double precision,intent(inout):: Fock_matrix_AO_(size_Fock_matrix_AO,ao_num) - integer,intent(inout) :: dim_DIIS double precision,allocatable :: B_matrix_DIIS(:,:),X_vector_DIIS(:) double precision,allocatable :: C_vector_DIIS(:)