1
/* -- translated by f2c (version 20050501).
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
8
Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
10
http://www.netlib.org/f2c/libf2c.zip
14
#include "arpack_internal.h"
17
/* Table of constant values */
19
static doublereal c_b14 = 1.;
20
static integer c__1 = 1;
21
static doublereal c_b16 = 0.;
23
/* Subroutine */ int igraphdlarfx_(char *side, integer *m, integer *n, doublereal *
24
v, doublereal *tau, doublereal *c__, integer *ldc, doublereal *work)
26
/* System generated locals */
27
integer c_dim1, c_offset, i__1;
32
static doublereal t1, t2, t3, t4, t5, t6, t7, t8, t9, v1, v2, v3, v4, v5,
33
v6, v7, v8, v9, t10, v10, sum;
34
extern /* Subroutine */ int igraphdger_(integer *, integer *, doublereal *,
35
doublereal *, integer *, doublereal *, integer *, doublereal *,
37
extern logical igraphlsame_(char *, char *);
38
extern /* Subroutine */ int igraphdgemv_(char *, integer *, integer *,
39
doublereal *, doublereal *, integer *, doublereal *, integer *,
40
doublereal *, doublereal *, integer *);
43
/* -- LAPACK auxiliary routine (version 3.0) -- */
44
/* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
45
/* Courant Institute, Argonne National Lab, and Rice University */
46
/* February 29, 1992 */
48
/* .. Scalar Arguments .. */
50
/* .. Array Arguments .. */
56
/* DLARFX applies a real elementary reflector H to a real m by n */
57
/* matrix C, from either the left or the right. H is represented in the */
60
/* H = I - tau * v * v' */
62
/* where tau is a real scalar and v is a real vector. */
64
/* If tau = 0, then H is taken to be the unit matrix */
66
/* This version uses inline code if H has order < 11. */
71
/* SIDE (input) CHARACTER*1 */
72
/* = 'L': form H * C */
73
/* = 'R': form C * H */
75
/* M (input) INTEGER */
76
/* The number of rows of the matrix C. */
78
/* N (input) INTEGER */
79
/* The number of columns of the matrix C. */
81
/* V (input) DOUBLE PRECISION array, dimension (M) if SIDE = 'L' */
82
/* or (N) if SIDE = 'R' */
83
/* The vector v in the representation of H. */
85
/* TAU (input) DOUBLE PRECISION */
86
/* The value tau in the representation of H. */
88
/* C (input/output) DOUBLE PRECISION array, dimension (LDC,N) */
89
/* On entry, the m by n matrix C. */
90
/* On exit, C is overwritten by the matrix H * C if SIDE = 'L', */
91
/* or C * H if SIDE = 'R'. */
93
/* LDC (input) INTEGER */
94
/* The leading dimension of the array C. LDA >= (1,M). */
96
/* WORK (workspace) DOUBLE PRECISION array, dimension */
97
/* (N) if SIDE = 'L' */
98
/* or (M) if SIDE = 'R' */
99
/* WORK is not referenced if H has order < 11. */
101
/* ===================================================================== */
103
/* .. Parameters .. */
105
/* .. Local Scalars .. */
107
/* .. External Functions .. */
109
/* .. External Subroutines .. */
111
/* .. Executable Statements .. */
113
/* Parameter adjustments */
116
c_offset = 1 + c_dim1;
124
if (igraphlsame_(side, "L")) {
126
/* Form H * C, where H has order m. */
141
/* Code for general M */
145
igraphdgemv_("Transpose", m, n, &c_b14, &c__[c_offset], ldc, &v[1], &c__1, &
146
c_b16, &work[1], &c__1);
148
/* C := C - tau * v * w' */
151
igraphdger_(m, n, &d__1, &v[1], &c__1, &work[1], &c__1, &c__[c_offset], ldc)
156
/* Special code for 1 x 1 Householder */
158
t1 = 1. - *tau * v[1] * v[1];
160
for (j = 1; j <= i__1; ++j) {
161
c__[j * c_dim1 + 1] = t1 * c__[j * c_dim1 + 1];
167
/* Special code for 2 x 2 Householder */
174
for (j = 1; j <= i__1; ++j) {
175
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2];
176
c__[j * c_dim1 + 1] -= sum * t1;
177
c__[j * c_dim1 + 2] -= sum * t2;
183
/* Special code for 3 x 3 Householder */
192
for (j = 1; j <= i__1; ++j) {
193
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
195
c__[j * c_dim1 + 1] -= sum * t1;
196
c__[j * c_dim1 + 2] -= sum * t2;
197
c__[j * c_dim1 + 3] -= sum * t3;
203
/* Special code for 4 x 4 Householder */
214
for (j = 1; j <= i__1; ++j) {
215
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
216
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4];
217
c__[j * c_dim1 + 1] -= sum * t1;
218
c__[j * c_dim1 + 2] -= sum * t2;
219
c__[j * c_dim1 + 3] -= sum * t3;
220
c__[j * c_dim1 + 4] -= sum * t4;
226
/* Special code for 5 x 5 Householder */
239
for (j = 1; j <= i__1; ++j) {
240
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
241
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
243
c__[j * c_dim1 + 1] -= sum * t1;
244
c__[j * c_dim1 + 2] -= sum * t2;
245
c__[j * c_dim1 + 3] -= sum * t3;
246
c__[j * c_dim1 + 4] -= sum * t4;
247
c__[j * c_dim1 + 5] -= sum * t5;
253
/* Special code for 6 x 6 Householder */
268
for (j = 1; j <= i__1; ++j) {
269
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
270
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
271
j * c_dim1 + 5] + v6 * c__[j * c_dim1 + 6];
272
c__[j * c_dim1 + 1] -= sum * t1;
273
c__[j * c_dim1 + 2] -= sum * t2;
274
c__[j * c_dim1 + 3] -= sum * t3;
275
c__[j * c_dim1 + 4] -= sum * t4;
276
c__[j * c_dim1 + 5] -= sum * t5;
277
c__[j * c_dim1 + 6] -= sum * t6;
283
/* Special code for 7 x 7 Householder */
300
for (j = 1; j <= i__1; ++j) {
301
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
302
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
303
j * c_dim1 + 5] + v6 * c__[j * c_dim1 + 6] + v7 * c__[j *
305
c__[j * c_dim1 + 1] -= sum * t1;
306
c__[j * c_dim1 + 2] -= sum * t2;
307
c__[j * c_dim1 + 3] -= sum * t3;
308
c__[j * c_dim1 + 4] -= sum * t4;
309
c__[j * c_dim1 + 5] -= sum * t5;
310
c__[j * c_dim1 + 6] -= sum * t6;
311
c__[j * c_dim1 + 7] -= sum * t7;
317
/* Special code for 8 x 8 Householder */
336
for (j = 1; j <= i__1; ++j) {
337
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
338
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
339
j * c_dim1 + 5] + v6 * c__[j * c_dim1 + 6] + v7 * c__[j *
340
c_dim1 + 7] + v8 * c__[j * c_dim1 + 8];
341
c__[j * c_dim1 + 1] -= sum * t1;
342
c__[j * c_dim1 + 2] -= sum * t2;
343
c__[j * c_dim1 + 3] -= sum * t3;
344
c__[j * c_dim1 + 4] -= sum * t4;
345
c__[j * c_dim1 + 5] -= sum * t5;
346
c__[j * c_dim1 + 6] -= sum * t6;
347
c__[j * c_dim1 + 7] -= sum * t7;
348
c__[j * c_dim1 + 8] -= sum * t8;
354
/* Special code for 9 x 9 Householder */
375
for (j = 1; j <= i__1; ++j) {
376
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
377
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
378
j * c_dim1 + 5] + v6 * c__[j * c_dim1 + 6] + v7 * c__[j *
379
c_dim1 + 7] + v8 * c__[j * c_dim1 + 8] + v9 * c__[j *
381
c__[j * c_dim1 + 1] -= sum * t1;
382
c__[j * c_dim1 + 2] -= sum * t2;
383
c__[j * c_dim1 + 3] -= sum * t3;
384
c__[j * c_dim1 + 4] -= sum * t4;
385
c__[j * c_dim1 + 5] -= sum * t5;
386
c__[j * c_dim1 + 6] -= sum * t6;
387
c__[j * c_dim1 + 7] -= sum * t7;
388
c__[j * c_dim1 + 8] -= sum * t8;
389
c__[j * c_dim1 + 9] -= sum * t9;
395
/* Special code for 10 x 10 Householder */
418
for (j = 1; j <= i__1; ++j) {
419
sum = v1 * c__[j * c_dim1 + 1] + v2 * c__[j * c_dim1 + 2] + v3 *
420
c__[j * c_dim1 + 3] + v4 * c__[j * c_dim1 + 4] + v5 * c__[
421
j * c_dim1 + 5] + v6 * c__[j * c_dim1 + 6] + v7 * c__[j *
422
c_dim1 + 7] + v8 * c__[j * c_dim1 + 8] + v9 * c__[j *
423
c_dim1 + 9] + v10 * c__[j * c_dim1 + 10];
424
c__[j * c_dim1 + 1] -= sum * t1;
425
c__[j * c_dim1 + 2] -= sum * t2;
426
c__[j * c_dim1 + 3] -= sum * t3;
427
c__[j * c_dim1 + 4] -= sum * t4;
428
c__[j * c_dim1 + 5] -= sum * t5;
429
c__[j * c_dim1 + 6] -= sum * t6;
430
c__[j * c_dim1 + 7] -= sum * t7;
431
c__[j * c_dim1 + 8] -= sum * t8;
432
c__[j * c_dim1 + 9] -= sum * t9;
433
c__[j * c_dim1 + 10] -= sum * t10;
439
/* Form C * H, where H has order n. */
454
/* Code for general N */
458
igraphdgemv_("No transpose", m, n, &c_b14, &c__[c_offset], ldc, &v[1], &
459
c__1, &c_b16, &work[1], &c__1);
461
/* C := C - tau * w * v' */
464
igraphdger_(m, n, &d__1, &work[1], &c__1, &v[1], &c__1, &c__[c_offset], ldc)
469
/* Special code for 1 x 1 Householder */
471
t1 = 1. - *tau * v[1] * v[1];
473
for (j = 1; j <= i__1; ++j) {
474
c__[j + c_dim1] = t1 * c__[j + c_dim1];
480
/* Special code for 2 x 2 Householder */
487
for (j = 1; j <= i__1; ++j) {
488
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)];
489
c__[j + c_dim1] -= sum * t1;
490
c__[j + (c_dim1 << 1)] -= sum * t2;
496
/* Special code for 3 x 3 Householder */
505
for (j = 1; j <= i__1; ++j) {
506
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
508
c__[j + c_dim1] -= sum * t1;
509
c__[j + (c_dim1 << 1)] -= sum * t2;
510
c__[j + c_dim1 * 3] -= sum * t3;
516
/* Special code for 4 x 4 Householder */
527
for (j = 1; j <= i__1; ++j) {
528
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
529
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)];
530
c__[j + c_dim1] -= sum * t1;
531
c__[j + (c_dim1 << 1)] -= sum * t2;
532
c__[j + c_dim1 * 3] -= sum * t3;
533
c__[j + (c_dim1 << 2)] -= sum * t4;
539
/* Special code for 5 x 5 Householder */
552
for (j = 1; j <= i__1; ++j) {
553
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
554
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
556
c__[j + c_dim1] -= sum * t1;
557
c__[j + (c_dim1 << 1)] -= sum * t2;
558
c__[j + c_dim1 * 3] -= sum * t3;
559
c__[j + (c_dim1 << 2)] -= sum * t4;
560
c__[j + c_dim1 * 5] -= sum * t5;
566
/* Special code for 6 x 6 Householder */
581
for (j = 1; j <= i__1; ++j) {
582
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
583
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
584
c__[j + c_dim1 * 5] + v6 * c__[j + c_dim1 * 6];
585
c__[j + c_dim1] -= sum * t1;
586
c__[j + (c_dim1 << 1)] -= sum * t2;
587
c__[j + c_dim1 * 3] -= sum * t3;
588
c__[j + (c_dim1 << 2)] -= sum * t4;
589
c__[j + c_dim1 * 5] -= sum * t5;
590
c__[j + c_dim1 * 6] -= sum * t6;
596
/* Special code for 7 x 7 Householder */
613
for (j = 1; j <= i__1; ++j) {
614
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
615
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
616
c__[j + c_dim1 * 5] + v6 * c__[j + c_dim1 * 6] + v7 * c__[
618
c__[j + c_dim1] -= sum * t1;
619
c__[j + (c_dim1 << 1)] -= sum * t2;
620
c__[j + c_dim1 * 3] -= sum * t3;
621
c__[j + (c_dim1 << 2)] -= sum * t4;
622
c__[j + c_dim1 * 5] -= sum * t5;
623
c__[j + c_dim1 * 6] -= sum * t6;
624
c__[j + c_dim1 * 7] -= sum * t7;
630
/* Special code for 8 x 8 Householder */
649
for (j = 1; j <= i__1; ++j) {
650
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
651
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
652
c__[j + c_dim1 * 5] + v6 * c__[j + c_dim1 * 6] + v7 * c__[
653
j + c_dim1 * 7] + v8 * c__[j + (c_dim1 << 3)];
654
c__[j + c_dim1] -= sum * t1;
655
c__[j + (c_dim1 << 1)] -= sum * t2;
656
c__[j + c_dim1 * 3] -= sum * t3;
657
c__[j + (c_dim1 << 2)] -= sum * t4;
658
c__[j + c_dim1 * 5] -= sum * t5;
659
c__[j + c_dim1 * 6] -= sum * t6;
660
c__[j + c_dim1 * 7] -= sum * t7;
661
c__[j + (c_dim1 << 3)] -= sum * t8;
667
/* Special code for 9 x 9 Householder */
688
for (j = 1; j <= i__1; ++j) {
689
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
690
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
691
c__[j + c_dim1 * 5] + v6 * c__[j + c_dim1 * 6] + v7 * c__[
692
j + c_dim1 * 7] + v8 * c__[j + (c_dim1 << 3)] + v9 * c__[
694
c__[j + c_dim1] -= sum * t1;
695
c__[j + (c_dim1 << 1)] -= sum * t2;
696
c__[j + c_dim1 * 3] -= sum * t3;
697
c__[j + (c_dim1 << 2)] -= sum * t4;
698
c__[j + c_dim1 * 5] -= sum * t5;
699
c__[j + c_dim1 * 6] -= sum * t6;
700
c__[j + c_dim1 * 7] -= sum * t7;
701
c__[j + (c_dim1 << 3)] -= sum * t8;
702
c__[j + c_dim1 * 9] -= sum * t9;
708
/* Special code for 10 x 10 Householder */
731
for (j = 1; j <= i__1; ++j) {
732
sum = v1 * c__[j + c_dim1] + v2 * c__[j + (c_dim1 << 1)] + v3 *
733
c__[j + c_dim1 * 3] + v4 * c__[j + (c_dim1 << 2)] + v5 *
734
c__[j + c_dim1 * 5] + v6 * c__[j + c_dim1 * 6] + v7 * c__[
735
j + c_dim1 * 7] + v8 * c__[j + (c_dim1 << 3)] + v9 * c__[
736
j + c_dim1 * 9] + v10 * c__[j + c_dim1 * 10];
737
c__[j + c_dim1] -= sum * t1;
738
c__[j + (c_dim1 << 1)] -= sum * t2;
739
c__[j + c_dim1 * 3] -= sum * t3;
740
c__[j + (c_dim1 << 2)] -= sum * t4;
741
c__[j + c_dim1 * 5] -= sum * t5;
742
c__[j + c_dim1 * 6] -= sum * t6;
743
c__[j + c_dim1 * 7] -= sum * t7;
744
c__[j + (c_dim1 << 3)] -= sum * t8;
745
c__[j + c_dim1 * 9] -= sum * t9;
746
c__[j + c_dim1 * 10] -= sum * t10;
756
} /* igraphdlarfx_ */