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