Skip to content

Commit 8b2a956

Browse files
authored
Implement truncated QR with pivot (Reference-LAPACK PR 891)
1 parent 20a2a83 commit 8b2a956

1 file changed

Lines changed: 63 additions & 20 deletions

File tree

lapack-netlib/SRC/ilaenv.c

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ typedef struct Namelist Namelist;
191191
#define c_cos(R,Z) { pCf(R)=ccos(Cf(Z)); }
192192
#ifdef _MSC_VER
193193
#define c_div(c, a, b) {Cf(c)._Val[0] = (Cf(a)._Val[0]/Cf(b)._Val[0]); Cf(c)._Val[1]=(Cf(a)._Val[1]/Cf(b)._Val[1]);}
194-
#define z_div(c, a, b) {Cd(c)._Val[0] = (Cd(a)._Val[0]/Cd(b)._Val[0]); Cd(c)._Val[1]=(Cd(a)._Val[1]/df(b)._Val[1]);}
194+
#define z_div(c, a, b) {Cd(c)._Val[0] = (Cd(a)._Val[0]/Cd(b)._Val[0]); Cd(c)._Val[1]=(Cd(a)._Val[1]/Cd(b)._Val[1]);}
195195
#else
196196
#define c_div(c, a, b) {pCf(c) = Cf(a)/Cf(b);}
197197
#define z_div(c, a, b) {pCd(c) = Cd(a)/Cd(b);}
@@ -252,11 +252,11 @@ static char junk[] = "\n@(#)LIBF77 VERSION 19990503\n";
252252
#define z_exp(R, Z) {pCd(R) = cexp(Cd(Z));}
253253
#define z_sqrt(R, Z) {pCd(R) = csqrt(Cd(Z));}
254254
#define myexit_() break;
255-
#define mycycle() continue;
256-
#define myceiling(w) {ceil(w)}
257-
#define myhuge(w) {HUGE_VAL}
255+
#define mycycle_() continue;
256+
#define myceiling_(w) {ceil(w)}
257+
#define myhuge_(w) {HUGE_VAL}
258258
//#define mymaxloc_(w,s,e,n) {if (sizeof(*(w)) == sizeof(double)) dmaxloc_((w),*(s),*(e),n); else dmaxloc_((w),*(s),*(e),n);}
259-
#define mymaxloc(w,s,e,n) {dmaxloc_(w,*(s),*(e),n)}
259+
#define mymaxloc_(w,s,e,n) dmaxloc_(w,*(s),*(e),n)
260260

261261
/* procedure parameter types for -A and -C++ */
262262

@@ -509,12 +509,18 @@ static inline void zdotu_(doublecomplex *z, integer *n_, doublecomplex *x, integ
509509

510510

511511

512+
/* -- translated by f2c (version 20000121).
513+
You must link the resulting object file with the libraries:
514+
-lf2c -lm (in that order)
515+
*/
516+
517+
512518

513519
/* Table of constant values */
514520

515521
static integer c__1 = 1;
516-
static real c_b174 = 0.f;
517-
static real c_b175 = 1.f;
522+
static real c_b179 = 0.f;
523+
static real c_b180 = 1.f;
518524
static integer c__0 = 0;
519525

520526
/* > \brief \b ILAENV */
@@ -599,9 +605,9 @@ f"> */
599605
/* > = 9: maximum size of the subproblems at the bottom of the */
600606
/* > computation tree in the divide-and-conquer algorithm */
601607
/* > (used by xGELSD and xGESDD) */
602-
/* > =10: ieee NaN arithmetic can be trusted not to trap */
608+
/* > =10: ieee infinity and NaN arithmetic can be trusted not to trap */
603609
/* > =11: infinity arithmetic can be trusted not to trap */
604-
/* > 12 <= ISPEC <= 16: */
610+
/* > 12 <= ISPEC <= 17: */
605611
/* > xHSEQR or related subroutines, */
606612
/* > see IPARMQ for detailed explanation */
607613
/* > \endverbatim */
@@ -652,9 +658,7 @@ f"> */
652658
/* > \author Univ. of Colorado Denver */
653659
/* > \author NAG Ltd. */
654660

655-
/* > \date November 2019 */
656-
657-
/* > \ingroup OTHERauxiliary */
661+
/* > \ingroup ilaenv */
658662

659663
/* > \par Further Details: */
660664
/* ===================== */
@@ -685,7 +689,7 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
685689
opts_len)
686690
{
687691
/* System generated locals */
688-
integer ret_val;
692+
integer ret_val, i__1, i__2, i__3;
689693

690694
/* Local variables */
691695
logical twostage;
@@ -702,10 +706,9 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
702706
integer *, integer *);
703707

704708

