mirror of
https://gitlab.com/scemama/qp_plugins_scemama.git
synced 2024-12-22 20:34:05 +01:00
78 lines
2.0 KiB
Fortran
78 lines
2.0 KiB
Fortran
program cisd
|
|
implicit none
|
|
BEGIN_DOC
|
|
! Multi-Reference Configuration Interaction with Single and Double excitations.
|
|
!
|
|
! This program takes a reference wave function as input and
|
|
! and performs all single and double excitations on top of it, disregarding
|
|
! spatial symmetry and compute the "n_states" lowest eigenstates of that CI
|
|
! matrix (see :option:`determinants n_states`).
|
|
!
|
|
END_DOC
|
|
PROVIDE N_states
|
|
read_wf = .True.
|
|
SOFT_TOUCH read_wf
|
|
call run
|
|
end
|
|
|
|
subroutine run
|
|
implicit none
|
|
integer :: i,k
|
|
double precision :: cisdq(N_states), delta_e
|
|
double precision,external :: diag_h_mat_elem
|
|
|
|
if(do_singles)then
|
|
if(do_doubles)then
|
|
call H_apply_cisd
|
|
else
|
|
call H_apply_cis
|
|
endif
|
|
else
|
|
if(do_doubles)then
|
|
call H_apply_cid
|
|
else
|
|
stop "do_singles and do_doubles are both False"
|
|
endif
|
|
endif
|
|
|
|
psi_coef = ci_eigenvectors
|
|
SOFT_TOUCH psi_coef
|
|
call save_wavefunction
|
|
call ezfio_set_general_mrci_energy(CI_energy)
|
|
|
|
do i = 1,N_states
|
|
k = maxloc(dabs(psi_coef_sorted(1:N_det,i)),dim=1)
|
|
delta_E = CI_electronic_energy(i) - diag_h_mat_elem(psi_det_sorted(1,1,k),N_int)
|
|
cisdq(i) = CI_energy(i) + delta_E * (1.d0 - psi_coef_sorted(k,i)**2)
|
|
enddo
|
|
print *, 'N_det = ', N_det
|
|
print*,''
|
|
print*,'******************************'
|
|
print *, 'MR-CI Energies'
|
|
do i = 1,N_states
|
|
print *, i, CI_energy(i)
|
|
enddo
|
|
print*,''
|
|
print*,'******************************'
|
|
print *, 'MR-CI+Q Energies'
|
|
do i = 1,N_states
|
|
print *, i, cisdq(i)
|
|
enddo
|
|
if (N_states > 1) then
|
|
print*,''
|
|
print*,'******************************'
|
|
print*,'Excitation energies (au) (CISD+Q)'
|
|
do i = 2, N_states
|
|
print*, i ,CI_energy(i) - CI_energy(1), cisdq(i) - cisdq(1)
|
|
enddo
|
|
print*,''
|
|
print*,'******************************'
|
|
print*,'Excitation energies (eV) (CISD+Q)'
|
|
do i = 2, N_states
|
|
print*, i ,(CI_energy(i) - CI_energy(1))/0.0367502d0, &
|
|
(cisdq(i) - cisdq(1)) / 0.0367502d0
|
|
enddo
|
|
endif
|
|
|
|
end
|