From acc8a8bb7e688ffcb5b2a05c74b0169bd1dad738 Mon Sep 17 00:00:00 2001 From: Yann Garniron Date: Thu, 2 Jun 2016 12:47:35 +0200 Subject: [PATCH] dirty - corrected mrcepa/mrcc final PT2 --- config/gfortran.cfg | 2 +- plugins/MRCC_Utils/H_apply.irp.f | 6 ++ plugins/MRCC_Utils/mrcc_utils.irp.f | 13 +++- plugins/mrcepa0/mrcepa0_general.irp.f | 92 +++++++++++++++++++++++---- 4 files changed, 96 insertions(+), 17 deletions(-) diff --git a/config/gfortran.cfg b/config/gfortran.cfg index a1940bdb..c0aa875f 100644 --- a/config/gfortran.cfg +++ b/config/gfortran.cfg @@ -22,7 +22,7 @@ IRPF90_FLAGS : --ninja --align=32 # 0 : Deactivate # [OPTION] -MODE : DEBUG ; [ OPT | PROFILE | DEBUG ] : Chooses the section below +MODE : OPT ; [ OPT | PROFILE | DEBUG ] : Chooses the section below CACHE : 1 ; Enable cache_compile.py OPENMP : 1 ; Append OpenMP flags diff --git a/plugins/MRCC_Utils/H_apply.irp.f b/plugins/MRCC_Utils/H_apply.irp.f index df2b67a0..57d6d5c1 100644 --- a/plugins/MRCC_Utils/H_apply.irp.f +++ b/plugins/MRCC_Utils/H_apply.irp.f @@ -31,5 +31,11 @@ s.set_perturbation("epstein_nesbet_2x2") s.unset_openmp() print s +s = H_apply_zmq("mrcepa_PT2") +s.energy = "psi_ref_energy_diagonalized" +s.set_perturbation("epstein_nesbet_2x2") +s.unset_openmp() +print s + END_SHELL diff --git a/plugins/MRCC_Utils/mrcc_utils.irp.f b/plugins/MRCC_Utils/mrcc_utils.irp.f index cfd6481e..e0dcac62 100644 --- a/plugins/MRCC_Utils/mrcc_utils.irp.f +++ b/plugins/MRCC_Utils/mrcc_utils.irp.f @@ -73,6 +73,7 @@ END_PROVIDER BEGIN_PROVIDER [ double precision, lambda_mrcc, (N_states,psi_det_size) ] &BEGIN_PROVIDER [ integer, lambda_mrcc_pt2, (0:psi_det_size) ] +&BEGIN_PROVIDER [ integer, lambda_mrcc_pt3, (0:psi_det_size) ] implicit none BEGIN_DOC ! cm/ or perturbative 1/Delta_E(m) @@ -81,7 +82,7 @@ END_PROVIDER double precision :: ihpsi_current(N_states) integer :: i_pert_count double precision :: hii, lambda_pert - integer :: N_lambda_mrcc_pt2 + integer :: N_lambda_mrcc_pt2, N_lambda_mrcc_pt3 integer :: histo(200), j histo = 0 @@ -92,7 +93,9 @@ END_PROVIDER i_pert_count = 0 lambda_mrcc = 0.d0 N_lambda_mrcc_pt2 = 0 + N_lambda_mrcc_pt3 = 0 lambda_mrcc_pt2(0) = 0 + lambda_mrcc_pt3(0) = 0 do i=1,N_det_non_ref call i_h_psi(psi_non_ref(1,1,i), psi_ref, psi_ref_coef, N_int, N_det_ref,& @@ -111,15 +114,21 @@ END_PROVIDER N_lambda_mrcc_pt2 += 1 lambda_mrcc_pt2(N_lambda_mrcc_pt2) = i endif + else + if (lambda_mrcc_pt3(N_lambda_mrcc_pt3) /= i) then + N_lambda_mrcc_pt3 += 1 + lambda_mrcc_pt3(N_lambda_mrcc_pt3) = i + endif endif enddo enddo lambda_mrcc_pt2(0) = N_lambda_mrcc_pt2 + lambda_mrcc_pt3(0) = N_lambda_mrcc_pt3 end if print*,'N_det_non_ref = ',N_det_non_ref - print*,'Number of ignored determinants = ',i_pert_count print*,'psi_coef_ref_ratio = ',psi_ref_coef(2,1)/psi_ref_coef(1,1) print*,'lambda max = ',maxval(dabs(lambda_mrcc)) + print*,'Number of ignored determinants = ',i_pert_count END_PROVIDER diff --git a/plugins/mrcepa0/mrcepa0_general.irp.f b/plugins/mrcepa0/mrcepa0_general.irp.f index 82b1fc9b..0ef4c92b 100644 --- a/plugins/mrcepa0/mrcepa0_general.irp.f +++ b/plugins/mrcepa0/mrcepa0_general.irp.f @@ -64,8 +64,10 @@ subroutine run_pt2(N_st,energy) double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) integer, intent(in) :: N_st double precision, intent(in) :: energy(N_st) + double precision :: pt3(N_st) allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) pt2 = 0.d0 + pt3 = 0d0 !if(lambda_mrcc_pt2(0) == 0) return print*,'Last iteration only to compute the PT2' @@ -85,29 +87,91 @@ subroutine run_pt2(N_st,energy) ! enddo ! SOFT_TOUCH N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed - N_det_generators = lambda_mrcc_pt2(0) + N_det_cas - do i=1,N_det_cas - do k=1,N_int - psi_det_generators(k,1,i) = psi_ref(k,1,i) - psi_det_generators(k,2,i) = psi_ref(k,2,i) - enddo - do k=1,N_st - psi_coef_generators(i,k) = psi_ref_coef(i,k) - enddo - enddo - do i=N_det_cas+1,N_det_generators - j = lambda_mrcc_pt2(i - N_det_cas) + +! +! N_det_generators = lambda_mrcc_pt2(0) + N_det_cas +! do i=1,N_det_cas +! do k=1,N_int +! psi_det_generators(k,1,i) = psi_ref(k,1,i) +! psi_det_generators(k,2,i) = psi_ref(k,2,i) +! enddo +! do k=1,N_st +! psi_coef_generators(i,k) = psi_ref_coef(i,k) +! enddo +! enddo +! do i=N_det_cas+1,N_det_generators +! j = lambda_mrcc_pt2(i - N_det_cas) +! do k=1,N_int +! psi_det_generators(k,1,i) = psi_non_ref(k,1,j) +! psi_det_generators(k,2,i) = psi_non_ref(k,2,j) +! enddo +! do k=1,N_st +! psi_coef_generators(i,k) = psi_non_ref_coef(j,k) +! enddo +! enddo +! SOFT_TOUCH N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed + + N_det_generators = lambda_mrcc_pt3(0) + N_det_ref + N_det_selectors = lambda_mrcc_pt3(0) + N_det_ref + + psi_det_generators(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) + psi_selectors(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) + psi_coef_generators(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) + psi_selectors_coef(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) + + do i=N_det_ref+1,N_det_generators + j = lambda_mrcc_pt3(i-N_det_ref) do k=1,N_int psi_det_generators(k,1,i) = psi_non_ref(k,1,j) psi_det_generators(k,2,i) = psi_non_ref(k,2,j) + psi_selectors(k,1,i) = psi_non_ref(k,1,j) + psi_selectors(k,2,i) = psi_non_ref(k,2,j) enddo do k=1,N_st psi_coef_generators(i,k) = psi_non_ref_coef(j,k) + psi_selectors_coef(i,k) = psi_non_ref_coef(j,k) enddo enddo - SOFT_TOUCH N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed + + SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed + SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized! psi_coef_energy_diagonalized + call H_apply_mrcepa_PT2(pt2, norm_pert, H_pert_diag, N_st) + + N_det_generators = N_det_non_ref + N_det_ref + N_det_selectors = N_det_non_ref + N_det_ref + + psi_det_generators(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) + psi_selectors(:,:,:N_det_ref) = psi_ref(:,:,:N_det_ref) + psi_coef_generators(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) + psi_selectors_coef(:N_det_ref,:) = psi_ref_coef(:N_det_ref,:) + + do i=N_det_ref+1,N_det_generators + j = i-N_det_ref + do k=1,N_int + psi_det_generators(k,1,i) = psi_non_ref(k,1,j) + psi_det_generators(k,2,i) = psi_non_ref(k,2,j) + psi_selectors(k,1,i) = psi_non_ref(k,1,j) + psi_selectors(k,2,i) = psi_non_ref(k,2,j) + enddo + do k=1,N_st + psi_coef_generators(i,k) = psi_non_ref_coef(j,k) + psi_selectors_coef(i,k) = psi_non_ref_coef(j,k) + enddo + enddo + + SOFT_TOUCH N_det_selectors psi_selectors_coef psi_selectors N_det_generators psi_det_generators psi_coef_generators ci_eigenvectors_dressed ci_eigenvectors_s2_dressed ci_electronic_energy_dressed + SOFT_TOUCH psi_ref_coef_diagonalized psi_ref_energy_diagonalized! psi_coef_energy_diagonalized + call H_apply_mrcepa_PT2(pt3, norm_pert, H_pert_diag, N_st) - call H_apply_mrcc_PT2(pt2, norm_pert, H_pert_diag, N_st) + +!!!!!!!!!!!!!!!! + + + + print *, "2-3 :",pt2, pt3 + print *, lambda_mrcc_pt3(0), N_det, N_det_ref, psi_coef(1,1), psi_ref_coef(1,1) + pt2 = pt2 - pt3 + print *, 'Final step' print *, 'N_det = ', N_det print *, 'N_states = ', N_states