dcopy Subroutine

public subroutine dcopy(n, dx, incx, dy, incy)

copies a vector, x, to a vector, y.

Arguments

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

Called by

proc~~dcopy~~CalledByGraph proc~dcopy lsqpblas_module::dcopy proc~acheck lsqr_module::lsqr_solver%acheck proc~acheck->proc~dcopy proc~lsqr lsqr_module::lsqr_solver%LSQR proc~lsqr->proc~dcopy proc~xcheck lsqr_module::lsqr_solver%xcheck proc~xcheck->proc~dcopy proc~solve_ez lsqr_module::lsqr_solver_ez%solve_ez proc~solve_ez->proc~lsqr

Source Code

    subroutine dcopy(n,dx,incx,dy,incy)

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

    integer i,ix,iy,m,mp1

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

    end subroutine dcopy