From 314e98a0d18c25596ec94451837c20f40e2480f8 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Wed, 9 Jan 2019 09:00:56 -0600 Subject: [PATCH 1/2] Little refractoring (#88) * Fix header * little refractoring * Follow good bash rules * Update ifort.cfg * One liners --- configure | 2 +- scripts/qp_bitmasks.py | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) mode change 100644 => 100755 scripts/qp_bitmasks.py diff --git a/configure b/configure index 62f58c48..9aec9834 100755 --- a/configure +++ b/configure @@ -3,7 +3,7 @@ # Quantum Package configuration script # -export QP_ROOT="$( cd "$(dirname "$0")" ; pwd -P )" +export QP_ROOT="$( cd "$(dirname "$0")" ; pwd --physical )" echo "QP_ROOT="$QP_ROOT diff --git a/scripts/qp_bitmasks.py b/scripts/qp_bitmasks.py old mode 100644 new mode 100755 index ff97edd3..223c32ba --- a/scripts/qp_bitmasks.py +++ b/scripts/qp_bitmasks.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python2 +#!/usr/bin/env python2 BIT_KIND_SIZE=64 @@ -24,7 +24,7 @@ def int_to_string(s): """ assert type(s) in (int, long) assert s>=0 - return str(s) if s in (0,1) else int_to_string(s>>1) + str(s&1) + return '{s:0b}'.format(s=s) def string_to_bitmask(s,bit_kind_size=BIT_KIND_SIZE): @@ -63,15 +63,9 @@ def int_to_bitmask(s,bit_kind_size=BIT_KIND_SIZE): >>> """ assert type(s) in (int, long) - if s>=0: - s = int_to_string(s) - result = string_to_bitmask( s, bit_kind_size ) - else: - s = int_to_string(-s-1) - result = string_to_bitmask( s, bit_kind_size ) - result = [ x.replace('1','.').replace('0','1').replace('.','0') for x in result ] - return result - + if s < 0: + s = s + (1 << bit_kind_size) + return ['{s:0{width}b}'.format(s=s,width=bit_kind_size)] class BitMask(object): @@ -102,9 +96,9 @@ class BitMask(object): self.bit_kind_size = bit_kind_size self._data_int = l - def get_N_int(self): + @property + def N_int(self): return len(self._data_int) - N_int = property(fget=get_N_int) def __getitem__(self,i): return self._data_int[i] @@ -126,7 +120,12 @@ class BitMask(object): result += int_to_bitmask(i,bit_kind_size=self.bit_kind_size) return str(result) - +def excitation_degree(l_a,l_b): + ''' + excitation_degree([895],[959]) + >> 1 + ''' + return sum(bin(a ^ b).count("1") for a,b in zip(l_a,l_b) ) // 2 if __name__ == '__main__': import doctest From 83061d4779d22bd1b7e6340f6cd129202a618728 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 9 Jan 2019 16:01:56 +0100 Subject: [PATCH 2/2] Toto (#89) * added frozen_orb_scd * changed save_singles to compute_singles --- src/davidson/u0_h_u0.irp.f | 2 +- 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 ++++----- 7 files changed, 66 insertions(+), 57 deletions(-) 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, & 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 f7da8603..90ee10ee 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