xref: /aosp_15_r20/external/eigen/blas/f2c/drotm.c (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li /* drotm.f -- translated by f2c (version 20100827).
2*bf2c3715SXin Li    You must link the resulting object file with libf2c:
3*bf2c3715SXin Li 	on Microsoft Windows system, link with libf2c.lib;
4*bf2c3715SXin Li 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
5*bf2c3715SXin Li 	or, if you install libf2c.a in a standard place, with -lf2c -lm
6*bf2c3715SXin Li 	-- in that order, at the end of the command line, as in
7*bf2c3715SXin Li 		cc *.o -lf2c -lm
8*bf2c3715SXin Li 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
9*bf2c3715SXin Li 
10*bf2c3715SXin Li 		http://www.netlib.org/f2c/libf2c.zip
11*bf2c3715SXin Li */
12*bf2c3715SXin Li 
13*bf2c3715SXin Li #include "datatypes.h"
14*bf2c3715SXin Li 
drotm_(integer * n,doublereal * dx,integer * incx,doublereal * dy,integer * incy,doublereal * dparam)15*bf2c3715SXin Li /* Subroutine */ int drotm_(integer *n, doublereal *dx, integer *incx,
16*bf2c3715SXin Li 	doublereal *dy, integer *incy, doublereal *dparam)
17*bf2c3715SXin Li {
18*bf2c3715SXin Li     /* Initialized data */
19*bf2c3715SXin Li 
20*bf2c3715SXin Li     static doublereal zero = 0.;
21*bf2c3715SXin Li     static doublereal two = 2.;
22*bf2c3715SXin Li 
23*bf2c3715SXin Li     /* System generated locals */
24*bf2c3715SXin Li     integer i__1, i__2;
25*bf2c3715SXin Li 
26*bf2c3715SXin Li     /* Local variables */
27*bf2c3715SXin Li     integer i__;
28*bf2c3715SXin Li     doublereal w, z__;
29*bf2c3715SXin Li     integer kx, ky;
30*bf2c3715SXin Li     doublereal dh11, dh12, dh21, dh22, dflag;
31*bf2c3715SXin Li     integer nsteps;
32*bf2c3715SXin Li 
33*bf2c3715SXin Li /*     .. Scalar Arguments .. */
34*bf2c3715SXin Li /*     .. */
35*bf2c3715SXin Li /*     .. Array Arguments .. */
36*bf2c3715SXin Li /*     .. */
37*bf2c3715SXin Li 
38*bf2c3715SXin Li /*  Purpose */
39*bf2c3715SXin Li /*  ======= */
40*bf2c3715SXin Li 
41*bf2c3715SXin Li /*     APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX */
42*bf2c3715SXin Li 
43*bf2c3715SXin Li /*     (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN */
44*bf2c3715SXin Li /*     (DY**T) */
45*bf2c3715SXin Li 
46*bf2c3715SXin Li /*     DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE */
47*bf2c3715SXin Li /*     LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY. */
48*bf2c3715SXin Li /*     WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
49*bf2c3715SXin Li 
50*bf2c3715SXin Li /*     DFLAG=-1.D0     DFLAG=0.D0        DFLAG=1.D0     DFLAG=-2.D0 */
51*bf2c3715SXin Li 
52*bf2c3715SXin Li /*       (DH11  DH12)    (1.D0  DH12)    (DH11  1.D0)    (1.D0  0.D0) */
53*bf2c3715SXin Li /*     H=(          )    (          )    (          )    (          ) */
54*bf2c3715SXin Li /*       (DH21  DH22),   (DH21  1.D0),   (-1.D0 DH22),   (0.D0  1.D0). */
55*bf2c3715SXin Li /*     SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM. */
56*bf2c3715SXin Li 
57*bf2c3715SXin Li /*  Arguments */
58*bf2c3715SXin Li /*  ========= */
59*bf2c3715SXin Li 
60*bf2c3715SXin Li /*  N      (input) INTEGER */
61*bf2c3715SXin Li /*         number of elements in input vector(s) */
62*bf2c3715SXin Li 
63*bf2c3715SXin Li /*  DX     (input/output) DOUBLE PRECISION array, dimension N */
64*bf2c3715SXin Li /*         double precision vector with N elements */
65*bf2c3715SXin Li 
66*bf2c3715SXin Li /*  INCX   (input) INTEGER */
67*bf2c3715SXin Li /*         storage spacing between elements of DX */
68*bf2c3715SXin Li 
69*bf2c3715SXin Li /*  DY     (input/output) DOUBLE PRECISION array, dimension N */
70*bf2c3715SXin Li /*         double precision vector with N elements */
71*bf2c3715SXin Li 
72*bf2c3715SXin Li /*  INCY   (input) INTEGER */
73*bf2c3715SXin Li /*         storage spacing between elements of DY */
74*bf2c3715SXin Li 
75*bf2c3715SXin Li /*  DPARAM (input/output)  DOUBLE PRECISION array, dimension 5 */
76*bf2c3715SXin Li /*     DPARAM(1)=DFLAG */
77*bf2c3715SXin Li /*     DPARAM(2)=DH11 */
78*bf2c3715SXin Li /*     DPARAM(3)=DH21 */
79*bf2c3715SXin Li /*     DPARAM(4)=DH12 */
80*bf2c3715SXin Li /*     DPARAM(5)=DH22 */
81*bf2c3715SXin Li 
82*bf2c3715SXin Li /*  ===================================================================== */
83*bf2c3715SXin Li 
84*bf2c3715SXin Li /*     .. Local Scalars .. */
85*bf2c3715SXin Li /*     .. */
86*bf2c3715SXin Li /*     .. Data statements .. */
87*bf2c3715SXin Li     /* Parameter adjustments */
88*bf2c3715SXin Li     --dparam;
89*bf2c3715SXin Li     --dy;
90*bf2c3715SXin Li     --dx;
91*bf2c3715SXin Li 
92*bf2c3715SXin Li     /* Function Body */
93*bf2c3715SXin Li /*     .. */
94*bf2c3715SXin Li 
95*bf2c3715SXin Li     dflag = dparam[1];
96*bf2c3715SXin Li     if (*n <= 0 || dflag + two == zero) {
97*bf2c3715SXin Li 	goto L140;
98*bf2c3715SXin Li     }
99*bf2c3715SXin Li     if (! (*incx == *incy && *incx > 0)) {
100*bf2c3715SXin Li 	goto L70;
101*bf2c3715SXin Li     }
102*bf2c3715SXin Li 
103*bf2c3715SXin Li     nsteps = *n * *incx;
104*bf2c3715SXin Li     if (dflag < 0.) {
105*bf2c3715SXin Li 	goto L50;
106*bf2c3715SXin Li     } else if (dflag == 0) {
107*bf2c3715SXin Li 	goto L10;
108*bf2c3715SXin Li     } else {
109*bf2c3715SXin Li 	goto L30;
110*bf2c3715SXin Li     }
111*bf2c3715SXin Li L10:
112*bf2c3715SXin Li     dh12 = dparam[4];
113*bf2c3715SXin Li     dh21 = dparam[3];
114*bf2c3715SXin Li     i__1 = nsteps;
115*bf2c3715SXin Li     i__2 = *incx;
116*bf2c3715SXin Li     for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
117*bf2c3715SXin Li 	w = dx[i__];
118*bf2c3715SXin Li 	z__ = dy[i__];
119*bf2c3715SXin Li 	dx[i__] = w + z__ * dh12;
120*bf2c3715SXin Li 	dy[i__] = w * dh21 + z__;
121*bf2c3715SXin Li /* L20: */
122*bf2c3715SXin Li     }
123*bf2c3715SXin Li     goto L140;
124*bf2c3715SXin Li L30:
125*bf2c3715SXin Li     dh11 = dparam[2];
126*bf2c3715SXin Li     dh22 = dparam[5];
127*bf2c3715SXin Li     i__2 = nsteps;
128*bf2c3715SXin Li     i__1 = *incx;
129*bf2c3715SXin Li     for (i__ = 1; i__1 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__1) {
130*bf2c3715SXin Li 	w = dx[i__];
131*bf2c3715SXin Li 	z__ = dy[i__];
132*bf2c3715SXin Li 	dx[i__] = w * dh11 + z__;
133*bf2c3715SXin Li 	dy[i__] = -w + dh22 * z__;
134*bf2c3715SXin Li /* L40: */
135*bf2c3715SXin Li     }
136*bf2c3715SXin Li     goto L140;
137*bf2c3715SXin Li L50:
138*bf2c3715SXin Li     dh11 = dparam[2];
139*bf2c3715SXin Li     dh12 = dparam[4];
140*bf2c3715SXin Li     dh21 = dparam[3];
141*bf2c3715SXin Li     dh22 = dparam[5];
142*bf2c3715SXin Li     i__1 = nsteps;
143*bf2c3715SXin Li     i__2 = *incx;
144*bf2c3715SXin Li     for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
145*bf2c3715SXin Li 	w = dx[i__];
146*bf2c3715SXin Li 	z__ = dy[i__];
147*bf2c3715SXin Li 	dx[i__] = w * dh11 + z__ * dh12;
148*bf2c3715SXin Li 	dy[i__] = w * dh21 + z__ * dh22;
149*bf2c3715SXin Li /* L60: */
150*bf2c3715SXin Li     }
151*bf2c3715SXin Li     goto L140;
152*bf2c3715SXin Li L70:
153*bf2c3715SXin Li     kx = 1;
154*bf2c3715SXin Li     ky = 1;
155*bf2c3715SXin Li     if (*incx < 0) {
156*bf2c3715SXin Li 	kx = (1 - *n) * *incx + 1;
157*bf2c3715SXin Li     }
158*bf2c3715SXin Li     if (*incy < 0) {
159*bf2c3715SXin Li 	ky = (1 - *n) * *incy + 1;
160*bf2c3715SXin Li     }
161*bf2c3715SXin Li 
162*bf2c3715SXin Li     if (dflag < 0.) {
163*bf2c3715SXin Li 	goto L120;
164*bf2c3715SXin Li     } else if (dflag == 0) {
165*bf2c3715SXin Li 	goto L80;
166*bf2c3715SXin Li     } else {
167*bf2c3715SXin Li 	goto L100;
168*bf2c3715SXin Li     }
169*bf2c3715SXin Li L80:
170*bf2c3715SXin Li     dh12 = dparam[4];
171*bf2c3715SXin Li     dh21 = dparam[3];
172*bf2c3715SXin Li     i__2 = *n;
173*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
174*bf2c3715SXin Li 	w = dx[kx];
175*bf2c3715SXin Li 	z__ = dy[ky];
176*bf2c3715SXin Li 	dx[kx] = w + z__ * dh12;
177*bf2c3715SXin Li 	dy[ky] = w * dh21 + z__;
178*bf2c3715SXin Li 	kx += *incx;
179*bf2c3715SXin Li 	ky += *incy;
180*bf2c3715SXin Li /* L90: */
181*bf2c3715SXin Li     }
182*bf2c3715SXin Li     goto L140;
183*bf2c3715SXin Li L100:
184*bf2c3715SXin Li     dh11 = dparam[2];
185*bf2c3715SXin Li     dh22 = dparam[5];
186*bf2c3715SXin Li     i__2 = *n;
187*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
188*bf2c3715SXin Li 	w = dx[kx];
189*bf2c3715SXin Li 	z__ = dy[ky];
190*bf2c3715SXin Li 	dx[kx] = w * dh11 + z__;
191*bf2c3715SXin Li 	dy[ky] = -w + dh22 * z__;
192*bf2c3715SXin Li 	kx += *incx;
193*bf2c3715SXin Li 	ky += *incy;
194*bf2c3715SXin Li /* L110: */
195*bf2c3715SXin Li     }
196*bf2c3715SXin Li     goto L140;
197*bf2c3715SXin Li L120:
198*bf2c3715SXin Li     dh11 = dparam[2];
199*bf2c3715SXin Li     dh12 = dparam[4];
200*bf2c3715SXin Li     dh21 = dparam[3];
201*bf2c3715SXin Li     dh22 = dparam[5];
202*bf2c3715SXin Li     i__2 = *n;
203*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
204*bf2c3715SXin Li 	w = dx[kx];
205*bf2c3715SXin Li 	z__ = dy[ky];
206*bf2c3715SXin Li 	dx[kx] = w * dh11 + z__ * dh12;
207*bf2c3715SXin Li 	dy[ky] = w * dh21 + z__ * dh22;
208*bf2c3715SXin Li 	kx += *incx;
209*bf2c3715SXin Li 	ky += *incy;
210*bf2c3715SXin Li /* L130: */
211*bf2c3715SXin Li     }
212*bf2c3715SXin Li L140:
213*bf2c3715SXin Li     return 0;
214*bf2c3715SXin Li } /* drotm_ */
215*bf2c3715SXin Li 
216