SUBROUTINE DCOPY( N, DX, INCX, DY, INCY ) **************************************************************************** * * * DATA PARALLEL BLAS based on MPL * * * * Version 1.0 1/9-92 , * * For MasPar MP-1 computers * * * * para//ab, University of Bergen, NORWAY * * * * These programs must be called using F90 style array syntax. * * Note that the F77 style calling sequence has been retained * * in this version for compatibility reasons, be aware that * * parameters related to the array dimensions and shape therefore may * * be redundant and without any influence. * * The calling sequence may be changed in a future version. * * Please report any BUGs, ideas for improvement or other * * comments to * * adm@parallab.uib.no * * * * Future versions may then reflect your suggestions. * * The most current version of this software is available * * from netlib@nac.no , send the message `send index from maspar' * * * * REVISIONS: * * * **************************************************************************** implicit none * * copies a vector, x, to a vector, y. * uses unrolled loops for increments equal to 1. * jack dongarra, linpack, 3/11/78. * * .. Scalar Arguments .. INTEGER INCX, INCY, N * .. * .. Array Arguments .. DOUBLE PRECISION, array(:) :: DX, DY * .. * .. Local Scalars .. INTEGER m,ix,iy,jx,jy * .. cmpf mpl mpl_dcopy cmpf ondpu dx,dy * .. Executable Statements .. * IF( N.LE.0 ) return * * code for both increments equal to 1 * * IF( INCX.EQ.1 .AND. INCY.EQ.1 ) then cpb dy(1:n) = dx(1:n) call mpl_dcopy(n,dx,dy) else * * code for unequal increments or equal increments * not equal to 1 * m = n - 1 ix = 1 iy = 1 jx = 1 + m * incx jy = 1 + m * incy * if ( incx .lt. 0 ) then ix = 1 - m * incx jx = 1 endif * if ( incy .lt. 0 ) then iy = 1 - m * incy jy = 1 endif * if ( incx .eq. 0) then dy(iy:jy:incy) = dx(1) RETURN end if if (incy .eq. 0) then dy(1) = dx(jx) RETURN end if cpb dy(iy:jy:incy) = dx(ix:jx:incx) call mpl_dcopy(n,dx(ix:jx:incx),dy(iy:jy:incy)) endif * RETURN * * end of DCOPY . * END