subroutine mv(m,nc,irp,ja,val,x,ldx,y,ldy,acc) use iso_fortran_env implicit none integer, parameter :: ipk_ = int32 integer, parameter :: spk_ = real32 complex(spk_), parameter :: czero=(0.0_spk_,0.0_spk_) integer(ipk_), intent(in) :: m,ldx,ldy,nc,irp(*),ja(*) complex(spk_), intent(in) :: x(ldx,*),val(*) complex(spk_), intent(inout) :: y(ldy,*) complex(spk_), intent(inout) :: acc(*) integer(ipk_) :: i,j,k, ir, jc do i=1,m acc(1:nc) = czero do j=irp(i), irp(i+1)-1 acc(1:nc) = acc(1:nc) + val(j) * x(ja(j),1:nc) enddo y(i,1:nc) = -acc(1:nc) end do end subroutine mv