qp2/src/davidson/overlap_states.irp.f

41 lines
887 B
Fortran

! ---
BEGIN_PROVIDER [ double precision, overlap_states, (N_states,N_states) ]
&BEGIN_PROVIDER [ double precision, overlap_states_inv, (N_states,N_states) ]
BEGIN_DOC
!
! S_kl = ck.T x cl
! = psi_coef(:,k).T x psi_coef(:,l)
!
END_DOC
implicit none
integer :: i
double precision :: o_tmp
if(N_states == 1) then
o_tmp = 0.d0
do i = 1, N_det
o_tmp = o_tmp + psi_coef(i,1) * psi_coef(i,1)
enddo
overlap_states (1,1) = o_tmp
overlap_states_inv(1,1) = 1.d0 / o_tmp
else
call dgemm( 'T', 'N', N_states, N_states, N_det, 1.d0 &
, psi_coef, size(psi_coef, 1), psi_coef, size(psi_coef, 1) &
, 0.d0, overlap_states, size(overlap_states, 1) )
call get_inverse(overlap_states, N_states, N_states, overlap_states_inv, N_states)
endif
END_PROVIDER
! ---