10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-06-02 11:25:26 +02:00
* added frozen_orb_scd

* changed save_singles to compute_singles
This commit is contained in:
Anthony Scemama 2019-01-09 16:01:56 +01:00 committed by GitHub
parent 314e98a0d1
commit 83061d4779
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 66 additions and 57 deletions

View File

@ -166,7 +166,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
!$OMP psi_bilinear_matrix_columns_loc, &
!$OMP psi_bilinear_matrix_transp_rows_loc, &
!$OMP istart, iend, istep, irp_here, v_t, s_t, &
!$OMP ishift, idx0, u_t, maxab, save_singles) &
!$OMP ishift, idx0, u_t, maxab, compute_singles) &
!$OMP PRIVATE(krow, kcol, tmp_det, spindet, k_a, k_b, i, &
!$OMP lcol, lrow, l_a, l_b, &
!$OMP buffer, doubles, n_doubles, &

View File

@ -16,21 +16,21 @@ subroutine initialize_mo_coef_begin_iteration
mo_coef_begin_iteration = mo_coef
end
subroutine reorder_active_orb
subroutine reorder_core_orb
implicit none
BEGIN_DOC
! routines that takes the current :c:data:`mo_coef` and reorder the active orbitals (see :c:data:`list_act` and :c:data:`n_act_orb`) according to the overlap with :c:data:`mo_coef_begin_iteration`
! routines that takes the current :c:data:`mo_coef` and reorder the core orbitals (see :c:data:`list_core` and :c:data:`n_core_orb`) according to the overlap with :c:data:`mo_coef_begin_iteration`
END_DOC
integer :: i,j,iorb
integer :: k,l
double precision, allocatable :: accu(:)
integer, allocatable :: index_active_orb(:),iorder(:)
integer, allocatable :: index_core_orb(:),iorder(:)
double precision, allocatable :: mo_coef_tmp(:,:)
allocate(accu(mo_num),index_active_orb(n_act_orb),iorder(mo_num))
allocate(accu(mo_num),index_core_orb(n_core_orb),iorder(mo_num))
allocate(mo_coef_tmp(ao_num,mo_num))
do i = 1, n_act_orb
iorb = list_act(i)
do i = 1, n_core_orb
iorb = list_core(i)
do j = 1, mo_num
accu(j) = 0.d0
iorder(j) = j
@ -42,14 +42,14 @@ subroutine reorder_active_orb
accu(j) = -dabs(accu(j))
enddo
call dsort(accu,iorder,mo_num)
index_active_orb(i) = iorder(1)
index_core_orb(i) = iorder(1)
enddo
double precision :: x
integer :: i1,i2
do j = 1, n_act_orb
i1 = list_act(j)
i2 = index_active_orb(j)
do j = 1, n_core_orb
i1 = list_core(j)
i2 = index_core_orb(j)
do i=1,ao_num
x = mo_coef(i,i1)
mo_coef(i,i1) = mo_coef(i,i2)
@ -58,5 +58,5 @@ subroutine reorder_active_orb
enddo
!call loc_cele_routine
deallocate(accu,index_active_orb, iorder)
deallocate(accu,index_core_orb, iorder)
end

View File

@ -45,9 +45,9 @@ type: double precision
doc: Calculated HF energy
interface: ezfio
[no_oa_or_av_opt]
[frozen_orb_scf]
type: logical
doc: If true, leave the active orbitals untouched in the SCF procedure
doc: If true, leave untouched all the orbitals defined as core and optimize all the orbitals defined as active with qp_set_mo_class
interface: ezfio,provider,ocaml
default: False

View File

@ -61,14 +61,14 @@ subroutine damping_SCF
write(6,'(I4,1X,F16.10, 1X, F16.10, 1X, F16.10, 3X, A )') &
k, E, delta_E, delta_D, save_char
if(no_oa_or_av_opt)then
if(frozen_orb_scf)then
call initialize_mo_coef_begin_iteration
endif
D_alpha = SCF_density_matrix_ao_alpha
D_beta = SCF_density_matrix_ao_beta
mo_coef = eigenvectors_fock_matrix_mo
if(no_oa_or_av_opt)then
call reorder_active_orb
if(frozen_orb_scf)then
call reorder_core_orb
call initialize_mo_coef_begin_iteration
endif
TOUCH mo_coef
@ -88,8 +88,8 @@ subroutine damping_SCF
SCF_density_matrix_ao_beta = D_beta + lambda * delta_beta
TOUCH SCF_density_matrix_ao_alpha SCF_density_matrix_ao_beta
mo_coef = eigenvectors_fock_matrix_mo
if(no_oa_or_av_opt)then
call reorder_active_orb
if(frozen_orb_scf)then
call reorder_core_orb
call initialize_mo_coef_begin_iteration
endif
TOUCH mo_coef
@ -123,8 +123,8 @@ subroutine damping_SCF
SCF_density_matrix_ao_beta = D_beta
TOUCH SCF_density_matrix_ao_alpha SCF_density_matrix_ao_beta
mo_coef = eigenvectors_fock_matrix_mo
if(no_oa_or_av_opt)then
call reorder_active_orb
if(frozen_orb_scf)then
call reorder_core_orb
call initialize_mo_coef_begin_iteration
endif
TOUCH mo_coef
@ -133,7 +133,7 @@ subroutine damping_SCF
write(6,'(A4,1X,A16, 1X, A16, 1X, A16, 1X, A4 )') '====','================','================','================', '===='
write(6,*)
if(.not.no_oa_or_av_opt)then
if(.not.frozen_orb_scf)then
call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label,1,.true.)
endif

