type_crs_gemv Subroutine

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

Arguments

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

Called by

proc~~type_crs_gemv~~CalledByGraph proc~type_crs_gemv type_crs_gemv interface~gemv gemv interface~gemv->proc~type_crs_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 type_crs_gemv(alpha, A, x, beta, y)
        ! y := alpha*A*x + beta*y
        implicit none
        real(real64), intent(in) :: alpha
        type(type_crs), intent(in) :: A
        real(real64), intent(in) :: x(:)
        real(real64), intent(in) :: beta
        real(real64), intent(inout) :: y(:)

        integer(int32) :: i, j, is, ie
        real(real64) :: sum

        !$omp parallel do private(i, j, is, ie, sum)
        do i = 1, A%num_row
            sum = 0.0d0
            is = A%ptr(i)
            ie = A%ptr(i + 1) - 1
            do j = is, ie
                sum = sum + A%val(j) * x(A%ind(j))
            end do
            y(i) = alpha * sum + beta * y(i)
        end do
        !$omp end parallel do

    end subroutine type_crs_gemv