705-
/* -- LAPACK auxiliary routine (version 3.9.0) -- */
709+
/* -- LAPACK auxiliary routine -- */
706710
/* -- LAPACK is a software package provided by Univ. of Tennessee, -- */
707711
/* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- */
708-
/* November 2019 */
709712

710713

711714
/* ===================================================================== */
@@ -728,6 +731,7 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
728731
case 14: goto L160;
729732
case 15: goto L160;
730733
case 16: goto L160;
734+
case 17: goto L160;
731735
}
732736

733737
/* Invalid value for ISPEC */
@@ -908,6 +912,12 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
908912
} else {
909913
nb = 64;
910914
}
915+
} else if (s_cmp(subnam + 3, "QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
916+
if (sname) {
917+
nb = 32;
918+
} else {
919+
nb = 32;
920+
}
911921
}
912922
} else if (s_cmp(c2, "PO", (ftnlen)2, (ftnlen)2) == 0) {
913923
if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
@@ -1034,6 +1044,21 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
10341044
} else {
10351045
nb = 64;
10361046
}
1047+
} else if (s_cmp(c3, "SYL", (ftnlen)3, (ftnlen)3) == 0) {
1048+
/* The upper bound is to prevent overly aggressive scaling. */
1049+
if (sname) {
1050+
/* Computing MIN */
1051+
/* Computing MAX */
1052+
i__2 = 48, i__3 = (f2cmin(*n1,*n2) << 4) / 100;
1053+
i__1 = f2cmax(i__2,i__3);
1054+
nb = f2cmin(i__1,240);
1055+
} else {
1056+
/* Computing MIN */
1057+
/* Computing MAX */
1058+
i__2 = 24, i__3 = (f2cmin(*n1,*n2) << 3) / 100;
1059+
i__1 = f2cmax(i__2,i__3);
1060+
nb = f2cmin(i__1,80);
1061+
}
10371062
}
10381063
} else if (s_cmp(c2, "LA", (ftnlen)2, (ftnlen)2) == 0) {
10391064
if (s_cmp(c3, "UUM", (ftnlen)3, (ftnlen)3) == 0) {
@@ -1042,6 +1067,12 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
10421067
} else {
10431068
nb = 64;
10441069
}
1070+
} else if (s_cmp(c3, "TRS", (ftnlen)3, (ftnlen)3) == 0) {
1071+
if (sname) {
1072+
nb = 32;
1073+
} else {
1074+
nb = 32;
1075+
}
10451076
}
10461077
} else if (sname && s_cmp(c2, "ST", (ftnlen)2, (ftnlen)2) == 0) {
10471078
if (s_cmp(c3, "EBZ", (ftnlen)3, (ftnlen)3) == 0) {
@@ -1093,6 +1124,12 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
10931124
} else {
10941125
nbmin = 2;
10951126
}
1127+
} else if (s_cmp(subnam + 3, "QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
1128+
if (sname) {
1129+
nbmin = 2;
1130+
} else {
1131+
nbmin = 2;
1132+
}
10961133
}
10971134
} else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
10981135
if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
@@ -1184,6 +1221,12 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
11841221
} else {
11851222
nx = 128;
11861223
}
1224+
} else if (s_cmp(subnam + 3, "QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
1225+
if (sname) {
1226+
nx = 128;
1227+
} else {
1228+
nx = 128;
1229+
}
11871230
}
11881231
} else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
11891232
if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
@@ -1270,29 +1313,29 @@ integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
12701313

12711314
L140:
12721315

1273-
/* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap */
1316+
/* ISPEC = 10: ieee and infinity NaN arithmetic can be trusted not to trap */
12741317

12751318
/* ILAENV = 0 */
12761319
ret_val = 1;
12771320
if (ret_val == 1) {
1278-
ret_val = ieeeck_(&c__1, &c_b174, &c_b175);
1321+
ret_val = ieeeck_(&c__1, &c_b179, &c_b180);
12791322
}
12801323
return ret_val;
12811324

12821325
L150:
12831326

1284-
/* ISPEC = 11: infinity arithmetic can be trusted not to trap */
1327+
/* ISPEC = 11: ieee infinity arithmetic can be trusted not to trap */
12851328

12861329
/* ILAENV = 0 */
12871330
ret_val = 1;
12881331
if (ret_val == 1) {
1289-
ret_val = ieeeck_(&c__0, &c_b174, &c_b175);
1332+
ret_val = ieeeck_(&c__0, &c_b179, &c_b180);
12901333
}
12911334
return ret_val;
12921335

12931336
L160:
12941337

1295-
/* 12 <= ISPEC <= 16: xHSEQR or related subroutines. */
1338+
/* 12 <= ISPEC <= 17: xHSEQR or related subroutines. */
12961339

12971340
ret_val = iparmq_(ispec, name__, opts, n1, n2, n3, n4)
12981341
;

0 commit comments

Comments
 (0)