mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-10-07 08:35:57 +02:00
125 lines
3.2 KiB
Fortran
125 lines
3.2 KiB
Fortran
program tc_bi_ortho
|
|
|
|
BEGIN_DOC
|
|
!
|
|
! TODO : Reads psi_det in the EZFIO folder and prints out the left- and right-eigenvectors together
|
|
! with the energy. Saves the left-right wave functions at the end.
|
|
!
|
|
END_DOC
|
|
|
|
implicit none
|
|
|
|
PROVIDE N_int
|
|
|
|
my_grid_becke = .True.
|
|
PROVIDE tc_grid1_a tc_grid1_r
|
|
my_n_pt_r_grid = tc_grid1_r
|
|
my_n_pt_a_grid = tc_grid1_a
|
|
touch my_grid_becke my_n_pt_r_grid my_n_pt_a_grid
|
|
|
|
if(tc_integ_type .eq. "numeric") then
|
|
my_extra_grid_becke = .True.
|
|
PROVIDE tc_grid2_a tc_grid2_r
|
|
my_n_pt_r_extra_grid = tc_grid2_r
|
|
my_n_pt_a_extra_grid = tc_grid2_a
|
|
touch my_extra_grid_becke my_n_pt_r_extra_grid my_n_pt_a_extra_grid
|
|
|
|
call write_int(6, my_n_pt_r_extra_grid, 'radial internal grid over')
|
|
call write_int(6, my_n_pt_a_extra_grid, 'angular internal grid over')
|
|
endif
|
|
|
|
read_wf = .True.
|
|
touch read_wf
|
|
|
|
print*, ' nb of states = ', N_states
|
|
print*, ' nb of det = ', N_det
|
|
|
|
call routine_diag()
|
|
call write_tc_energy()
|
|
call save_tc_bi_ortho_wavefunction()
|
|
|
|
end
|
|
|
|
! ---
|
|
|
|
subroutine test()
|
|
|
|
use bitmasks
|
|
implicit none
|
|
integer :: i, j
|
|
double precision :: hmono, htwoe, hthree, htot
|
|
|
|
print*, 'reading the wave function '
|
|
do i = 1, N_det
|
|
call debug_det(psi_det(1,1,i), N_int)
|
|
print*, i, psi_l_coef_bi_ortho(i,1)*psi_r_coef_bi_ortho(i,1)
|
|
print*, i, psi_l_coef_bi_ortho(i,1),psi_r_coef_bi_ortho(i,1)
|
|
enddo
|
|
|
|
end
|
|
|
|
! ---
|
|
|
|
subroutine routine_diag()
|
|
|
|
implicit none
|
|
integer :: i, j, k
|
|
double precision :: dE
|
|
|
|
! provide eigval_right_tc_bi_orth
|
|
! provide overlap_bi_ortho
|
|
! provide htilde_matrix_elmt_bi_ortho
|
|
|
|
if(noL_standard) then
|
|
PROVIDE noL_0e
|
|
PROVIDE noL_1e
|
|
PROVIDE noL_2e
|
|
endif
|
|
|
|
PROVIDE htilde_matrix_elmt_bi_ortho
|
|
return
|
|
|
|
if(N_states .eq. 1) then
|
|
|
|
print*,'eigval_right_tc_bi_orth = ',eigval_right_tc_bi_orth(1)
|
|
print*,'e_tc_left_right = ',e_tc_left_right
|
|
print*,'e_tilde_bi_orth_00 = ',e_tilde_bi_orth_00
|
|
print*,'e_pt2_tc_bi_orth = ',e_pt2_tc_bi_orth
|
|
print*,'e_pt2_tc_bi_orth_single = ',e_pt2_tc_bi_orth_single
|
|
print*,'e_pt2_tc_bi_orth_double = ',e_pt2_tc_bi_orth_double
|
|
print*,'***'
|
|
print*,'e_corr_bi_orth = ',e_corr_bi_orth
|
|
print*,'e_corr_bi_orth_proj = ',e_corr_bi_orth_proj
|
|
print*,'e_corr_bi_orth_proj_abs = ',e_corr_bi_orth_proj_abs
|
|
print*,'e_corr_single_bi_orth = ',e_corr_single_bi_orth
|
|
print*,'e_corr_double_bi_orth = ',e_corr_double_bi_orth
|
|
print*,'e_corr_single_bi_orth_abs = ',e_corr_single_bi_orth_abs
|
|
print*,'e_corr_double_bi_orth_abs = ',e_corr_double_bi_orth_abs
|
|
print*,'Left/right eigenvectors'
|
|
do i = 1,N_det
|
|
write(*,'(I5,X,(100(F12.7,X)))')i,leigvec_tc_bi_orth(i,1),reigvec_tc_bi_orth(i,1),leigvec_tc_bi_orth(i,1)*reigvec_tc_bi_orth(i,1)
|
|
enddo
|
|
|
|
else
|
|
|
|
print*,'eigval_right_tc_bi_orth : '
|
|
do i = 1, N_states
|
|
print*, i, eigval_right_tc_bi_orth(i)
|
|
enddo
|
|
|
|
print*,''
|
|
print*,'******************************************************'
|
|
print*,'TC Excitation energies (au) (eV)'
|
|
do i = 2, N_states
|
|
dE = eigval_right_tc_bi_orth(i) - eigval_right_tc_bi_orth(1)
|
|
print*, i, dE, dE/0.0367502d0
|
|
enddo
|
|
print*,''
|
|
|
|
endif
|
|
|
|
end
|
|
|
|
|
|
|