From b2b73671b4b03dd36eb92917014c91c3d3d796eb Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Mon, 7 Jan 2019 17:34:35 +0100 Subject: [PATCH 1/2] added frozen_orb_scd --- src/mo_basis/track_orb.irp.f | 22 +++++++-------- src/scf_utils/EZFIO.cfg | 4 +-- src/scf_utils/damping_scf.irp.f | 16 +++++------ src/scf_utils/diagonalize_fock.irp.f | 28 +++++++------------ src/scf_utils/fock_matrix.irp.f | 39 ++++++++++++++++++++------- src/scf_utils/roothaan_hall_scf.irp.f | 12 ++++----- 6 files changed, 65 insertions(+), 56 deletions(-) diff --git a/src/mo_basis/track_orb.irp.f b/src/mo_basis/track_orb.irp.f index a0333077..e41d0722 100644 --- a/src/mo_basis/track_orb.irp.f +++ b/src/mo_basis/track_orb.irp.f @@ -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 diff --git a/src/scf_utils/EZFIO.cfg b/src/scf_utils/EZFIO.cfg index 97563d39..4a56a35b 100644 --- a/src/scf_utils/EZFIO.cfg +++ b/src/scf_utils/EZFIO.cfg @@ -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 diff --git a/src/scf_utils/damping_scf.irp.f b/src/scf_utils/damping_scf.irp.f index 6706fb0b..331d8371 100644 --- a/src/scf_utils/damping_scf.irp.f +++ b/src/scf_utils/damping_scf.irp.f @@ -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 diff --git a/src/scf_utils/diagonalize_fock.irp.f b/src/scf_utils/diagonalize_fock.irp.f index d5573d0c..27431ba0 100644 --- a/src/scf_utils/diagonalize_fock.irp.f +++ b/src/scf_utils/diagonalize_fock.irp.f @@ -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 diff --git a/src/scf_utils/fock_matrix.irp.f b/src/scf_utils/fock_matrix.irp.f index 39fa7067..78a33e19 100644 --- a/src/scf_utils/fock_matrix.irp.f +++ b/src/scf_utils/fock_matrix.irp.f @@ -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 diff --git a/src/scf_utils/roothaan_hall_scf.irp.f b/src/scf_utils/roothaan_hall_scf.irp.f index ac7339ca..57f38f3d 100644 --- a/src/scf_utils/roothaan_hall_scf.irp.f +++ b/src/scf_utils/roothaan_hall_scf.irp.f @@ -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 From 2425201c8176af8ce0f3ff9d955a42a388d7aa6d Mon Sep 17 00:00:00 2001 From: Emmanuel Giner Date: Wed, 9 Jan 2019 15:52:36 +0100 Subject: [PATCH 2/2] changed save_singles to compute_singles --- src/davidson/u0_h_u0.irp.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/davidson/u0_h_u0.irp.f b/src/davidson/u0_h_u0.irp.f index 0c7f18c9..3638d5b5 100644 --- a/src/davidson/u0_h_u0.irp.f +++ b/src/davidson/u0_h_u0.irp.f @@ -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, &