From db10fcceeb5dcce0e60d40033cfd687c1463d2c7 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 28 Sep 2018 19:21:55 +0200 Subject: [PATCH] Working on fix for MRCC but maybe broke ShiftedBk. --- plugins/DavidsonDressed/diagonalize_CI.irp.f | 27 ++++++-- plugins/dress_zmq/dressing_vector.irp.f | 3 +- plugins/mrcepa0/dressing.irp.f | 1 + plugins/mrcepa0/dressing_vector.irp.f | 64 +++++++++++++++---- .../diagonalization_hs2_dressed.irp.f | 2 +- 5 files changed, 77 insertions(+), 20 deletions(-) diff --git a/plugins/DavidsonDressed/diagonalize_CI.irp.f b/plugins/DavidsonDressed/diagonalize_CI.irp.f index 9940ee86..e01dddb3 100644 --- a/plugins/DavidsonDressed/diagonalize_CI.irp.f +++ b/plugins/DavidsonDressed/diagonalize_CI.irp.f @@ -175,14 +175,29 @@ BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det) ] integer :: i, j, k h_matrix_dressed(1:N_det,1:N_det) = h_matrix_all_dets(1:N_det,1:N_det) + +! do k=1,N_states +! do j=1,N_det +! do i=1,N_det +! h_matrix_dressed(i,j) = h_matrix_dressed(i,j) + & +! 0.5d0 * (dressing_column_h(i,k) * psi_coef(j,k) + & +! dressing_column_h(j,k) * psi_coef(i,k)) +! enddo +! enddo +! enddo + + integer :: l,jj + double precision :: f do k=1,N_states - do j=1,N_det - do i=1,N_det - h_matrix_dressed(i,j) = h_matrix_dressed(i,j) + & - 0.5d0 * (dressing_column_h(i,k) * psi_coef(j,k) + & - dressing_column_h(j,k) * psi_coef(i,k)) - enddo + l = dressed_column_idx(k) + f = 1.d0/psi_coef(l,k) + do i=1,N_det + if (i==l) cycle + h_matrix_dressed(i,l) = h_matrix_dressed(i,l) + dressing_column_h(i,k) *f + h_matrix_dressed(l,i) = h_matrix_dressed(l,i) + dressing_column_h(i,k) *f + h_matrix_dressed(l,l) = h_matrix_dressed(l,l) - psi_coef(i,k) * dressing_column_h(i,k) *f*f enddo + enddo END_PROVIDER diff --git a/plugins/dress_zmq/dressing_vector.irp.f b/plugins/dress_zmq/dressing_vector.irp.f index a7251dd9..944b9c2b 100644 --- a/plugins/dress_zmq/dressing_vector.irp.f +++ b/plugins/dress_zmq/dressing_vector.irp.f @@ -1,4 +1,3 @@ - BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ] &BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ] implicit none @@ -22,3 +21,5 @@ enddo END_PROVIDER + + diff --git a/plugins/mrcepa0/dressing.irp.f b/plugins/mrcepa0/dressing.irp.f index 3d2a7d62..1926ca4b 100644 --- a/plugins/mrcepa0/dressing.irp.f +++ b/plugins/mrcepa0/dressing.irp.f @@ -483,6 +483,7 @@ END_PROVIDER threshold_selectors = 1.d0 threshold_generators = 1d0 target_error = thresh_dressed_ci * 5.d-2 +target_error = 0.d0 call ZMQ_mrcc(E_CI_before, mrcc, delta_ij_mrcc_zmq, delta_ij_s2_mrcc_zmq, abs(target_error)) mrcc_previous_E(:) = mrcc_E0_denominator(:) diff --git a/plugins/mrcepa0/dressing_vector.irp.f b/plugins/mrcepa0/dressing_vector.irp.f index c3d8287d..2f2a535c 100644 --- a/plugins/mrcepa0/dressing_vector.irp.f +++ b/plugins/mrcepa0/dressing_vector.irp.f @@ -1,30 +1,70 @@ - BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ] &BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ] implicit none BEGIN_DOC - ! Null dressing vectors + ! \Delta_{state-specific}. \Psi END_DOC - integer :: i,ii,k,j,jj, l + integer :: i,ii,k,j, l double precision :: f, tmp double precision, external :: u_dot_v + logical, external :: detEq dressing_column_h(:,:) = 0.d0 dressing_column_s(:,:) = 0.d0 + do k=1,N_states - l = dressed_column_idx(k) - f = -1.d0/psi_coef(l,k) + integer :: jj do jj=1,N_det_non_ref j = idx_non_ref(jj) - dressing_column_h(j,k) = 2.d0*delta_ij (k,jj) - dressing_column_s(j,k) = 2.d0*delta_ij_s2(k,jj) - dressing_column_h(l,k) += psi_coef(j,k) * delta_ij(k,jj) - dressing_column_s(l,k) += psi_coef(j,k) * delta_ij_s2(k,jj) - enddo - dressing_column_h(l,k) *= f - dressing_column_s(l,k) *= f + dressing_column_h(j,k) = delta_ij (k,jj) + dressing_column_s(j,k) = delta_ij_s2(k,jj) + enddo enddo END_PROVIDER + + + +! BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ] +!&BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ] +! implicit none +! BEGIN_DOC +! ! Null dressing vectors +! END_DOC +! +! integer :: i,ii,k,j,jj, l +! double precision :: f, tmp +! double precision, external :: u_dot_v +! +! dressing_column_h(:,:) = 0.d0 +! dressing_column_s(:,:) = 0.d0 +! do k=1,N_states +! l = dressed_column_idx(k) +! f = 1.d0/psi_coef(l,k) +! +! do jj=1,N_det_non_ref +! j = idx_non_ref(jj) +! if (j /= l) then +! dressing_column_h(j,k) = 2.d0*delta_ij (k,jj) +! dressing_column_s(j,k) = 2.d0*delta_ij_s2(k,jj) +! else +! dressing_column_h(j,k) = delta_ij (k,jj) +! dressing_column_s(j,k) = delta_ij_s2(k,jj) +! endif +! enddo +! +! double precision :: h,s2 +! h = u_dot_v (dressing_column_h(1,k), psi_coef(1,k), N_det) - psi_coef(l,k) * dressing_column_h(l,k) +! s2 = u_dot_v (dressing_column_s(1,k), psi_coef(1,k), N_det) - psi_coef(l,k) * dressing_column_s(l,k) +! +! dressing_column_h(l,k) = dressing_column_h(l,k) - 0.5d0 * h +! dressing_column_s(l,k) = dressing_column_s(l,k) - 0.5d0 * s2 +! +! dressing_column_h(:,k) *= f +! dressing_column_s(:,k) *= f +! +! enddo +!END_PROVIDER +! diff --git a/src/Davidson/diagonalization_hs2_dressed.irp.f b/src/Davidson/diagonalization_hs2_dressed.irp.f index 491ddea7..f629c0c9 100644 --- a/src/Davidson/diagonalization_hs2_dressed.irp.f +++ b/src/Davidson/diagonalization_hs2_dressed.irp.f @@ -7,7 +7,7 @@ BEGIN_PROVIDER [ integer, dressed_column_idx, (N_states) ] double precision :: tmp integer, external :: idamax do i=1,N_states - dressed_column_idx(i) = idamax(size(psi_coef,1), psi_coef(1,i), 1) + dressed_column_idx(i) = idamax(N_det, psi_coef(1,i), 1) enddo END_PROVIDER