From 5c769d531c9a6c1335b3df4144f4c1a2a633e44a Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 14 Sep 2018 19:07:55 +0200 Subject: [PATCH] Fixed bug in truncate_wf --- src/Determinants/determinants.irp.f | 19 +++++++------------ src/Determinants/occ_pattern.irp.f | 3 +++ src/Determinants/truncate_wf.irp.f | 4 ++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/Determinants/determinants.irp.f b/src/Determinants/determinants.irp.f index f04a85a5..1e58e262 100644 --- a/src/Determinants/determinants.irp.f +++ b/src/Determinants/determinants.irp.f @@ -549,23 +549,18 @@ subroutine save_wavefunction_general(ndet,nstates,psidet,dim_psicoef,psicoef) deallocate (psi_det_save) allocate (psi_coef_save(ndet,nstates)) - double precision :: accu_norm(nstates) - accu_norm = 0.d0 + double precision :: accu_norm do k=1,nstates + accu_norm = 0.d0 do i=1,ndet - accu_norm(k) = accu_norm(k) + psicoef(i,k) * psicoef(i,k) - psi_coef_save(i,k) = psicoef(i,k) + accu_norm = accu_norm + psicoef(i,k) * psicoef(i,k) enddo - if (accu_norm(k) == 0.d0) then - accu_norm(k) = 1.e-12 + if (accu_norm == 0.d0) then + accu_norm = 1.e-12 endif - enddo - do k = 1, nstates - accu_norm(k) = 1.d0/dsqrt(accu_norm(k)) - enddo - do k=1,nstates + accu_norm = 1.d0/dsqrt(accu_norm) do i=1,ndet - psi_coef_save(i,k) = psi_coef_save(i,k) * accu_norm(k) + psi_coef_save(i,k) = psicoef(i,k) * accu_norm enddo enddo diff --git a/src/Determinants/occ_pattern.irp.f b/src/Determinants/occ_pattern.irp.f index 016b546b..f8358a17 100644 --- a/src/Determinants/occ_pattern.irp.f +++ b/src/Determinants/occ_pattern.irp.f @@ -256,6 +256,8 @@ BEGIN_PROVIDER [ integer, det_to_occ_pattern, (N_det) ] integer :: i,j,k integer(bit_kind) :: occ(N_int,2) logical :: found + !$OMP PARALLEL DO DEFAULT(SHARED) & + !$OMP PRIVATE(i,k,j,found,occ) do i=1,N_det do k = 1, N_int occ(k,1) = ieor(psi_det(k,1,i),psi_det(k,2,i)) @@ -276,6 +278,7 @@ BEGIN_PROVIDER [ integer, det_to_occ_pattern, (N_det) ] endif enddo enddo + !$OMP END PARALLEL DO END_PROVIDER BEGIN_PROVIDER [ double precision, weight_occ_pattern, (N_occ_pattern,N_states) ] diff --git a/src/Determinants/truncate_wf.irp.f b/src/Determinants/truncate_wf.irp.f index 619489aa..6d5e2c98 100644 --- a/src/Determinants/truncate_wf.irp.f +++ b/src/Determinants/truncate_wf.irp.f @@ -39,7 +39,7 @@ subroutine routine enddo enddo - call save_wavefunction_general(ndet_max,N_states,psi_det_tmp,N_det_max,psi_coef_tmp) + call save_wavefunction_general(ndet_max,N_states,psi_det_tmp,size(psi_coef_tmp,1),psi_coef_tmp) end @@ -86,6 +86,6 @@ subroutine routine_s2 enddo enddo - call save_wavefunction_general(ndet_max,N_states,psi_det_tmp,N_det_max,psi_coef_tmp) + call save_wavefunction_general(ndet_max,N_states,psi_det_tmp,size(psi_coef_tmp,1),psi_coef_tmp) end