From 922eeb24c0ea0471e737e435faebcc63cdc2ff56 Mon Sep 17 00:00:00 2001 From: Kevin Gasperich Date: Thu, 12 Mar 2020 18:22:37 -0500 Subject: [PATCH] starting kpts --- src/ao_one_e_ints/EZFIO.cfg | 30 ++++++++++++++++++++++ src/ao_one_e_ints/ao_one_e_ints.irp.f | 30 ++++++++++++++++++++++ src/ao_one_e_ints/ao_ortho_cano_cplx.irp.f | 2 +- src/ao_one_e_ints/ao_overlap.irp.f | 28 +++++++++++++++++--- src/ao_one_e_ints/kin_ao_ints.irp.f | 21 +++++++++++++++ src/ao_one_e_ints/pot_ao_ints.irp.f | 15 +++++++++++ src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f | 18 +++++++++++++ 7 files changed, 140 insertions(+), 4 deletions(-) diff --git a/src/ao_one_e_ints/EZFIO.cfg b/src/ao_one_e_ints/EZFIO.cfg index 583c7757..a958b45b 100644 --- a/src/ao_one_e_ints/EZFIO.cfg +++ b/src/ao_one_e_ints/EZFIO.cfg @@ -10,6 +10,12 @@ doc: Complex nucleus-electron integrals in |AO| basis set size: (2,ao_basis.ao_num,ao_basis.ao_num) interface: ezfio +[ao_integrals_n_e_kpts] +type: double precision +doc: Complex nucleus-electron integrals in |AO| basis set +size: (2,ao_basis.ao_num_per_kpt,ao_basis.ao_num_per_kpt,nuclei.kpt_num) +interface: ezfio + [io_ao_integrals_n_e] type: Disk_access doc: Read/Write |AO| nucleus-electron attraction integrals from/to disk [ Write | Read | None ] @@ -29,6 +35,12 @@ doc: Complex kinetic energy integrals in |AO| basis set size: (2,ao_basis.ao_num,ao_basis.ao_num) interface: ezfio +[ao_integrals_kinetic_kpts] +type: double precision +doc: Complex kinetic energy integrals in |AO| basis set +size: (2,ao_basis.ao_num_per_kpt,ao_basis.ao_num_per_kpt,nuclei.kpt_num) +interface: ezfio + [io_ao_integrals_kinetic] type: Disk_access doc: Read/Write |AO| kinetic integrals from/to disk [ Write | Read | None ] @@ -48,6 +60,12 @@ doc: Complex pseudopotential integrals in |AO| basis set size: (2,ao_basis.ao_num,ao_basis.ao_num) interface: ezfio +[ao_integrals_pseudo_kpts] +type: double precision +doc: Complex pseudopotential integrals in |AO| basis set +size: (2,ao_basis.ao_num_per_kpt,ao_basis.ao_num_per_kpt,nuclei.kpt_num) +interface: ezfio + [io_ao_integrals_pseudo] type: Disk_access doc: Read/Write |AO| pseudopotential integrals from/to disk [ Write | Read | None ] @@ -67,6 +85,12 @@ doc: Complex overlap integrals in |AO| basis set size: (2,ao_basis.ao_num,ao_basis.ao_num) interface: ezfio +[ao_integrals_overlap_kpts] +type: double precision +doc: Complex overlap integrals in |AO| basis set +size: (2,ao_basis.ao_num_per_kpt,ao_basis.ao_num_per_kpt,nuclei.kpt_num) +interface: ezfio + [io_ao_integrals_overlap] type: Disk_access doc: Read/Write |AO| overlap integrals from/to disk [ Write | Read | None ] @@ -86,6 +110,12 @@ doc: Complex combined integrals in |AO| basis set size: (2,ao_basis.ao_num,ao_basis.ao_num) interface: ezfio +[ao_one_e_integrals_kpts] +type: double precision +doc: Complex combined integrals in |AO| basis set +size: (2,ao_basis.ao_num_per_kpt,ao_basis.ao_num_per_kpt,nuclei.kpt_num) +interface: ezfio + [io_ao_one_e_integrals] type: Disk_access doc: Read/Write |AO| one-electron integrals from/to disk [ Write | Read | None ] diff --git a/src/ao_one_e_ints/ao_one_e_ints.irp.f b/src/ao_one_e_ints/ao_one_e_ints.irp.f index be70bf23..9e18e5de 100644 --- a/src/ao_one_e_ints/ao_one_e_ints.irp.f +++ b/src/ao_one_e_ints/ao_one_e_ints.irp.f @@ -82,3 +82,33 @@ END_PROVIDER ENDIF END_PROVIDER + BEGIN_PROVIDER [ complex*16, ao_one_e_integrals_kpts,(ao_num_per_kpt,ao_num_per_kpt,kpt_num)] +&BEGIN_PROVIDER [ double precision, ao_one_e_integrals_diag_kpts,(ao_num_per_kpt,kpt_num)] + implicit none + integer :: j,k + BEGIN_DOC + ! One-electron Hamiltonian in the |AO| basis. + END_DOC + + if (read_ao_one_e_integrals) then + call ezfio_get_ao_one_e_ints_ao_one_e_integrals_kpts(ao_one_e_integrals_kpts) + else + ao_one_e_integrals_kpts = ao_integrals_n_e_kpts + ao_kinetic_integrals_kpts + + if (do_pseudo) then + ao_one_e_integrals_kpts += ao_pseudo_integrals_kpts + endif + endif + + do k = 1, kpt_num + do j = 1, ao_num_per_kpt + ao_one_e_integrals_diag_kpts(j,k) = dble(ao_one_e_integrals_kpts(j,j,k)) + enddo + enddo + + if (write_ao_one_e_integrals) then + call ezfio_set_ao_one_e_ints_ao_one_e_integrals_kpts(ao_one_e_integrals_kpts) + print *, 'AO one-e integrals written to disk' + endif +END_PROVIDER + diff --git a/src/ao_one_e_ints/ao_ortho_cano_cplx.irp.f b/src/ao_one_e_ints/ao_ortho_cano_cplx.irp.f index c84fe6a7..87a30d2d 100644 --- a/src/ao_one_e_ints/ao_ortho_cano_cplx.irp.f +++ b/src/ao_one_e_ints/ao_ortho_cano_cplx.irp.f @@ -1,4 +1,4 @@ - +!todo: add kpts BEGIN_PROVIDER [ complex*16, ao_cart_to_sphe_coef_complex, (ao_num,ao_cart_to_sphe_num) ] implicit none BEGIN_DOC diff --git a/src/ao_one_e_ints/ao_overlap.irp.f b/src/ao_one_e_ints/ao_overlap.irp.f index ad9fcff5..2e1695a7 100644 --- a/src/ao_one_e_ints/ao_overlap.irp.f +++ b/src/ao_one_e_ints/ao_overlap.irp.f @@ -104,6 +104,23 @@ BEGIN_PROVIDER [ complex*16, ao_overlap_complex, (ao_num, ao_num) ] endif END_PROVIDER +BEGIN_PROVIDER [ complex*16, ao_overlap_kpts, (ao_num_per_kpt, ao_num_per_kpt, kpt_num) ] + implicit none + BEGIN_DOC + ! Overlap for complex AOs + END_DOC + if (read_ao_integrals_overlap) then + call ezfio_get_ao_one_e_ints_ao_integrals_overlap_kpts(ao_overlap_kpts) + print *, 'AO overlap integrals read from disk' + else + print*,'complex AO overlap ints must be provided',irp_here + endif + if (write_ao_integrals_overlap) then + call ezfio_set_ao_one_e_ints_ao_integrals_overlap_kpts(ao_overlap_kpts) + print *, 'AO overlap integrals written to disk' + endif +END_PROVIDER + @@ -123,9 +140,14 @@ BEGIN_PROVIDER [ double precision, ao_overlap_abs,(ao_num,ao_num) ] integer :: power_A(3), power_B(3) double precision :: lower_exp_val, dx if (is_complex) then - do j=1,ao_num - do i= 1,ao_num - ao_overlap_abs(i,j)= cdabs(ao_overlap_complex(i,j)) + ao_overlap_abs = 0.d0 + integer :: k, ishift + do k=1,kpt_num + ishift = (k-1)*ao_num_per_kpt + do j=1,ao_num_per_kpt + do i= 1,ao_num_per_kpt + ao_overlap_abs(ishift+i,ishift+j)= cdabs(ao_overlap_kpts(i,j,k)) + enddo enddo enddo else diff --git a/src/ao_one_e_ints/kin_ao_ints.irp.f b/src/ao_one_e_ints/kin_ao_ints.irp.f index f352d1c4..18f866d2 100644 --- a/src/ao_one_e_ints/kin_ao_ints.irp.f +++ b/src/ao_one_e_ints/kin_ao_ints.irp.f @@ -191,3 +191,24 @@ BEGIN_PROVIDER [complex*16, ao_kinetic_integrals_complex, (ao_num,ao_num)] print *, 'AO kinetic integrals written to disk' endif END_PROVIDER + +BEGIN_PROVIDER [complex*16, ao_kinetic_integrals_kpts, (ao_num_per_kpt,ao_num_per_kpt,kpt_num)] + implicit none + BEGIN_DOC + ! Kinetic energy integrals in the |AO| basis. + ! + ! $\langle \chi_i |\hat{T}| \chi_j \rangle$ + ! + END_DOC + if (read_ao_integrals_kinetic) then + call ezfio_get_ao_one_e_ints_ao_integrals_kinetic_kpts(ao_kinetic_integrals_kpts) + print *, 'AO kinetic integrals read from disk' + else + print *, irp_here, ': Not yet implemented' + stop -1 + endif + if (write_ao_integrals_kinetic) then + call ezfio_set_ao_one_e_ints_ao_integrals_kinetic_kpts(ao_kinetic_integrals_kpts) + print *, 'AO kinetic integrals written to disk' + endif +END_PROVIDER diff --git a/src/ao_one_e_ints/pot_ao_ints.irp.f b/src/ao_one_e_ints/pot_ao_ints.irp.f index 08c78464..59ded4fc 100644 --- a/src/ao_one_e_ints/pot_ao_ints.irp.f +++ b/src/ao_one_e_ints/pot_ao_ints.irp.f @@ -120,6 +120,21 @@ BEGIN_PROVIDER [complex*16, ao_integrals_n_e_complex, (ao_num,ao_num)] endif END_PROVIDER +BEGIN_PROVIDER [complex*16, ao_integrals_n_e_kpts, (ao_num_per_kpt,ao_num_per_kpt,kpt_num)] + implicit none + BEGIN_DOC + ! Nucleus-electron interaction, in the |AO| basis set. + ! + ! :math:`\langle \chi_i | -\sum_A \frac{1}{|r-R_A|} | \chi_j \rangle` + END_DOC + if (read_ao_integrals_n_e) then + call ezfio_get_ao_one_e_ints_ao_integrals_n_e_kpts(ao_integrals_n_e_kpts) + print *, 'AO N-e integrals read from disk' + else + print *, irp_here, ': Not yet implemented' + endif +END_PROVIDER + BEGIN_PROVIDER [ double precision, ao_integrals_n_e_per_atom, (ao_num,ao_num,nucl_num)] BEGIN_DOC ! Nucleus-electron interaction in the |AO| basis set, per atom A. diff --git a/src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f b/src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f index 0032b2ae..1bf44d21 100644 --- a/src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f +++ b/src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f @@ -62,6 +62,24 @@ BEGIN_PROVIDER [ complex*16, ao_pseudo_integrals_complex, (ao_num, ao_num) ] endif END_PROVIDER +BEGIN_PROVIDER [ complex*16, ao_pseudo_integrals_kpts, (ao_num_per_kpt, ao_num_per_kpt, kpt_num) ] + implicit none + BEGIN_DOC + ! Overlap for complex AOs + END_DOC + if (read_ao_integrals_pseudo) then + call ezfio_get_ao_one_e_ints_ao_integrals_pseudo_kpts(ao_pseudo_integrals_kpts) + print *, 'AO pseudo_integrals integrals read from disk' + else + print*,irp_here,'not implemented' + stop -1 + endif + if (write_ao_integrals_pseudo) then + call ezfio_set_ao_one_e_ints_ao_integrals_pseudo_kpts(ao_pseudo_integrals_kpts) + print *, 'AO pseudo_integrals integrals written to disk' + endif +END_PROVIDER + BEGIN_PROVIDER [ double precision, ao_pseudo_integrals_local, (ao_num,ao_num)] implicit none BEGIN_DOC