From f2fdcb379d648bd85203ca6f03cd5a32770a0888 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 20 Nov 2016 22:55:10 +0100 Subject: [PATCH] Single state diagonalization in MRCC --- plugins/MRCC_Utils/mrcc_utils.irp.f | 12 +++++------- plugins/mrcepa0/mrcepa0_general.irp.f | 12 ++++++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/plugins/MRCC_Utils/mrcc_utils.irp.f b/plugins/MRCC_Utils/mrcc_utils.irp.f index ea13f8cc..b3b2f427 100644 --- a/plugins/MRCC_Utils/mrcc_utils.irp.f +++ b/plugins/MRCC_Utils/mrcc_utils.irp.f @@ -150,17 +150,15 @@ END_PROVIDER allocate (eigenvectors(size(CI_eigenvectors_dressed,1),size(CI_eigenvectors_dressed,2)), & eigenvalues(size(CI_electronic_energy_dressed,1))) do mrcc_state=1,N_states - do j=1,min(N_states,N_det) - do i=1,N_det - eigenvectors(i,j) = psi_coef(i,j) - enddo + do i=1,N_det + eigenvectors(i,1) = psi_coef(i,mrcc_state) enddo call davidson_diag_mrcc_HS2(psi_det,eigenvectors,& size(eigenvectors,1), & - eigenvalues,N_det,N_states,N_states_diag,N_int, & + eigenvalues,N_det,1,N_states_diag,N_int, & output_determinants,mrcc_state) - CI_eigenvectors_dressed(1:N_det,mrcc_state) = eigenvectors(1:N_det,mrcc_state) - CI_electronic_energy_dressed(mrcc_state) = eigenvalues(mrcc_state) + CI_eigenvectors_dressed(1:N_det,mrcc_state) = eigenvectors(1:N_det,1) + CI_electronic_energy_dressed(mrcc_state) = eigenvalues(1) if (mrcc_state == 1) then do k=N_states+1,N_states_diag CI_eigenvectors_dressed(1:N_det,k) = eigenvectors(1:N_det,k) diff --git a/plugins/mrcepa0/mrcepa0_general.irp.f b/plugins/mrcepa0/mrcepa0_general.irp.f index 09c35e52..1e89cc2c 100644 --- a/plugins/mrcepa0/mrcepa0_general.irp.f +++ b/plugins/mrcepa0/mrcepa0_general.irp.f @@ -41,11 +41,15 @@ subroutine run(N_st,energy) print *, 'MRCEPA0 Iteration', iteration print *, '===========================' print *, '' - E_old = sum(ci_energy_dressed) - call write_double(6,ci_energy_dressed(1),"MRCEPA0 energy") + E_old = sum(ci_energy_dressed(1:N_states)) + do i=1,N_st + call write_double(6,ci_energy_dressed(i),"MRCEPA0 energy") + enddo call diagonalize_ci_dressed(lambda) - E_new = sum(ci_energy_dressed) - delta_E = dabs(E_new - E_old) + E_new = sum(ci_energy_dressed(1:N_states)) + delta_E = (E_new - E_old)/dble(N_states) + call write_double(6,delta_E,"delta_E") + delta_E = dabs(delta_E) call save_wavefunction call ezfio_set_mrcepa0_energy(ci_energy_dressed(1)) if (iteration >= n_it_mrcc_max) then