diff --git a/src/determinants/density_matrix.irp.f b/src/determinants/density_matrix.irp.f index e4f76bca..a930d70b 100644 --- a/src/determinants/density_matrix.irp.f +++ b/src/determinants/density_matrix.irp.f @@ -269,7 +269,6 @@ subroutine save_natural_mos END_DOC call set_natural_mos call save_mos - end diff --git a/src/determinants/determinants.irp.f b/src/determinants/determinants.irp.f index 62ee2fcd..71ee3d89 100644 --- a/src/determinants/determinants.irp.f +++ b/src/determinants/determinants.irp.f @@ -515,13 +515,15 @@ subroutine save_wavefunction_general(ndet,nstates,psidet,dim_psicoef,psicoef) double precision, allocatable :: psi_coef_save(:,:) double precision :: accu_norm - integer :: i,j,k + integer :: i,j,k, ndet_qp_edit if (mpi_master) then + ndet_qp_edit = min(ndet,N_det_qp_edit) + call ezfio_set_determinants_N_int(N_int) call ezfio_set_determinants_bit_kind(bit_kind) call ezfio_set_determinants_N_det(ndet) - call ezfio_set_determinants_N_det_qp_edit(N_det_qp_edit) + call ezfio_set_determinants_N_det_qp_edit(ndet_qp_edit) call ezfio_set_determinants_n_states(nstates) call ezfio_set_determinants_mo_label(mo_label) @@ -548,12 +550,12 @@ subroutine save_wavefunction_general(ndet,nstates,psidet,dim_psicoef,psicoef) call ezfio_set_determinants_psi_coef(psi_coef_save) deallocate (psi_coef_save) - allocate (psi_coef_save(N_det_qp_edit,nstates)) + allocate (psi_coef_save(ndet_qp_edit,nstates)) do k=1,nstates - do i=1,N_det_qp_edit + do i=1,ndet_qp_edit psi_coef_save(i,k) = psicoef(i,k) enddo - call normalize(psi_coef_save(1,k),N_det_qp_edit) + call normalize(psi_coef_save(1,k),ndet_qp_edit) enddo call ezfio_set_determinants_psi_coef_qp_edit(psi_coef_save) @@ -583,54 +585,80 @@ subroutine save_wavefunction_specified(ndet,nstates,psidet,psicoef,ndetsave,inde integer :: N_int2 equivalence (det_8, det_bk) - integer :: i,k + integer :: i,j,k, ndet_qp_edit - call ezfio_set_determinants_N_int(N_int) - call ezfio_set_determinants_bit_kind(bit_kind) - call ezfio_set_determinants_N_det(ndetsave) - call ezfio_set_determinants_n_states(nstates) - call ezfio_set_determinants_mo_label(mo_label) + if (mpi_master) then + ndet_qp_edit = min(ndetsave,N_det_qp_edit) + call ezfio_set_determinants_N_int(N_int) + call ezfio_set_determinants_bit_kind(bit_kind) + call ezfio_set_determinants_N_det(ndetsave) + call ezfio_set_determinants_N_det_qp_edit(ndet_qp_edit) + call ezfio_set_determinants_n_states(nstates) + call ezfio_set_determinants_mo_label(mo_label) - N_int2 = (N_int*bit_kind)/8 - allocate (psi_det_save(N_int2,2,ndetsave)) - do i=1,ndetsave - do k=1,N_int - det_bk(k) = psidet(k,1,index_det_save(i)) - enddo - do k=1,N_int2 - psi_det_save(k,1,i) = det_8(k) - enddo - do k=1,N_int - det_bk(k) = psidet(k,2,index_det_save(i)) - enddo - do k=1,N_int2 - psi_det_save(k,2,i) = det_8(k) - enddo - enddo - call ezfio_set_determinants_psi_det(psi_det_save) - deallocate (psi_det_save) - - allocate (psi_coef_save(ndetsave,nstates)) - double precision :: accu_norm(nstates) - accu_norm = 0.d0 - do k=1,nstates + N_int2 = (N_int*bit_kind)/8 + allocate (psi_det_save(N_int2,2,ndetsave)) do i=1,ndetsave - accu_norm(k) = accu_norm(k) + psicoef(index_det_save(i),k) * psicoef(index_det_save(i),k) - psi_coef_save(i,k) = psicoef(index_det_save(i),k) + do k=1,N_int + det_bk(k) = psidet(k,1,index_det_save(i)) + enddo + do k=1,N_int2 + psi_det_save(k,1,i) = det_8(k) + enddo + do k=1,N_int + det_bk(k) = psidet(k,2,index_det_save(i)) + enddo + do k=1,N_int2 + psi_det_save(k,2,i) = det_8(k) + enddo enddo - enddo - do k = 1, nstates - accu_norm(k) = 1.d0/dsqrt(accu_norm(k)) - enddo - do k=1,nstates - do i=1,ndetsave - psi_coef_save(i,k) = psi_coef_save(i,k) * accu_norm(k) - enddo - enddo + call ezfio_set_determinants_psi_det(psi_det_save) + call ezfio_set_determinants_psi_det_qp_edit(psi_det_save) + deallocate (psi_det_save) - call ezfio_set_determinants_psi_coef(psi_coef_save) - call write_int(6,ndet,'Saved determinants') - deallocate (psi_coef_save) + allocate (psi_coef_save(ndetsave,nstates)) + double precision :: accu_norm(nstates) + accu_norm = 0.d0 + do k=1,nstates + do i=1,ndetsave + accu_norm(k) = accu_norm(k) + psicoef(index_det_save(i),k) * psicoef(index_det_save(i),k) + psi_coef_save(i,k) = psicoef(index_det_save(i),k) + enddo + enddo + do k = 1, nstates + accu_norm(k) = 1.d0/dsqrt(accu_norm(k)) + enddo + do k=1,nstates + do i=1,ndetsave + psi_coef_save(i,k) = psi_coef_save(i,k) * accu_norm(k) + enddo + enddo + + call ezfio_set_determinants_psi_coef(psi_coef_save) + deallocate (psi_coef_save) + + allocate (psi_coef_save(ndet_qp_edit,nstates)) + accu_norm = 0.d0 + do k=1,nstates + do i=1,ndet_qp_edit + accu_norm(k) = accu_norm(k) + psicoef(index_det_save(i),k) * psicoef(index_det_save(i),k) + psi_coef_save(i,k) = psicoef(index_det_save(i),k) + enddo + enddo + do k = 1, nstates + accu_norm(k) = 1.d0/dsqrt(accu_norm(k)) + enddo + do k=1,nstates + do i=1,ndet_qp_edit + psi_coef_save(i,k) = psi_coef_save(i,k) * accu_norm(k) + enddo + enddo + + call ezfio_set_determinants_psi_coef(psi_coef_save) + deallocate (psi_coef_save) + + call write_int(6,ndet,'Saved determinants') + endif end