mult_ham_vector_real_ss Subroutine

public subroutine mult_ham_vector_real_ss(input_vector, output_vector, full_vector, sizes, displs, run)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: input_vector(:)
real(kind=dp), intent(out) :: output_vector(:)
real(kind=dp), intent(out) :: full_vector(:)
integer(kind=MPIArg), intent(in) :: sizes(0:)
integer(kind=MPIArg), intent(in) :: displs(0:)
integer, intent(in) :: run

Contents


Source Code

    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