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