1
0
mirror of https://gitlab.com/scemama/qp_plugins_scemama.git synced 2024-10-05 15:56:00 +02:00
qp_plugins_scemama/devel/dmc_dress/dressing_vector.irp.f

69 lines
1.7 KiB
FortranFixed
Raw Normal View History

2021-07-28 17:24:03 +02:00
BEGIN_PROVIDER [ double precision, dressing_column_h, (N_det,N_states) ]
&BEGIN_PROVIDER [ double precision, dressing_column_s, (N_det,N_states) ]
implicit none
BEGIN_DOC
! \Delta_{state-specific}. \Psi
2021-07-30 00:57:03 +02:00
! Diagonal element is divided by 2 because Delta = D + D^t
2021-07-28 17:24:03 +02:00
END_DOC
integer :: i,ii,k,j, l
double precision :: f, tmp
2021-07-31 02:41:34 +02:00
double precision, allocatable :: delta(:)
allocate(delta(N_det))
2022-02-04 12:07:03 +01:00
delta (1:N_det) = dmc_delta_h(1:N_det) + dmc_delta_htc(1:N_det)
2021-07-31 02:41:34 +02:00
call dset_order(delta,psi_bilinear_matrix_order_reverse,N_det)
2021-07-28 17:24:03 +02:00
dressing_column_h(:,:) = 0.d0
dressing_column_s(:,:) = 0.d0
l = dressed_column_idx(1)
do j = 1, n_det
2021-07-31 01:17:07 +02:00
if (j == l) cycle
2021-07-31 02:41:34 +02:00
dressing_column_h(j,1) = delta(j)
dressing_column_h(l,1) -= psi_coef(j,1) * delta(j) / psi_coef(l,1)
2021-07-28 17:24:03 +02:00
enddo
2021-07-31 02:41:34 +02:00
dressing_column_h(l,1) += delta(l)
2021-07-31 01:17:07 +02:00
dressing_column_h(l,1) *= 0.5d0
2021-07-28 17:24:03 +02:00
END_PROVIDER
2022-03-11 15:49:43 +01:00
BEGIN_PROVIDER [ double precision, dmc_delta_htc , (n_det) ]
implicit none
BEGIN_DOC
! Dressing matrix obtained from H_TC
END_DOC
logical :: has
PROVIDE ezfio_filename
if (mpi_master) then
if (size(dmc_delta_htc) == 0) return
call ezfio_has_dmc_dress_dmc_delta_htc(has)
if (has) then
write(6,'(A)') '.. >>>>> [ IO READ: dmc_delta_htc ] <<<<< ..'
call ezfio_get_dmc_dress_dmc_delta_htc(dmc_delta_htc)
else
dmc_delta_htc(:) = 0.d0
endif
endif
IRP_IF MPI_DEBUG
print *, irp_here, mpi_rank
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
IRP_ENDIF
IRP_IF MPI
include 'mpif.h'
integer :: ierr
call MPI_BCAST( dmc_delta_htc, (n_det), MPI_DOUBLE_PRECISION, 0, MPI_COMM_WORLD, ierr)
if (ierr /= MPI_SUCCESS) then
stop 'Unable to read dmc_delta_htc with MPI'
endif
IRP_ENDIF
call write_time(6)
END_PROVIDER