CXML
scopy, dcopy, ccopy, zcopy
FORMAT
{S,D,C,Z}COPY (n, x, incx, y, incy)
Arguments
n integer*4
On entry, the number of elements in the vector x.
On exit, n is unchanged.
x real*4 | real*8 | complex*8 | complex*16
On entry, a one-dimensional array X of length at least
(1+(n-1)*|incx|), containing the elements of the vector
x.
On exit, x is unchanged.
incx integer*4
On entry, the increment for the array X.
If incx >= 0, vector x is stored forward in the array,
so that x(i) is stored in location X(1+(i-1)*incx).
If incx < 0, vector x is stored backward in the array,
so that x(i) is stored in location X(1+(n-i)*|incx|).
On exit, incx is unchanged.
y real*4 | real*8 | complex*8 | complex*16
On entry, a one-dimensional array Y of length at least
(1+(n-1)*|incy|).
On exit, if n<=0, y is unchanged. If n > 0, y is
overwritten; y(i) is replaced by x(i).
incy integer*4
On entry, the increment for the array Y.
If incy >= 0, vector y is stored forward in the array,
so that y(i) is stored in location Y(1+(i-1)*incy).
If incy < 0, vector y is stored backward in the array,
so that y(i) is stored in location Y(1+(n-i)*|incy|).
On exit, incy is unchanged.
Description
The _COPY subprograms copy the elements of the vector x to the vector y,
performing the following operation: y(i) = x(i)
If incx = 0, each y(i) is set to x(1). Therefore, you can use incx = 0 to
initialize all elements to a constant.
If incy = 0, the computation is a time-consuming way of setting y(1) =
x(n), the last referenced element of the vector x.
If incy = -incx, the vector x is stored in reverse order in y. In this
case, the call format is as follows:
CALL SCOPY (N,X,INCX,Y,-INCX)
If any element of x shares a memory location with an element of y, the
results are unpredictable, except for the following special case. It is
possible to move the contents of a vector up or down within itself and not
cause unpredictable results even though the same memory location is shared
between input and output. To do this when i > j, call the subroutine with
incx = incy > 0 as follows:
CALL SCOPY (N,X(I),INCX,X(J),INCX)
The call to SCOPY moves elements of the array X x(i),x(i+1*incx),
...,x(i+(n-1)*incx) to new elements of the array X x(j),x(j+1*incx), ...,
x(j+(n-1)*incx). If i < j, specify a negative value for incx and incy in
the call to the subroutine, as follows. The parts that do not overlap are
unchanged.
CALL SCOPY (N,X(I),-INCX,X(J),-INCX)
Examples
INTEGER*4 N, INCX, INCY
REAL*4 X(20), Y(20)
INCX = 1
INCY = 1
N = 20
CALL SCOPY(N,X,INCX,Y,INCY)
The preceding FORTRAN code copies a vector x to a vector y.
CALL SCOPY(N,X,-2,X(3),-2))
The preceding call moves the contents of X(1),X(3),X(5),
... , X(2N-1) to X(3),X(5),
... , X(2N+1) and leaves the vector x unchanged.
CALL SCOPY(99,X(2),1,X,1))
The preceding call moves the contents of X(2),X(3),
... , X(100) to X(1),X(2),
... , X(99) and leaves x(100) unchanged.
CALL SCOPY(N,X,1,Y,-1))
The preceding call moves the contents of X(1),X(2),X(3),
... , X(N) to Y(N),Y(N-1),
... , Y.
CXML Home Page Index of CXML Routines