pure subroutine pic_dgemv(A, x, y, trans_a, alpha, beta)
!! interface for double precision matrix-vector multiplication
real(dp), intent(in) :: A(:, :)
real(dp), intent(in) :: x(:)
real(dp), intent(inout) :: y(:)
character(len=1), intent(in), optional :: trans_a
real(dp), intent(in), optional :: alpha
real(dp), intent(in), optional :: beta
real(dp) :: l_alpha, l_beta
character(len=1) :: l_trans_a
integer(default_int) :: incx, incy, m, n, lda
if (present(alpha)) then
l_alpha = alpha
else
l_alpha = 1.0_sp
end if
if (present(beta)) then
l_beta = beta
else
l_beta = 0.0_sp
end if
if (present(trans_a)) then
l_trans_a = trans_a
else
l_trans_a = "n"
end if
incx = 1
incy = 1
lda = max(1, size(A, 1))
m = size(A, 1)
n = size(A, 2)
call blas_gemv(l_trans_a, m, n, l_alpha, A, lda, x, incx, l_beta, y, incy)
end subroutine pic_dgemv