mirror of
https://gitlab.com/scemama/qp_plugins_scemama.git
synced 2024-12-22 20:34:05 +01:00
46 lines
1.2 KiB
Fortran
46 lines
1.2 KiB
Fortran
|
|
|
|
subroutine davidson_diag_sx_mat(N_st, u_in, energies)
|
|
implicit none
|
|
integer, intent(in) :: N_st
|
|
double precision, intent(out) :: u_in(nMonoEx+1,n_states_diag), energies(N_st)
|
|
integer :: i,j,N_st_tmp, dim_in, sze, N_st_diag_in
|
|
integer, allocatable :: list_guess(:)
|
|
double precision, allocatable :: H_jj(:)
|
|
logical :: converged
|
|
N_st_diag_in = n_states_diag
|
|
provide SXmatrix
|
|
sze = nMonoEx+1
|
|
dim_in = sze
|
|
allocate(H_jj(sze), list_guess(sze))
|
|
H_jj(1) = 0.d0
|
|
N_st_tmp = 1
|
|
list_guess(1) = 1
|
|
do j = 2, nMonoEx+1
|
|
H_jj(j) = SXmatrix(j,j)
|
|
if(H_jj(j).lt.0.d0)then
|
|
list_guess(N_st_tmp) = j
|
|
N_st_tmp += 1
|
|
endif
|
|
enddo
|
|
if(N_st_tmp .ne. N_st)then
|
|
print*,'Pb in davidson_diag_sx_mat'
|
|
print*,'N_st_tmp .ne. N_st'
|
|
print*,N_st_tmp, N_st
|
|
stop
|
|
endif
|
|
print*,'Number of possibly interesting states = ',N_st
|
|
print*,'Corresponding diagonal elements of the SX matrix '
|
|
u_in = 0.d0
|
|
do i = 1, min(N_st, N_st_diag_in)
|
|
! do i = 1, N_st
|
|
j = list_guess(i)
|
|
print*,'i,j',i,j
|
|
print*,'SX(i,i) = ',H_jj(j)
|
|
u_in(j,i) = 1.d0
|
|
enddo
|
|
call davidson_general(u_in,H_jj,energies,dim_in,sze,N_st,N_st_diag_in,converged,SXmatrix)
|
|
print*,'energies = ',energies
|
|
|
|
end
|