1 /* ./src_f77/zdrot.f -- translated by f2c (version 20030320).
2    You must link the resulting object file with the libraries:
3 	-lf2c -lm   (in that order)
4 */
5 
6 #include <punc/vf2c.h>
7 
zdrot_(integer * n,doublecomplex * zx,integer * incx,doublecomplex * zy,integer * incy,doublereal * c__,doublereal * s)8 /* Subroutine */ int zdrot_(integer *n, doublecomplex *zx, integer *incx,
9 	doublecomplex *zy, integer *incy, doublereal *c__, doublereal *s)
10 {
11     /* System generated locals */
12     integer i__1, i__2, i__3, i__4;
13     doublecomplex z__1, z__2, z__3;
14 
15     /* Local variables */
16     static integer i__, ix, iy;
17     static doublecomplex ztemp;
18 
19 
20 /*     applies a plane rotation, where the cos and sin (c and s) are */
21 /*     double precision and the vectors zx and zy are double complex. */
22 /*     jack dongarra, linpack, 3/11/78. */
23 
24 
25     /* Parameter adjustments */
26     --zy;
27     --zx;
28 
29     /* Function Body */
30     if (*n <= 0) {
31 	return 0;
32     }
33     if (*incx == 1 && *incy == 1) {
34 	goto L20;
35     }
36 
37 /*       code for unequal increments or equal increments not equal */
38 /*         to 1 */
39 
40     ix = 1;
41     iy = 1;
42     if (*incx < 0) {
43 	ix = (-(*n) + 1) * *incx + 1;
44     }
45     if (*incy < 0) {
46 	iy = (-(*n) + 1) * *incy + 1;
47     }
48     i__1 = *n;
49     for (i__ = 1; i__ <= i__1; ++i__) {
50 	i__2 = ix;
51 	z__2.r = *c__ * zx[i__2].r, z__2.i = *c__ * zx[i__2].i;
52 	i__3 = iy;
53 	z__3.r = *s * zy[i__3].r, z__3.i = *s * zy[i__3].i;
54 	z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
55 	ztemp.r = z__1.r, ztemp.i = z__1.i;
56 	i__2 = iy;
57 	i__3 = iy;
58 	z__2.r = *c__ * zy[i__3].r, z__2.i = *c__ * zy[i__3].i;
59 	i__4 = ix;
60 	z__3.r = *s * zx[i__4].r, z__3.i = *s * zx[i__4].i;
61 	z__1.r = z__2.r - z__3.r, z__1.i = z__2.i - z__3.i;
62 	zy[i__2].r = z__1.r, zy[i__2].i = z__1.i;
63 	i__2 = ix;
64 	zx[i__2].r = ztemp.r, zx[i__2].i = ztemp.i;
65 	ix += *incx;
66 	iy += *incy;
67 /* L10: */
68     }
69     return 0;
70 
71 /*       code for both increments equal to 1 */
72 
73 L20:
74     i__1 = *n;
75     for (i__ = 1; i__ <= i__1; ++i__) {
76 	i__2 = i__;
77 	z__2.r = *c__ * zx[i__2].r, z__2.i = *c__ * zx[i__2].i;
78 	i__3 = i__;
79 	z__3.r = *s * zy[i__3].r, z__3.i = *s * zy[i__3].i;
80 	z__1.r = z__2.r + z__3.r, z__1.i = z__2.i + z__3.i;
81 	ztemp.r = z__1.r, ztemp.i = z__1.i;
82 	i__2 = i__;
83 	i__3 = i__;
84 	z__2.r = *c__ * zy[i__3].r, z__2.i = *c__ * zy[i__3].i;
85 	i__4 = i__;
86 	z__3.r = *s * zx[i__4].r, z__3.i = *s * zx[i__4].i;
87 	z__1.r = z__2.r - z__3.r, z__1.i = z__2.i - z__3.i;
88 	zy[i__2].r = z__1.r, zy[i__2].i = z__1.i;
89 	i__2 = i__;
90 	zx[i__2].r = ztemp.r, zx[i__2].i = ztemp.i;
91 /* L30: */
92     }
93     return 0;
94 } /* zdrot_ */
95 
96