daxpy Subroutine

public subroutine daxpy(n, da, dx, incx, dy, incy)

constant times a vector plus a vector. uses unrolled loops for increments equal to one.

Author

jack dongarra, linpack, 3/11/78.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: n
real(kind=wp), intent(in) :: da
real(kind=wp), intent(in) :: dx(*)
integer, intent(in) :: incx
real(kind=wp), intent(inout) :: dy(*)
integer, intent(in) :: incy

Called by

proc~~daxpy~~CalledByGraph proc~daxpy dvode_blas_module::daxpy proc~dgbfa dvode_linpack_module::dgbfa proc~dgbfa->proc~daxpy proc~dgbsl dvode_linpack_module::dgbsl proc~dgbsl->proc~daxpy proc~dgefa dvode_linpack_module::dgefa proc~dgefa->proc~daxpy proc~dgesl dvode_linpack_module::dgesl proc~dgesl->proc~daxpy proc~dvjust dvode_module::dvode_t%dvjust proc~dvjust->proc~daxpy proc~dvnlsd dvode_module::dvode_t%dvnlsd proc~dvnlsd->proc~daxpy proc~dvjac dvode_module::dvode_t%dvjac proc~dvnlsd->proc~dvjac proc~dvsol dvode_module::dvode_t%dvsol proc~dvnlsd->proc~dvsol proc~dvstep dvode_module::dvode_t%dvstep proc~dvstep->proc~daxpy proc~dvstep->proc~dvjust proc~dvstep->proc~dvnlsd proc~dvjac->proc~dgbfa proc~dvjac->proc~dgefa proc~dvode dvode_module::dvode_t%dvode proc~dvode->proc~dvstep proc~dvsol->proc~dgbsl proc~dvsol->proc~dgesl

Source Code

      subroutine daxpy(n,da,dx,incx,dy,incy)
      implicit none

      integer,intent(in) :: n
      real(wp),intent(in) :: da
      real(wp),intent(in)  :: dx(*) 
      integer,intent(in)  :: incx  
      real(wp),intent(inout) :: dy(*)
      integer,intent(in)  :: incy

      integer :: i , ix , iy , m , mp1

      if ( n<=0 ) return
      if ( da==zero ) return
      if ( incx==1 .and. incy==1 ) then

        ! code for both increments equal to 1

        ! clean-up loop

         m = mod(n,4)
         if ( m/=0 ) then
            do i = 1 , m
               dy(i) = dy(i) + da*dx(i)
            end do
            if ( n<4 ) return
         end if
         mp1 = m + 1
         do i = mp1 , n , 4
            dy(i) = dy(i) + da*dx(i)
            dy(i+1) = dy(i+1) + da*dx(i+1)
            dy(i+2) = dy(i+2) + da*dx(i+2)
            dy(i+3) = dy(i+3) + da*dx(i+3)
         end do

      else

         ! code for unequal increments or equal increments
         ! not equal to 1

         ix = 1
         iy = 1
         if ( incx<0 ) ix = (-n+1)*incx + 1
         if ( incy<0 ) iy = (-n+1)*incy + 1
         do i = 1 , n
            dy(iy) = dy(iy) + da*dx(ix)
            ix = ix + incx
            iy = iy + incy
         end do

      end if

      end subroutine daxpy