ddot Function

public function ddot(n, dx, incx, dy, incy)

dot product of two vectors

Arguments

Type IntentOptional Attributes Name
integer :: n
real(kind=wp) :: dx(*)
integer :: incx
real(kind=wp) :: dy(*)
integer :: incy

Return Value real(kind=wp)


Called by

proc~~ddot~~CalledByGraph proc~ddot lsqpblas_module::ddot proc~acheck lsqr_module::lsqr_solver%acheck proc~acheck->proc~ddot

Source Code

    real(wp) function ddot(n,dx,incx,dy,incy)

    integer incx,incy,n
    real(wp) dx(*),dy(*)

    real(wp) dtemp
    integer i,ix,iy,m,mp1

    ddot = zero
    dtemp = zero
    if (n<=0) return
    if (incx==1 .and. incy==1) then
        ! code for both increments equal to 1
        ! clean-up loop
        m = mod(n,5)
        if (m/=0) then
            do i = 1,m
                dtemp = dtemp + dx(i)*dy(i)
            end do
            if (n<5) then
                ddot=dtemp
                return
            end if
        end if
        mp1 = m + 1
        do i = mp1,n,5
            dtemp = dtemp + dx(i)*dy(i) + dx(i+1)*dy(i+1) + dx(i+2)*dy(i+2) + dx(i+3)*dy(i+3) + dx(i+4)*dy(i+4)
        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
            dtemp = dtemp + dx(ix)*dy(iy)
            ix = ix + incx
            iy = iy + incy
        end do
    end if
    ddot = dtemp

    end function ddot