From 6cad30269f44890ba3506009098475b7caa5f409 Mon Sep 17 00:00:00 2001 From: Michel Caffarel Date: Wed, 25 Nov 2015 18:04:05 +0100 Subject: [PATCH] Guess based on the overlap matrix of AOs to remove linear dependencies --- src/MOGuess/guess_overlap.irp.f | 14 ++++++++++++++ src/MOGuess/truncate_mos.irp.f | 10 ++++++++++ src/MO_Basis/utils.irp.f | 23 +++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/MOGuess/guess_overlap.irp.f create mode 100644 src/MOGuess/truncate_mos.irp.f diff --git a/src/MOGuess/guess_overlap.irp.f b/src/MOGuess/guess_overlap.irp.f new file mode 100644 index 00000000..768724c6 --- /dev/null +++ b/src/MOGuess/guess_overlap.irp.f @@ -0,0 +1,14 @@ +program guess_mimi + BEGIN_DOC +! Produce `H_core` MO orbital + END_DOC + implicit none + character*(64) :: label + mo_coef = ao_ortho_lowdin_coef + TOUCH mo_coef + label = "Guess" + call mo_as_eigvectors_of_mo_matrix(-ao_overlap, & + size(ao_overlap,1), & + size(ao_overlap,2),label) + call save_mos +end diff --git a/src/MOGuess/truncate_mos.irp.f b/src/MOGuess/truncate_mos.irp.f new file mode 100644 index 00000000..29756055 --- /dev/null +++ b/src/MOGuess/truncate_mos.irp.f @@ -0,0 +1,10 @@ +program prog_truncate_mo + BEGIN_DOC +! Truncate MO set + END_DOC + implicit none + integer :: n + write(*,*) 'Number of MOs to keep' + read (*,*) n + call save_mos_truncated(n) +end diff --git a/src/MO_Basis/utils.irp.f b/src/MO_Basis/utils.irp.f index 7cc94c6d..6f96ab93 100644 --- a/src/MO_Basis/utils.irp.f +++ b/src/MO_Basis/utils.irp.f @@ -21,6 +21,29 @@ subroutine save_mos end +subroutine save_mos_truncated(n) + implicit none + double precision, allocatable :: buffer(:,:) + integer :: i,j,n + + call system('$QP_ROOT/scripts/save_current_mos.sh '//trim(ezfio_filename)) + + call ezfio_set_mo_basis_mo_tot_num(n) + call ezfio_set_mo_basis_mo_label(mo_label) + call ezfio_set_mo_basis_ao_md5(ao_md5) + allocate ( buffer(ao_num,n) ) + buffer = 0.d0 + do j = 1, n + do i = 1, ao_num + buffer(i,j) = mo_coef(i,j) + enddo + enddo + call ezfio_set_mo_basis_mo_coef(buffer) + call ezfio_set_mo_basis_mo_occ(mo_occ) + deallocate (buffer) + +end + subroutine mo_as_eigvectors_of_mo_matrix(matrix,n,m,label) implicit none integer,intent(in) :: n,m