multiply_matrix_vector Subroutine

private subroutine multiply_matrix_vector(alpha, A, x, beta, y)

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in) :: alpha
real(kind=real64), intent(in) :: A(:,:)
real(kind=real64), intent(in) :: x(:)
real(kind=real64), intent(in) :: beta
real(kind=real64), intent(inout) :: y(:)

Called by

proc~~multiply_matrix_vector~~CalledByGraph proc~multiply_matrix_vector multiply_matrix_vector proc~type_dense_gemv type_dense_gemv proc~type_dense_gemv->proc~multiply_matrix_vector interface~gemv gemv interface~gemv->proc~type_dense_gemv proc~process_element_hydraulic_linear_1 process_element_hydraulic_linear_1 proc~process_element_hydraulic_linear_1->interface~gemv proc~hydraulic_assemble_system_linear_1 hydraulic_assemble_system_linear_1 proc~hydraulic_assemble_system_linear_1->proc~process_element_hydraulic_linear_1 proc~hydraulic_assemble_system_linear_1_parallel hydraulic_assemble_system_linear_1_parallel proc~hydraulic_assemble_system_linear_1_parallel->proc~process_element_hydraulic_linear_1

Source Code

    subroutine multiply_matrix_vector(alpha, A, x, beta, y)
        implicit none
        real(real64), intent(in) :: alpha
        real(real64), intent(in) :: A(:, :)
        real(real64), intent(in) :: x(:)
        real(real64), intent(in) :: beta
        real(real64), intent(inout) :: y(:)

        integer(int32) :: i

#ifdef _MKL
        call dgemv('N', size(A, 1), size(A, 2), alpha, A, size(A, 1), x, 1, beta, y, 1)
#else

        !$omp parallel do private(i)
        do i = 1, size(A, 1)
            y(i) = alpha * dot_product(A(i, :), x) + beta * y(i)
        end do
        !$omp end parallel do
#endif

    end subroutine multiply_matrix_vector