mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 19:43:32 +01:00
scf kpts
This commit is contained in:
parent
380cbdcbb5
commit
a0eb1d34db
@ -15,6 +15,12 @@ doc: Complex MO coefficient of the i-th |AO| on the j-th |MO|
|
|||||||
interface: ezfio
|
interface: ezfio
|
||||||
size: (2,ao_basis.ao_num,mo_basis.mo_num)
|
size: (2,ao_basis.ao_num,mo_basis.mo_num)
|
||||||
|
|
||||||
|
[mo_coef_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: Complex MO coefficient of the i-th |AO| on the j-th |MO|
|
||||||
|
interface: ezfio
|
||||||
|
size: (2,ao_basis.ao_num_per_kpt,mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
|
||||||
[mo_label]
|
[mo_label]
|
||||||
type: character*(64)
|
type: character*(64)
|
||||||
doc: Label characterizing the MOS (Local, Canonical, Natural, *etc*)
|
doc: Label characterizing the MOS (Local, Canonical, Natural, *etc*)
|
||||||
@ -26,6 +32,12 @@ doc: |MO| occupation numbers
|
|||||||
interface: ezfio
|
interface: ezfio
|
||||||
size: (mo_basis.mo_num)
|
size: (mo_basis.mo_num)
|
||||||
|
|
||||||
|
[mo_occ_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: |MO| occupation numbers
|
||||||
|
interface: ezfio
|
||||||
|
size: (mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
|
||||||
[mo_class]
|
[mo_class]
|
||||||
type: MO_class
|
type: MO_class
|
||||||
doc: [ Core | Inactive | Active | Virtual | Deleted ], as defined by :ref:`qp_set_mo_class`
|
doc: [ Core | Inactive | Active | Virtual | Deleted ], as defined by :ref:`qp_set_mo_class`
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
subroutine save_mos
|
subroutine save_mos
|
||||||
implicit none
|
implicit none
|
||||||
double precision, allocatable :: buffer(:,:)
|
double precision, allocatable :: buffer(:,:)
|
||||||
complex*16, allocatable :: buffer_c(:,:)
|
complex*16, allocatable :: buffer_c(:,:),buffer_k(:,:,:)
|
||||||
integer :: i,j
|
integer :: i,j,k
|
||||||
!TODO: change this for periodic?
|
!TODO: change this for periodic?
|
||||||
! save real/imag parts of mo_coef_complex
|
! save real/imag parts of mo_coef_complex
|
||||||
! otherwise need to make sure mo_coef and mo_coef_imag
|
! otherwise need to make sure mo_coef and mo_coef_imag
|
||||||
@ -13,14 +13,18 @@ subroutine save_mos
|
|||||||
call ezfio_set_mo_basis_ao_md5(ao_md5)
|
call ezfio_set_mo_basis_ao_md5(ao_md5)
|
||||||
if (is_complex) then
|
if (is_complex) then
|
||||||
allocate ( buffer_c(ao_num,mo_num))
|
allocate ( buffer_c(ao_num,mo_num))
|
||||||
buffer_c = (0.d0,0.d0)
|
allocate ( buffer_k(ao_num_per_kpt,mo_num_per_kpt,kpt_num))
|
||||||
do j = 1, mo_num
|
buffer_k = (0.d0,0.d0)
|
||||||
do i = 1, ao_num
|
do k=1,kpt_num
|
||||||
buffer_c(i,j) = mo_coef_complex(i,j)
|
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)
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
call ezfio_set_mo_basis_mo_coef_complex(buffer_c)
|
enddo
|
||||||
deallocate (buffer_c)
|
call ezfio_set_mo_basis_mo_coef_kpts(buffer_k)
|
||||||
|
deallocate (buffer_k)
|
||||||
|
call ezfio_set_mo_basis_mo_occ_kpts(mo_occ_kpts)
|
||||||
else
|
else
|
||||||
allocate ( buffer(ao_num,mo_num) )
|
allocate ( buffer(ao_num,mo_num) )
|
||||||
buffer = 0.d0
|
buffer = 0.d0
|
||||||
@ -31,8 +35,8 @@ subroutine save_mos
|
|||||||
enddo
|
enddo
|
||||||
call ezfio_set_mo_basis_mo_coef(buffer)
|
call ezfio_set_mo_basis_mo_coef(buffer)
|
||||||
deallocate (buffer)
|
deallocate (buffer)
|
||||||
endif
|
|
||||||
call ezfio_set_mo_basis_mo_occ(mo_occ)
|
call ezfio_set_mo_basis_mo_occ(mo_occ)
|
||||||
|
endif
|
||||||
call ezfio_set_mo_basis_mo_class(mo_class)
|
call ezfio_set_mo_basis_mo_class(mo_class)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -10,6 +10,12 @@ doc: Complex nucleus-electron integrals in |MO| basis set
|
|||||||
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
||||||
interface: ezfio
|
interface: ezfio
|
||||||
|
|
||||||
|
[mo_integrals_e_n_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: Complex nucleus-electron integrals in |MO| basis set
|
||||||
|
size: (2,mo_basis.mo_num_per_kpt,mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
[io_mo_integrals_e_n]
|
[io_mo_integrals_e_n]
|
||||||
type: Disk_access
|
type: Disk_access
|
||||||
doc: Read/Write |MO| electron-nucleus attraction integrals from/to disk [ Write | Read | None ]
|
doc: Read/Write |MO| electron-nucleus attraction integrals from/to disk [ Write | Read | None ]
|
||||||
@ -29,6 +35,12 @@ doc: Complex kinetic energy integrals in |MO| basis set
|
|||||||
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
||||||
interface: ezfio
|
interface: ezfio
|
||||||
|
|
||||||
|
[mo_integrals_kinetic_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: Complex kinetic energy integrals in |MO| basis set
|
||||||
|
size: (2,mo_basis.mo_num_per_kpt,mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
[io_mo_integrals_kinetic]
|
[io_mo_integrals_kinetic]
|
||||||
type: Disk_access
|
type: Disk_access
|
||||||
doc: Read/Write |MO| one-electron kinetic integrals from/to disk [ Write | Read | None ]
|
doc: Read/Write |MO| one-electron kinetic integrals from/to disk [ Write | Read | None ]
|
||||||
@ -48,6 +60,12 @@ doc: Complex pseudopotential integrals in |MO| basis set
|
|||||||
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
||||||
interface: ezfio
|
interface: ezfio
|
||||||
|
|
||||||
|
[mo_integrals_pseudo_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: Complex pseudopotential integrals in |MO| basis set
|
||||||
|
size: (2,mo_basis.mo_num_per_kpt,mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
[io_mo_integrals_pseudo]
|
[io_mo_integrals_pseudo]
|
||||||
type: Disk_access
|
type: Disk_access
|
||||||
doc: Read/Write |MO| pseudopotential integrals from/to disk [ Write | Read | None ]
|
doc: Read/Write |MO| pseudopotential integrals from/to disk [ Write | Read | None ]
|
||||||
@ -67,6 +85,12 @@ doc: Complex one-electron integrals in |MO| basis set
|
|||||||
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
size: (2,mo_basis.mo_num,mo_basis.mo_num)
|
||||||
interface: ezfio
|
interface: ezfio
|
||||||
|
|
||||||
|
[mo_one_e_integrals_kpts]
|
||||||
|
type: double precision
|
||||||
|
doc: Complex one-electron integrals in |MO| basis set
|
||||||
|
size: (2,mo_basis.mo_num_per_kpt,mo_basis.mo_num_per_kpt,nuclei.kpt_num)
|
||||||
|
interface: ezfio
|
||||||
|
|
||||||
[io_mo_one_e_integrals]
|
[io_mo_one_e_integrals]
|
||||||
type: Disk_access
|
type: Disk_access
|
||||||
doc: Read/Write |MO| one-electron integrals from/to disk [ Write | Read | None ]
|
doc: Read/Write |MO| one-electron integrals from/to disk [ Write | Read | None ]
|
||||||
|
@ -25,3 +25,36 @@ BEGIN_PROVIDER [complex*16, mo_kinetic_integrals_complex, (mo_num,mo_num)]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
!============================================!
|
||||||
|
! !
|
||||||
|
! kpts !
|
||||||
|
! !
|
||||||
|
!============================================!
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [complex*16, mo_kinetic_integrals_kpts, (mo_num_per_kpt,mo_num_per_kpt,kpt_num)]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Kinetic energy integrals in the MO basis
|
||||||
|
END_DOC
|
||||||
|
integer :: i,j
|
||||||
|
|
||||||
|
print *, 'Providing MO kinetic integrals'
|
||||||
|
if (read_mo_integrals_kinetic) then
|
||||||
|
call ezfio_get_mo_one_e_ints_mo_integrals_kinetic_kpts(mo_kinetic_integrals_kpts)
|
||||||
|
print *, 'MO kinetic integrals read from disk'
|
||||||
|
else
|
||||||
|
print *, 'Providing MO kinetic integrals from AO kinetic integrals'
|
||||||
|
call ao_to_mo_kpts( &
|
||||||
|
ao_kinetic_integrals_kpts, &
|
||||||
|
size(ao_kinetic_integrals_kpts,1), &
|
||||||
|
mo_kinetic_integrals_kpts, &
|
||||||
|
size(mo_kinetic_integrals_kpts,1) &
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
if (write_mo_integrals_kinetic) then
|
||||||
|
call ezfio_set_mo_one_e_ints_mo_integrals_kinetic_kpts(mo_kinetic_integrals_kpts)
|
||||||
|
print *, 'MO kinetic integrals written to disk'
|
||||||
|
endif
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
@ -26,3 +26,36 @@ BEGIN_PROVIDER [ complex*16, mo_one_e_integrals_complex,(mo_num,mo_num)]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
!============================================!
|
||||||
|
! !
|
||||||
|
! kpts !
|
||||||
|
! !
|
||||||
|
!============================================!
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ complex*16, mo_one_e_integrals_kpts,(mo_num_per_kpt,mo_num_per_kpt,kpt_num)]
|
||||||
|
implicit none
|
||||||
|
integer :: i,j,n,l
|
||||||
|
BEGIN_DOC
|
||||||
|
! array of the one-electron Hamiltonian on the |MO| basis :
|
||||||
|
! sum of the kinetic and nuclear electronic potentials (and pseudo potential if needed)
|
||||||
|
END_DOC
|
||||||
|
print*,'Providing the one-electron integrals'
|
||||||
|
|
||||||
|
IF (read_mo_one_e_integrals) THEN
|
||||||
|
call ezfio_get_mo_one_e_ints_mo_one_e_integrals_kpts(mo_one_e_integrals_kpts)
|
||||||
|
ELSE
|
||||||
|
mo_one_e_integrals_kpts = mo_integrals_n_e_kpts + mo_kinetic_integrals_kpts
|
||||||
|
|
||||||
|
IF (do_pseudo) THEN
|
||||||
|
mo_one_e_integrals_kpts += mo_pseudo_integrals_kpts
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF (write_mo_one_e_integrals) THEN
|
||||||
|
call ezfio_set_mo_one_e_ints_mo_one_e_integrals_kpts(mo_one_e_integrals_kpts)
|
||||||
|
print *, 'MO one-e integrals written to disk'
|
||||||
|
ENDIF
|
||||||
|
print*,'Provided the one-electron integrals'
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
@ -25,4 +25,35 @@ BEGIN_PROVIDER [complex*16, mo_integrals_n_e_complex, (mo_num,mo_num)]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
!============================================!
|
||||||
|
! !
|
||||||
|
! kpts !
|
||||||
|
! !
|
||||||
|
!============================================!
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [complex*16, mo_integrals_n_e_kpts, (mo_num_per_kpt,mo_num_per_kpt,kpt_num)]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Kinetic energy integrals in the MO basis
|
||||||
|
END_DOC
|
||||||
|
integer :: i,j
|
||||||
|
|
||||||
|
print *, 'Providing MO N-e integrals'
|
||||||
|
if (read_mo_integrals_e_n) then
|
||||||
|
call ezfio_get_mo_one_e_ints_mo_integrals_e_n_kpts(mo_integrals_n_e_kpts)
|
||||||
|
print *, 'MO N-e integrals read from disk'
|
||||||
|
else
|
||||||
|
print *, 'Providing MO N-e integrals from AO N-e integrals'
|
||||||
|
call ao_to_mo_kpts( &
|
||||||
|
ao_integrals_n_e_kpts, &
|
||||||
|
size(ao_integrals_n_e_kpts,1), &
|
||||||
|
mo_integrals_n_e_kpts, &
|
||||||
|
size(mo_integrals_n_e_kpts,1) &
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
if (write_mo_integrals_e_n) then
|
||||||
|
call ezfio_set_mo_one_e_ints_mo_integrals_e_n_kpts(mo_integrals_n_e_kpts)
|
||||||
|
print *, 'MO N-e integrals written to disk'
|
||||||
|
endif
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
@ -25,4 +25,35 @@ BEGIN_PROVIDER [complex*16, mo_pseudo_integrals_complex, (mo_num,mo_num)]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
!============================================!
|
||||||
|
! !
|
||||||
|
! kpts !
|
||||||
|
! !
|
||||||
|
!============================================!
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [complex*16, mo_pseudo_integrals_kpts, (mo_num_per_kpt,mo_num_per_kpt,kpt_num)]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Pseudopotential integrals in |MO| basis
|
||||||
|
END_DOC
|
||||||
|
integer :: i,j
|
||||||
|
|
||||||
|
if (read_mo_integrals_pseudo) then
|
||||||
|
call ezfio_get_mo_one_e_ints_mo_integrals_pseudo_kpts(mo_pseudo_integrals_kpts)
|
||||||
|
print *, 'MO pseudopotential integrals read from disk'
|
||||||
|
else if (do_pseudo) then
|
||||||
|
call ao_to_mo_kpts( &
|
||||||
|
ao_pseudo_integrals_kpts, &
|
||||||
|
size(ao_pseudo_integrals_kpts,1), &
|
||||||
|
mo_pseudo_integrals_kpts, &
|
||||||
|
size(mo_pseudo_integrals_kpts,1) &
|
||||||
|
)
|
||||||
|
else
|
||||||
|
mo_pseudo_integrals_kpts = (0.d0,0.d0)
|
||||||
|
endif
|
||||||
|
if (write_mo_integrals_pseudo) then
|
||||||
|
call ezfio_set_mo_one_e_ints_mo_integrals_pseudo_kpts(mo_pseudo_integrals_kpts)
|
||||||
|
print *, 'MO pseudopotential integrals written to disk'
|
||||||
|
endif
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
@ -543,7 +543,7 @@ END_PROVIDER
|
|||||||
|
|
||||||
ao_two_e_integral_alpha_kpts = (0.d0,0.d0)
|
ao_two_e_integral_alpha_kpts = (0.d0,0.d0)
|
||||||
ao_two_e_integral_beta_kpts = (0.d0,0.d0)
|
ao_two_e_integral_beta_kpts = (0.d0,0.d0)
|
||||||
PROVIDE ao_two_e_integrals_in_map
|
PROVIDE ao_two_e_integrals_in_map scf_density_matrix_ao_alpha_kpts scf_density_matrix_ao_beta_kpts
|
||||||
|
|
||||||
integer(omp_lock_kind) :: lck(ao_num)
|
integer(omp_lock_kind) :: lck(ao_num)
|
||||||
integer(map_size_kind) :: i8
|
integer(map_size_kind) :: i8
|
||||||
|
@ -84,7 +84,7 @@ subroutine huckel_guess_kpts
|
|||||||
!TOUCH fock_matrix_ao_alpha_complex fock_matrix_ao_beta_kpts
|
!TOUCH fock_matrix_ao_alpha_complex fock_matrix_ao_beta_kpts
|
||||||
TOUCH fock_matrix_ao_alpha_kpts fock_matrix_ao_beta_kpts
|
TOUCH fock_matrix_ao_alpha_kpts fock_matrix_ao_beta_kpts
|
||||||
mo_coef_kpts = eigenvectors_fock_matrix_mo_kpts
|
mo_coef_kpts = eigenvectors_fock_matrix_mo_kpts
|
||||||
SOFT_TOUCH mo_coef_complex
|
SOFT_TOUCH mo_coef_kpts
|
||||||
call save_mos
|
call save_mos
|
||||||
deallocate(A)
|
deallocate(A)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user