View File

@ -19,29 +19,19 @@ BEGIN_PROVIDER [ double precision, eigenvectors_Fock_matrix_mo, (ao_num,mo_num)
F(i,j) = Fock_matrix_mo(i,j)
enddo
enddo
if(no_oa_or_av_opt)then
if(frozen_orb_scf)then
integer :: iorb,jorb
do i = 1, n_act_orb
iorb = list_act(i)
do j = 1, n_inact_orb
jorb = list_inact(j)
F(iorb,jorb) = 0.d0
F(jorb,iorb) = 0.d0
enddo
do j = 1, n_virt_orb
jorb = list_virt(j)
F(iorb,jorb) = 0.d0
F(jorb,iorb) = 0.d0
enddo
do j = 1, n_core_orb
jorb = list_core(j)
F(iorb,jorb) = 0.d0
F(jorb,iorb) = 0.d0
enddo
do i = 1, n_core_orb
iorb = list_core(i)
do j = 1, n_act_orb
jorb = list_act(j)
F(iorb,jorb) = 0.d0
F(jorb,iorb) = 0.d0
enddo
enddo
endif
! Insert level shift here
do i = elec_beta_num+1, elec_alpha_num
F(i,i) += 0.5d0*level_shift

View File

@ -78,6 +78,20 @@
do i = 1, mo_num
Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i)
enddo
if(frozen_orb_scf)then
integer :: iorb,jorb
do i = 1, n_core_orb
iorb = list_core(i)
do j = 1, n_act_orb
jorb = list_act(j)
Fock_matrix_mo(iorb,jorb) = 0.d0
Fock_matrix_mo(jorb,iorb) = 0.d0
enddo
enddo
endif
END_PROVIDER
@ -108,18 +122,23 @@ BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num, ao_num) ]
! Fock matrix in AO basis set
END_DOC
if ( (elec_alpha_num == elec_beta_num).and. &
(level_shift == 0.) ) &
then
integer :: i,j
do j=1,ao_num
do i=1,ao_num
Fock_matrix_ao(i,j) = Fock_matrix_ao_alpha(i,j)
enddo
enddo
else
if(frozen_orb_scf)then
call mo_to_ao(Fock_matrix_mo,size(Fock_matrix_mo,1), &
Fock_matrix_ao,size(Fock_matrix_ao,1))
else
if ( (elec_alpha_num == elec_beta_num).and. &
(level_shift == 0.) ) &
then
integer :: i,j
do j=1,ao_num
do i=1,ao_num
Fock_matrix_ao(i,j) = Fock_matrix_ao_alpha(i,j)
enddo
enddo
else
call mo_to_ao(Fock_matrix_mo,size(Fock_matrix_mo,1), &
Fock_matrix_ao,size(Fock_matrix_ao,1))
endif
endif
END_PROVIDER

View File

@ -51,7 +51,7 @@ END_DOC
! Increment cycle number
iteration_SCF += 1
if(no_oa_or_av_opt)then
if(frozen_orb_scf)then
call initialize_mo_coef_begin_iteration
endif
@ -85,8 +85,8 @@ END_DOC
endif
MO_coef = eigenvectors_Fock_matrix_MO
if(no_oa_or_av_opt)then
call reorder_active_orb
if(frozen_orb_scf)then
call reorder_core_orb
call initialize_mo_coef_begin_iteration
endif
@ -119,8 +119,8 @@ END_DOC
level_shift = level_shift * 2.0d0
endif
mo_coef(1:ao_num,1:mo_num) = eigenvectors_Fock_matrix_MO(1:ao_num,1:mo_num)
if(no_oa_or_av_opt)then
call reorder_active_orb
if(frozen_orb_scf)then
call reorder_core_orb
call initialize_mo_coef_begin_iteration
endif
TOUCH mo_coef level_shift
@ -159,7 +159,7 @@ END_DOC
'====','================','================','================'
write(6,*)
if(.not.no_oa_or_av_opt)then
if(.not.frozen_orb_scf)then
call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label,1,.true.)
call save_mos
endif