subroutine d_oacc_mlt_v(x, y, info) use psb_d_oacc_vect_mod, psb_protect_name => d_oacc_mlt_v implicit none class(psb_d_base_vect_type), intent(inout) :: x class(psb_d_vect_oacc), intent(inout) :: y integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: i, n info = 0 !!$ n = min(x%get_nrows(), y%get_nrows()) !!$ select type(xx => x) !!$ type is (psb_d_base_vect_type) !!$ if (y%is_dev()) call y%sync() !!$ !$acc parallel loop !!$ do i = 1, n !!$ y%v(i) = y%v(i) * xx%v(i) !!$ end do !!$ call y%set_host() !!$ class default !!$ if (xx%is_dev()) call xx%sync() !!$ if (y%is_dev()) call y%sync() !!$ !$acc parallel loop !!$ do i = 1, n !!$ y%v(i) = y%v(i) * xx%v(i) !!$ end do !!$ call y%set_host() !!$ end select end subroutine d_oacc_mlt_v