|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "datatypes.h" |
|
|
|
|
|
int drotm_(integer *n, doublereal *dx, integer *incx, |
|
|
doublereal *dy, integer *incy, doublereal *dparam) |
|
|
{ |
|
|
|
|
|
|
|
|
static doublereal zero = 0.; |
|
|
static doublereal two = 2.; |
|
|
|
|
|
|
|
|
integer i__1, i__2; |
|
|
|
|
|
|
|
|
integer i__; |
|
|
doublereal w, z__; |
|
|
integer kx, ky; |
|
|
doublereal dh11, dh12, dh21, dh22, dflag; |
|
|
integer nsteps; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--dparam; |
|
|
--dy; |
|
|
--dx; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dflag = dparam[1]; |
|
|
if (*n <= 0 || dflag + two == zero) { |
|
|
goto L140; |
|
|
} |
|
|
if (! (*incx == *incy && *incx > 0)) { |
|
|
goto L70; |
|
|
} |
|
|
|
|
|
nsteps = *n * *incx; |
|
|
if (dflag < 0.) { |
|
|
goto L50; |
|
|
} else if (dflag == 0) { |
|
|
goto L10; |
|
|
} else { |
|
|
goto L30; |
|
|
} |
|
|
L10: |
|
|
dh12 = dparam[4]; |
|
|
dh21 = dparam[3]; |
|
|
i__1 = nsteps; |
|
|
i__2 = *incx; |
|
|
for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) { |
|
|
w = dx[i__]; |
|
|
z__ = dy[i__]; |
|
|
dx[i__] = w + z__ * dh12; |
|
|
dy[i__] = w * dh21 + z__; |
|
|
|
|
|
} |
|
|
goto L140; |
|
|
L30: |
|
|
dh11 = dparam[2]; |
|
|
dh22 = dparam[5]; |
|
|
i__2 = nsteps; |
|
|
i__1 = *incx; |
|
|
for (i__ = 1; i__1 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__1) { |
|
|
w = dx[i__]; |
|
|
z__ = dy[i__]; |
|
|
dx[i__] = w * dh11 + z__; |
|
|
dy[i__] = -w + dh22 * z__; |
|
|
|
|
|
} |
|
|
goto L140; |
|
|
L50: |
|
|
dh11 = dparam[2]; |
|
|
dh12 = dparam[4]; |
|
|
dh21 = dparam[3]; |
|
|
dh22 = dparam[5]; |
|
|
i__1 = nsteps; |
|
|
i__2 = *incx; |
|
|
for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) { |
|
|
w = dx[i__]; |
|
|
z__ = dy[i__]; |
|
|
dx[i__] = w * dh11 + z__ * dh12; |
|
|
dy[i__] = w * dh21 + z__ * dh22; |
|
|
|
|
|
} |
|
|
goto L140; |
|
|
L70: |
|
|
kx = 1; |
|
|
ky = 1; |
|
|
if (*incx < 0) { |
|
|
kx = (1 - *n) * *incx + 1; |
|
|
} |
|
|
if (*incy < 0) { |
|
|
ky = (1 - *n) * *incy + 1; |
|
|
} |
|
|
|
|
|
if (dflag < 0.) { |
|
|
goto L120; |
|
|
} else if (dflag == 0) { |
|
|
goto L80; |
|
|
} else { |
|
|
goto L100; |
|
|
} |
|
|
L80: |
|
|
dh12 = dparam[4]; |
|
|
dh21 = dparam[3]; |
|
|
i__2 = *n; |
|
|
for (i__ = 1; i__ <= i__2; ++i__) { |
|
|
w = dx[kx]; |
|
|
z__ = dy[ky]; |
|
|
dx[kx] = w + z__ * dh12; |
|
|
dy[ky] = w * dh21 + z__; |
|
|
kx += *incx; |
|
|
ky += *incy; |
|
|
|
|
|
} |
|
|
goto L140; |
|
|
L100: |
|
|
dh11 = dparam[2]; |
|
|
dh22 = dparam[5]; |
|
|
i__2 = *n; |
|
|
for (i__ = 1; i__ <= i__2; ++i__) { |
|
|
w = dx[kx]; |
|
|
z__ = dy[ky]; |
|
|
dx[kx] = w * dh11 + z__; |
|
|
dy[ky] = -w + dh22 * z__; |
|
|
kx += *incx; |
|
|
ky += *incy; |
|
|
|
|
|
} |
|
|
goto L140; |
|
|
L120: |
|
|
dh11 = dparam[2]; |
|
|
dh12 = dparam[4]; |
|
|
dh21 = dparam[3]; |
|
|
dh22 = dparam[5]; |
|
|
i__2 = *n; |
|
|
for (i__ = 1; i__ <= i__2; ++i__) { |
|
|
w = dx[kx]; |
|
|
z__ = dy[ky]; |
|
|
dx[kx] = w * dh11 + z__ * dh12; |
|
|
dy[ky] = w * dh21 + z__ * dh22; |
|
|
kx += *incx; |
|
|
ky += *incy; |
|
|
|
|
|
} |
|
|
L140: |
|
|
return 0; |
|
|
} |
|
|
|
|
|
|