subroutine mult_ham_vector_real_ss(input_vector, output_vector, full_vector, sizes, displs, run)
real(dp), intent(in) :: input_vector(:)
real(dp), intent(out) :: output_vector(:)
real(dp), intent(out) :: full_vector(:)
integer(MPIArg), intent(in) :: sizes(0:), displs(0:)
integer, intent(in) :: run
integer :: i, j, ierr
call MPIBarrier(ierr, tTimeIn=.false.)
call MPIAllGatherV(input_vector, full_vector, sizes, displs)
output_vector = 0.0_dp
associate(rep => cs_replicas(run))
do i = 1, sizes(iProcIndex)
do j = 1, rep%sparse_core_ham(i)%num_elements
output_vector(i) = output_vector(i) + rep%sparse_core_ham(i)%elements(j) * full_vector(rep%sparse_core_ham(i)%positions(j))
end do
end do
end associate
end subroutine mult_ham_vector_real_ss