diff --git a/src/determinants/density_matrix.irp.f b/src/determinants/density_matrix.irp.f index 7d9bf873..ac3157e4 100644 --- a/src/determinants/density_matrix.irp.f +++ b/src/determinants/density_matrix.irp.f @@ -259,6 +259,7 @@ subroutine set_natural_mos label = "Natural" integer :: i,j,iorb,jorb,k if (is_complex) then + !todo: implement for kpts do k=1,kpt_num do i = 1, n_virt_orb_kpts(k) @@ -273,6 +274,14 @@ subroutine set_natural_mos enddo enddo enddo + !print*,'1RDM' + !do k=1,kpt_num + ! do j=1,mo_num_per_kpt + ! do i=1,mo_num_per_kpt + ! print'(3(I5),2(E25.15))',i,j,k,one_e_dm_mo_kpts(i,j,k) + ! enddo + ! enddo + !enddo ! call mo_as_svd_vectors_of_mo_matrix_eig_complex(one_e_dm_mo_complex,size(one_e_dm_mo_complex,1),mo_num,mo_num,mo_occ,label) call mo_as_svd_vectors_of_mo_matrix_eig_kpts(one_e_dm_mo_kpts,size(one_e_dm_mo_kpts,1),mo_num_per_kpt,mo_num_per_kpt,kpt_num,mo_occ_kpts,label) soft_touch mo_occ_kpts diff --git a/src/mo_basis/mos_cplx.irp.f b/src/mo_basis/mos_cplx.irp.f index c88441b7..fb90d807 100644 --- a/src/mo_basis/mos_cplx.irp.f +++ b/src/mo_basis/mos_cplx.irp.f @@ -228,7 +228,7 @@ BEGIN_PROVIDER [ complex*16, mo_coef_kpts, (ao_num_per_kpt, mo_num_per_kpt, kpt_ if (mpi_master) then ! Coefs - call ezfio_has_mo_basis_mo_coef_complex(exists) + call ezfio_has_mo_basis_mo_coef_kpts(exists) endif IRP_IF MPI_DEBUG print *, irp_here, mpi_rank diff --git a/src/mo_basis/utils.irp.f b/src/mo_basis/utils.irp.f index b4ccddb6..9409447c 100644 --- a/src/mo_basis/utils.irp.f +++ b/src/mo_basis/utils.irp.f @@ -2,7 +2,7 @@ subroutine save_mos implicit none double precision, allocatable :: buffer(:,:) complex*16, allocatable :: buffer_c(:,:),buffer_k(:,:,:) - integer :: i,j,k + integer :: i,j,k,ishft,jshft !TODO: change this for periodic? ! save real/imag parts of mo_coef_complex ! otherwise need to make sure mo_coef and mo_coef_imag @@ -12,19 +12,40 @@ subroutine save_mos call ezfio_set_mo_basis_mo_label(mo_label) call ezfio_set_mo_basis_ao_md5(ao_md5) if (is_complex) then - !allocate ( buffer_c(ao_num,mo_num)) + allocate ( buffer_c(ao_num,mo_num)) allocate ( buffer_k(ao_num_per_kpt,mo_num_per_kpt,kpt_num)) buffer_k = (0.d0,0.d0) do k=1,kpt_num do j = 1, mo_num_per_kpt do i = 1, ao_num_per_kpt buffer_k(i,j,k) = mo_coef_kpts(i,j,k) + !print*,i,j,k,buffer_k(i,j,k) + enddo + enddo + enddo + buffer_c = (0.d0,0.d0) + do k=1,kpt_num + ishft = (k-1)*ao_num_per_kpt + jshft = (k-1)*mo_num_per_kpt + do j=1,mo_num_per_kpt + do i=1,ao_num_per_kpt + buffer_c(i+ishft,j+jshft) = buffer_k(i,j,k) enddo enddo enddo call ezfio_set_mo_basis_mo_coef_kpts(buffer_k) - deallocate (buffer_k) + call ezfio_set_mo_basis_mo_coef_complex(buffer_c) + + deallocate (buffer_k,buffer_c) + mo_occ = 0.d0 + do k=1,kpt_num + ishft=(k-1)*mo_num_per_kpt + do i=1,mo_num_per_kpt + mo_occ(i+ishft)=mo_occ_kpts(i,k) + enddo + enddo call ezfio_set_mo_basis_mo_occ_kpts(mo_occ_kpts) + call ezfio_set_mo_basis_mo_occ(mo_occ) else allocate ( buffer(ao_num,mo_num) ) buffer = 0.d0 diff --git a/src/mo_basis/utils_cplx.irp.f b/src/mo_basis/utils_cplx.irp.f index 5ca82213..936d09cc 100644 --- a/src/mo_basis/utils_cplx.irp.f +++ b/src/mo_basis/utils_cplx.irp.f @@ -415,7 +415,7 @@ subroutine mo_as_svd_vectors_of_mo_matrix_eig_kpts(matrix,lda,m,n,nk,eig,label) A(i,j) = matrix(i,j,k) enddo enddo - mo_coef_new = mo_coef_kpts(1,1,k) + mo_coef_new(1:ao_num_per_kpt,1:m) = mo_coef_kpts(1:ao_num_per_kpt,1:m,k) call svd_complex(A,lda,U,lda,D,Vt,lda,m,n) @@ -428,6 +428,11 @@ subroutine mo_as_svd_vectors_of_mo_matrix_eig_kpts(matrix,lda,m,n,nk,eig,label) do i=1,m eig(i,k) = D(i) enddo + !do j=1,mo_num_per_kpt + ! do i=1,mo_num_per_kpt + ! print'(3(I5),2(E25.15))',i,j,k,mo_coef_kpts(i,j,k) + ! enddo + !enddo enddo deallocate(A,mo_coef_new,U,Vt,D) diff --git a/src/tools/save_natorb.irp.f b/src/tools/save_natorb.irp.f index 88b28f06..d4a7f5df 100644 --- a/src/tools/save_natorb.irp.f +++ b/src/tools/save_natorb.irp.f @@ -17,6 +17,7 @@ program save_natorb call save_natural_mos call save_ref_determinant call ezfio_set_mo_two_e_ints_io_mo_two_e_integrals('None') + call ezfio_set_mo_two_e_ints_io_df_mo_integrals('None') call ezfio_set_mo_one_e_ints_io_mo_one_e_integrals('None') call ezfio_set_mo_one_e_ints_io_mo_integrals_kinetic('None') call ezfio_set_mo_one_e_ints_io_mo_integrals_e_n('None')