Merge pull request #3992 from akohlmey/linalg-lapack-3.12
Update internal linear algebra library to LAPACK 3.12
This commit is contained in:
@ -11,7 +11,7 @@ resulting library will follow the Fortran binary conventions.
|
|||||||
|
|
||||||
Note that this is an *incomplete* subset of full BLAS/LAPACK.
|
Note that this is an *incomplete* subset of full BLAS/LAPACK.
|
||||||
|
|
||||||
The files correspond to LAPACK version 3.11.0.
|
The files correspond to LAPACK version 3.12.0.
|
||||||
|
|
||||||
You should only need to build and use the library in this directory if
|
You should only need to build and use the library in this directory if
|
||||||
you want to build LAMMPS with one of the listed packages AND you do not
|
you want to build LAMMPS with one of the listed packages AND you do not
|
||||||
|
|||||||
@ -40,7 +40,7 @@ int dbdsqr_(char *uplo, integer *n, integer *ncvt, integer *nru, integer *ncc, d
|
|||||||
integer oldll;
|
integer oldll;
|
||||||
doublereal shift, sigmn, oldsn;
|
doublereal shift, sigmn, oldsn;
|
||||||
extern int dswap_(integer *, doublereal *, integer *, doublereal *, integer *);
|
extern int dswap_(integer *, doublereal *, integer *, doublereal *, integer *);
|
||||||
doublereal sminl, sigmx;
|
doublereal sigmx;
|
||||||
logical lower;
|
logical lower;
|
||||||
extern int dlasq1_(integer *, doublereal *, doublereal *, doublereal *, integer *),
|
extern int dlasq1_(integer *, doublereal *, doublereal *, doublereal *, integer *),
|
||||||
dlasv2_(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *,
|
dlasv2_(doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *,
|
||||||
@ -141,7 +141,7 @@ int dbdsqr_(char *uplo, integer *n, integer *ncvt, integer *nru, integer *ncc, d
|
|||||||
d__2 = smax, d__3 = (d__1 = e[i__], abs(d__1));
|
d__2 = smax, d__3 = (d__1 = e[i__], abs(d__1));
|
||||||
smax = max(d__2, d__3);
|
smax = max(d__2, d__3);
|
||||||
}
|
}
|
||||||
sminl = 0.;
|
smin = 0.;
|
||||||
if (tol >= 0.) {
|
if (tol >= 0.) {
|
||||||
sminoa = abs(d__[1]);
|
sminoa = abs(d__[1]);
|
||||||
if (sminoa == 0.) {
|
if (sminoa == 0.) {
|
||||||
@ -185,7 +185,6 @@ L60:
|
|||||||
d__[m] = 0.;
|
d__[m] = 0.;
|
||||||
}
|
}
|
||||||
smax = (d__1 = d__[m], abs(d__1));
|
smax = (d__1 = d__[m], abs(d__1));
|
||||||
smin = smax;
|
|
||||||
i__1 = m - 1;
|
i__1 = m - 1;
|
||||||
for (lll = 1; lll <= i__1; ++lll) {
|
for (lll = 1; lll <= i__1; ++lll) {
|
||||||
ll = m - lll;
|
ll = m - lll;
|
||||||
@ -197,7 +196,6 @@ L60:
|
|||||||
if (abse <= thresh) {
|
if (abse <= thresh) {
|
||||||
goto L80;
|
goto L80;
|
||||||
}
|
}
|
||||||
smin = min(smin, abss);
|
|
||||||
d__1 = max(smax, abss);
|
d__1 = max(smax, abss);
|
||||||
smax = max(d__1, abse);
|
smax = max(d__1, abse);
|
||||||
}
|
}
|
||||||
@ -243,7 +241,7 @@ L90:
|
|||||||
}
|
}
|
||||||
if (tol >= 0.) {
|
if (tol >= 0.) {
|
||||||
mu = (d__1 = d__[ll], abs(d__1));
|
mu = (d__1 = d__[ll], abs(d__1));
|
||||||
sminl = mu;
|
smin = mu;
|
||||||
i__1 = m - 1;
|
i__1 = m - 1;
|
||||||
for (lll = ll; lll <= i__1; ++lll) {
|
for (lll = ll; lll <= i__1; ++lll) {
|
||||||
if ((d__1 = e[lll], abs(d__1)) <= tol * mu) {
|
if ((d__1 = e[lll], abs(d__1)) <= tol * mu) {
|
||||||
@ -251,7 +249,7 @@ L90:
|
|||||||
goto L60;
|
goto L60;
|
||||||
}
|
}
|
||||||
mu = (d__2 = d__[lll + 1], abs(d__2)) * (mu / (mu + (d__1 = e[lll], abs(d__1))));
|
mu = (d__2 = d__[lll + 1], abs(d__2)) * (mu / (mu + (d__1 = e[lll], abs(d__1))));
|
||||||
sminl = min(sminl, mu);
|
smin = min(smin, mu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -262,7 +260,7 @@ L90:
|
|||||||
}
|
}
|
||||||
if (tol >= 0.) {
|
if (tol >= 0.) {
|
||||||
mu = (d__1 = d__[m], abs(d__1));
|
mu = (d__1 = d__[m], abs(d__1));
|
||||||
sminl = mu;
|
smin = mu;
|
||||||
i__1 = ll;
|
i__1 = ll;
|
||||||
for (lll = m - 1; lll >= i__1; --lll) {
|
for (lll = m - 1; lll >= i__1; --lll) {
|
||||||
if ((d__1 = e[lll], abs(d__1)) <= tol * mu) {
|
if ((d__1 = e[lll], abs(d__1)) <= tol * mu) {
|
||||||
@ -270,14 +268,14 @@ L90:
|
|||||||
goto L60;
|
goto L60;
|
||||||
}
|
}
|
||||||
mu = (d__2 = d__[lll], abs(d__2)) * (mu / (mu + (d__1 = e[lll], abs(d__1))));
|
mu = (d__2 = d__[lll], abs(d__2)) * (mu / (mu + (d__1 = e[lll], abs(d__1))));
|
||||||
sminl = min(sminl, mu);
|
smin = min(smin, mu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
oldll = ll;
|
oldll = ll;
|
||||||
oldm = m;
|
oldm = m;
|
||||||
d__1 = eps, d__2 = tol * .01;
|
d__1 = eps, d__2 = tol * .01;
|
||||||
if (tol >= 0. && *n * tol * (sminl / smax) <= max(d__1, d__2)) {
|
if (tol >= 0. && *n * tol * (smin / smax) <= max(d__1, d__2)) {
|
||||||
shift = 0.;
|
shift = 0.;
|
||||||
} else {
|
} else {
|
||||||
if (idir == 1) {
|
if (idir == 1) {
|
||||||
|
|||||||
@ -20,6 +20,7 @@ int dgecon_(char *norm, integer *n, doublereal *a, integer *lda, doublereal *ano
|
|||||||
integer *);
|
integer *);
|
||||||
extern doublereal dlamch_(char *, ftnlen);
|
extern doublereal dlamch_(char *, ftnlen);
|
||||||
extern integer idamax_(integer *, doublereal *, integer *);
|
extern integer idamax_(integer *, doublereal *, integer *);
|
||||||
|
extern logical disnan_(doublereal *);
|
||||||
extern int xerbla_(char *, integer *, ftnlen);
|
extern int xerbla_(char *, integer *, ftnlen);
|
||||||
doublereal ainvnm;
|
doublereal ainvnm;
|
||||||
extern int dlatrs_(char *, char *, char *, char *, integer *, doublereal *, integer *,
|
extern int dlatrs_(char *, char *, char *, char *, integer *, doublereal *, integer *,
|
||||||
@ -27,12 +28,13 @@ int dgecon_(char *norm, integer *n, doublereal *a, integer *lda, doublereal *ano
|
|||||||
ftnlen);
|
ftnlen);
|
||||||
logical onenrm;
|
logical onenrm;
|
||||||
char normin[1];
|
char normin[1];
|
||||||
doublereal smlnum;
|
doublereal smlnum, hugeval;
|
||||||
a_dim1 = *lda;
|
a_dim1 = *lda;
|
||||||
a_offset = 1 + a_dim1;
|
a_offset = 1 + a_dim1;
|
||||||
a -= a_offset;
|
a -= a_offset;
|
||||||
--work;
|
--work;
|
||||||
--iwork;
|
--iwork;
|
||||||
|
hugeval = dlamch_((char *)"Overflow", (ftnlen)8);
|
||||||
*info = 0;
|
*info = 0;
|
||||||
onenrm = *(unsigned char *)norm == '1' || lsame_(norm, (char *)"O", (ftnlen)1, (ftnlen)1);
|
onenrm = *(unsigned char *)norm == '1' || lsame_(norm, (char *)"O", (ftnlen)1, (ftnlen)1);
|
||||||
if (!onenrm && !lsame_(norm, (char *)"I", (ftnlen)1, (ftnlen)1)) {
|
if (!onenrm && !lsame_(norm, (char *)"I", (ftnlen)1, (ftnlen)1)) {
|
||||||
@ -55,6 +57,13 @@ int dgecon_(char *norm, integer *n, doublereal *a, integer *lda, doublereal *ano
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (*anorm == 0.) {
|
} else if (*anorm == 0.) {
|
||||||
return 0;
|
return 0;
|
||||||
|
} else if (disnan_(anorm)) {
|
||||||
|
*rcond = *anorm;
|
||||||
|
*info = -5;
|
||||||
|
return 0;
|
||||||
|
} else if (*anorm > hugeval) {
|
||||||
|
*info = -5;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
smlnum = dlamch_((char *)"Safe minimum", (ftnlen)12);
|
smlnum = dlamch_((char *)"Safe minimum", (ftnlen)12);
|
||||||
ainvnm = 0.;
|
ainvnm = 0.;
|
||||||
@ -92,6 +101,12 @@ L10:
|
|||||||
}
|
}
|
||||||
if (ainvnm != 0.) {
|
if (ainvnm != 0.) {
|
||||||
*rcond = 1. / ainvnm / *anorm;
|
*rcond = 1. / ainvnm / *anorm;
|
||||||
|
} else {
|
||||||
|
*info = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (disnan_(rcond) || *rcond > hugeval) {
|
||||||
|
*info = 1;
|
||||||
}
|
}
|
||||||
L20:
|
L20:
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -19,9 +19,8 @@ int dgelsd_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
integer itau, nlvl, iascl, ibscl;
|
integer itau, nlvl, iascl, ibscl;
|
||||||
doublereal sfmin;
|
doublereal sfmin;
|
||||||
integer minmn, maxmn, itaup, itauq, mnthr, nwork;
|
integer minmn, maxmn, itaup, itauq, mnthr, nwork;
|
||||||
extern int dlabad_(doublereal *, doublereal *),
|
extern int dgebrd_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
||||||
dgebrd_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
doublereal *, doublereal *, doublereal *, integer *, integer *);
|
||||||
doublereal *, doublereal *, doublereal *, integer *, integer *);
|
|
||||||
extern doublereal dlamch_(char *, ftnlen),
|
extern doublereal dlamch_(char *, ftnlen),
|
||||||
dlange_(char *, integer *, integer *, doublereal *, integer *, doublereal *, ftnlen);
|
dlange_(char *, integer *, integer *, doublereal *, integer *, doublereal *, ftnlen);
|
||||||
extern int dgelqf_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
extern int dgelqf_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
||||||
@ -189,7 +188,6 @@ int dgelsd_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
sfmin = dlamch_((char *)"S", (ftnlen)1);
|
sfmin = dlamch_((char *)"S", (ftnlen)1);
|
||||||
smlnum = sfmin / eps;
|
smlnum = sfmin / eps;
|
||||||
bignum = 1. / smlnum;
|
bignum = 1. / smlnum;
|
||||||
dlabad_(&smlnum, &bignum);
|
|
||||||
anrm = dlange_((char *)"M", m, n, &a[a_offset], lda, &work[1], (ftnlen)1);
|
anrm = dlange_((char *)"M", m, n, &a[a_offset], lda, &work[1], (ftnlen)1);
|
||||||
iascl = 0;
|
iascl = 0;
|
||||||
if (anrm > 0. && anrm < smlnum) {
|
if (anrm > 0. && anrm < smlnum) {
|
||||||
|
|||||||
@ -30,9 +30,8 @@ int dgelss_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
integer minmn;
|
integer minmn;
|
||||||
extern int dcopy_(integer *, doublereal *, integer *, doublereal *, integer *);
|
extern int dcopy_(integer *, doublereal *, integer *, doublereal *, integer *);
|
||||||
integer maxmn, itaup, itauq, mnthr, iwork;
|
integer maxmn, itaup, itauq, mnthr, iwork;
|
||||||
extern int dlabad_(doublereal *, doublereal *),
|
extern int dgebrd_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
||||||
dgebrd_(integer *, integer *, doublereal *, integer *, doublereal *, doublereal *,
|
doublereal *, doublereal *, doublereal *, integer *, integer *);
|
||||||
doublereal *, doublereal *, doublereal *, integer *, integer *);
|
|
||||||
extern doublereal dlamch_(char *, ftnlen),
|
extern doublereal dlamch_(char *, ftnlen),
|
||||||
dlange_(char *, integer *, integer *, doublereal *, integer *, doublereal *, ftnlen);
|
dlange_(char *, integer *, integer *, doublereal *, integer *, doublereal *, ftnlen);
|
||||||
integer bdspac;
|
integer bdspac;
|
||||||
@ -208,7 +207,6 @@ int dgelss_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
sfmin = dlamch_((char *)"S", (ftnlen)1);
|
sfmin = dlamch_((char *)"S", (ftnlen)1);
|
||||||
smlnum = sfmin / eps;
|
smlnum = sfmin / eps;
|
||||||
bignum = 1. / smlnum;
|
bignum = 1. / smlnum;
|
||||||
dlabad_(&smlnum, &bignum);
|
|
||||||
anrm = dlange_((char *)"M", m, n, &a[a_offset], lda, &work[1], (ftnlen)1);
|
anrm = dlange_((char *)"M", m, n, &a[a_offset], lda, &work[1], (ftnlen)1);
|
||||||
iascl = 0;
|
iascl = 0;
|
||||||
if (anrm > 0. && anrm < smlnum) {
|
if (anrm > 0. && anrm < smlnum) {
|
||||||
@ -300,7 +298,7 @@ int dgelss_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
&c_b46, &work[1], n, (ftnlen)1, (ftnlen)1);
|
&c_b46, &work[1], n, (ftnlen)1, (ftnlen)1);
|
||||||
dlacpy_((char *)"G", n, &bl, &work[1], n, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
dlacpy_((char *)"G", n, &bl, &work[1], n, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (*nrhs == 1) {
|
||||||
dgemv_((char *)"T", n, n, &c_b79, &a[a_offset], lda, &b[b_offset], &c__1, &c_b46, &work[1],
|
dgemv_((char *)"T", n, n, &c_b79, &a[a_offset], lda, &b[b_offset], &c__1, &c_b46, &work[1],
|
||||||
&c__1, (ftnlen)1);
|
&c__1, (ftnlen)1);
|
||||||
dcopy_(n, &work[1], &c__1, &b[b_offset], &c__1);
|
dcopy_(n, &work[1], &c__1, &b[b_offset], &c__1);
|
||||||
@ -376,7 +374,7 @@ int dgelss_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
ldb, &c_b46, &work[iwork], m, (ftnlen)1, (ftnlen)1);
|
ldb, &c_b46, &work[iwork], m, (ftnlen)1, (ftnlen)1);
|
||||||
dlacpy_((char *)"G", m, &bl, &work[iwork], m, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
dlacpy_((char *)"G", m, &bl, &work[iwork], m, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (*nrhs == 1) {
|
||||||
dgemv_((char *)"T", m, m, &c_b79, &work[il], &ldwork, &b[b_dim1 + 1], &c__1, &c_b46,
|
dgemv_((char *)"T", m, m, &c_b79, &work[il], &ldwork, &b[b_dim1 + 1], &c__1, &c_b46,
|
||||||
&work[iwork], &c__1, (ftnlen)1);
|
&work[iwork], &c__1, (ftnlen)1);
|
||||||
dcopy_(m, &work[iwork], &c__1, &b[b_dim1 + 1], &c__1);
|
dcopy_(m, &work[iwork], &c__1, &b[b_dim1 + 1], &c__1);
|
||||||
@ -438,7 +436,7 @@ int dgelss_(integer *m, integer *n, integer *nrhs, doublereal *a, integer *lda,
|
|||||||
ldb, &c_b46, &work[1], n, (ftnlen)1, (ftnlen)1);
|
ldb, &c_b46, &work[1], n, (ftnlen)1, (ftnlen)1);
|
||||||
dlacpy_((char *)"F", n, &bl, &work[1], n, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
dlacpy_((char *)"F", n, &bl, &work[1], n, &b[i__ * b_dim1 + 1], ldb, (ftnlen)1);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (*nrhs == 1) {
|
||||||
dgemv_((char *)"T", m, n, &c_b79, &a[a_offset], lda, &b[b_offset], &c__1, &c_b46, &work[1],
|
dgemv_((char *)"T", m, n, &c_b79, &a[a_offset], lda, &b[b_offset], &c__1, &c_b46, &work[1],
|
||||||
&c__1, (ftnlen)1);
|
&c__1, (ftnlen)1);
|
||||||
dcopy_(n, &work[1], &c__1, &b[b_offset], &c__1);
|
dcopy_(n, &work[1], &c__1, &b[b_offset], &c__1);
|
||||||
|
|||||||
@ -4,11 +4,6 @@ extern "C" {
|
|||||||
#include "lmp_f2c.h"
|
#include "lmp_f2c.h"
|
||||||
int dlabad_(doublereal *small, doublereal *large)
|
int dlabad_(doublereal *small, doublereal *large)
|
||||||
{
|
{
|
||||||
double d_lmp_lg10(doublereal *), sqrt(doublereal);
|
|
||||||
if (d_lmp_lg10(large) > 2e3) {
|
|
||||||
*small = sqrt(*small);
|
|
||||||
*large = sqrt(*large);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -5,7 +5,7 @@ extern "C" {
|
|||||||
static doublereal c_b3 = -1.;
|
static doublereal c_b3 = -1.;
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
int dlaed2_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q, integer *ldq,
|
int dlaed2_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q, integer *ldq,
|
||||||
integer *indxq, doublereal *rho, doublereal *z__, doublereal *dlamda, doublereal *w,
|
integer *indxq, doublereal *rho, doublereal *z__, doublereal *dlambda, doublereal *w,
|
||||||
doublereal *q2, integer *indx, integer *indxc, integer *indxp, integer *coltyp,
|
doublereal *q2, integer *indx, integer *indxc, integer *indxp, integer *coltyp,
|
||||||
integer *info)
|
integer *info)
|
||||||
{
|
{
|
||||||
@ -35,7 +35,7 @@ int dlaed2_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
q -= q_offset;
|
q -= q_offset;
|
||||||
--indxq;
|
--indxq;
|
||||||
--z__;
|
--z__;
|
||||||
--dlamda;
|
--dlambda;
|
||||||
--w;
|
--w;
|
||||||
--q2;
|
--q2;
|
||||||
--indx;
|
--indx;
|
||||||
@ -75,9 +75,9 @@ int dlaed2_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
}
|
}
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
dlamda[i__] = d__[indxq[i__]];
|
dlambda[i__] = d__[indxq[i__]];
|
||||||
}
|
}
|
||||||
dlamrg_(n1, &n2, &dlamda[1], &c__1, &c__1, &indxc[1]);
|
dlamrg_(n1, &n2, &dlambda[1], &c__1, &c__1, &indxc[1]);
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
indx[i__] = indxq[indxc[i__]];
|
indx[i__] = indxq[indxc[i__]];
|
||||||
@ -94,11 +94,11 @@ int dlaed2_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
i__ = indx[j];
|
i__ = indx[j];
|
||||||
dcopy_(n, &q[i__ * q_dim1 + 1], &c__1, &q2[iq2], &c__1);
|
dcopy_(n, &q[i__ * q_dim1 + 1], &c__1, &q2[iq2], &c__1);
|
||||||
dlamda[j] = d__[i__];
|
dlambda[j] = d__[i__];
|
||||||
iq2 += *n;
|
iq2 += *n;
|
||||||
}
|
}
|
||||||
dlacpy_((char *)"A", n, n, &q2[1], n, &q[q_offset], ldq, (ftnlen)1);
|
dlacpy_((char *)"A", n, n, &q2[1], n, &q[q_offset], ldq, (ftnlen)1);
|
||||||
dcopy_(n, &dlamda[1], &c__1, &d__[1], &c__1);
|
dcopy_(n, &dlambda[1], &c__1, &d__[1], &c__1);
|
||||||
goto L190;
|
goto L190;
|
||||||
}
|
}
|
||||||
i__1 = *n1;
|
i__1 = *n1;
|
||||||
@ -176,7 +176,7 @@ L80:
|
|||||||
pj = nj;
|
pj = nj;
|
||||||
} else {
|
} else {
|
||||||
++(*k);
|
++(*k);
|
||||||
dlamda[*k] = d__[pj];
|
dlambda[*k] = d__[pj];
|
||||||
w[*k] = z__[pj];
|
w[*k] = z__[pj];
|
||||||
indxp[*k] = pj;
|
indxp[*k] = pj;
|
||||||
pj = nj;
|
pj = nj;
|
||||||
@ -185,7 +185,7 @@ L80:
|
|||||||
goto L80;
|
goto L80;
|
||||||
L100:
|
L100:
|
||||||
++(*k);
|
++(*k);
|
||||||
dlamda[*k] = d__[pj];
|
dlambda[*k] = d__[pj];
|
||||||
w[*k] = z__[pj];
|
w[*k] = z__[pj];
|
||||||
indxp[*k] = pj;
|
indxp[*k] = pj;
|
||||||
for (j = 1; j <= 4; ++j) {
|
for (j = 1; j <= 4; ++j) {
|
||||||
|
|||||||
@ -3,10 +3,10 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#include "lmp_f2c.h"
|
#include "lmp_f2c.h"
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
static doublereal c_b22 = 1.;
|
static doublereal c_b21 = 1.;
|
||||||
static doublereal c_b23 = 0.;
|
static doublereal c_b22 = 0.;
|
||||||
int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q, integer *ldq,
|
int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q, integer *ldq,
|
||||||
doublereal *rho, doublereal *dlamda, doublereal *q2, integer *indx, integer *ctot,
|
doublereal *rho, doublereal *dlambda, doublereal *q2, integer *indx, integer *ctot,
|
||||||
doublereal *w, doublereal *s, integer *info)
|
doublereal *w, doublereal *s, integer *info)
|
||||||
{
|
{
|
||||||
integer q_dim1, q_offset, i__1, i__2;
|
integer q_dim1, q_offset, i__1, i__2;
|
||||||
@ -20,10 +20,9 @@ int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
ftnlen, ftnlen),
|
ftnlen, ftnlen),
|
||||||
dcopy_(integer *, doublereal *, integer *, doublereal *, integer *),
|
dcopy_(integer *, doublereal *, integer *, doublereal *, integer *),
|
||||||
dlaed4_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *,
|
dlaed4_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *,
|
||||||
doublereal *, integer *);
|
doublereal *, integer *),
|
||||||
extern doublereal dlamc3_(doublereal *, doublereal *);
|
dlacpy_(char *, integer *, integer *, doublereal *, integer *, doublereal *, integer *,
|
||||||
extern int dlacpy_(char *, integer *, integer *, doublereal *, integer *, doublereal *,
|
ftnlen),
|
||||||
integer *, ftnlen),
|
|
||||||
dlaset_(char *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *,
|
dlaset_(char *, integer *, integer *, doublereal *, doublereal *, doublereal *, integer *,
|
||||||
ftnlen),
|
ftnlen),
|
||||||
xerbla_(char *, integer *, ftnlen);
|
xerbla_(char *, integer *, ftnlen);
|
||||||
@ -31,7 +30,7 @@ int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
q_dim1 = *ldq;
|
q_dim1 = *ldq;
|
||||||
q_offset = 1 + q_dim1;
|
q_offset = 1 + q_dim1;
|
||||||
q -= q_offset;
|
q -= q_offset;
|
||||||
--dlamda;
|
--dlambda;
|
||||||
--q2;
|
--q2;
|
||||||
--indx;
|
--indx;
|
||||||
--ctot;
|
--ctot;
|
||||||
@ -54,12 +53,8 @@ int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
i__1 = *k;
|
i__1 = *k;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
|
||||||
dlamda[i__] = dlamc3_(&dlamda[i__], &dlamda[i__]) - dlamda[i__];
|
|
||||||
}
|
|
||||||
i__1 = *k;
|
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
dlaed4_(k, &j, &dlamda[1], &w[1], &q[j * q_dim1 + 1], rho, &d__[j], info);
|
dlaed4_(k, &j, &dlambda[1], &w[1], &q[j * q_dim1 + 1], rho, &d__[j], info);
|
||||||
if (*info != 0) {
|
if (*info != 0) {
|
||||||
goto L120;
|
goto L120;
|
||||||
}
|
}
|
||||||
@ -86,11 +81,11 @@ int dlaed3_(integer *k, integer *n, integer *n1, doublereal *d__, doublereal *q,
|
|||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
i__2 = j - 1;
|
i__2 = j - 1;
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
for (i__ = 1; i__ <= i__2; ++i__) {
|
||||||
w[i__] *= q[i__ + j * q_dim1] / (dlamda[i__] - dlamda[j]);
|
w[i__] *= q[i__ + j * q_dim1] / (dlambda[i__] - dlambda[j]);
|
||||||
}
|
}
|
||||||
i__2 = *k;
|
i__2 = *k;
|
||||||
for (i__ = j + 1; i__ <= i__2; ++i__) {
|
for (i__ = j + 1; i__ <= i__2; ++i__) {
|
||||||
w[i__] *= q[i__ + j * q_dim1] / (dlamda[i__] - dlamda[j]);
|
w[i__] *= q[i__ + j * q_dim1] / (dlambda[i__] - dlambda[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i__1 = *k;
|
i__1 = *k;
|
||||||
@ -118,17 +113,17 @@ L110:
|
|||||||
dlacpy_((char *)"A", &n23, k, &q[ctot[1] + 1 + q_dim1], ldq, &s[1], &n23, (ftnlen)1);
|
dlacpy_((char *)"A", &n23, k, &q[ctot[1] + 1 + q_dim1], ldq, &s[1], &n23, (ftnlen)1);
|
||||||
iq2 = *n1 * n12 + 1;
|
iq2 = *n1 * n12 + 1;
|
||||||
if (n23 != 0) {
|
if (n23 != 0) {
|
||||||
dgemm_((char *)"N", (char *)"N", &n2, k, &n23, &c_b22, &q2[iq2], &n2, &s[1], &n23, &c_b23,
|
dgemm_((char *)"N", (char *)"N", &n2, k, &n23, &c_b21, &q2[iq2], &n2, &s[1], &n23, &c_b22,
|
||||||
&q[*n1 + 1 + q_dim1], ldq, (ftnlen)1, (ftnlen)1);
|
&q[*n1 + 1 + q_dim1], ldq, (ftnlen)1, (ftnlen)1);
|
||||||
} else {
|
} else {
|
||||||
dlaset_((char *)"A", &n2, k, &c_b23, &c_b23, &q[*n1 + 1 + q_dim1], ldq, (ftnlen)1);
|
dlaset_((char *)"A", &n2, k, &c_b22, &c_b22, &q[*n1 + 1 + q_dim1], ldq, (ftnlen)1);
|
||||||
}
|
}
|
||||||
dlacpy_((char *)"A", &n12, k, &q[q_offset], ldq, &s[1], &n12, (ftnlen)1);
|
dlacpy_((char *)"A", &n12, k, &q[q_offset], ldq, &s[1], &n12, (ftnlen)1);
|
||||||
if (n12 != 0) {
|
if (n12 != 0) {
|
||||||
dgemm_((char *)"N", (char *)"N", n1, k, &n12, &c_b22, &q2[1], n1, &s[1], &n12, &c_b23, &q[q_offset], ldq,
|
dgemm_((char *)"N", (char *)"N", n1, k, &n12, &c_b21, &q2[1], n1, &s[1], &n12, &c_b22, &q[q_offset], ldq,
|
||||||
(ftnlen)1, (ftnlen)1);
|
(ftnlen)1, (ftnlen)1);
|
||||||
} else {
|
} else {
|
||||||
dlaset_((char *)"A", n1, k, &c_b23, &c_b23, &q[q_dim1 + 1], ldq, (ftnlen)1);
|
dlaset_((char *)"A", n1, k, &c_b22, &c_b22, &q[q_dim1 + 1], ldq, (ftnlen)1);
|
||||||
}
|
}
|
||||||
L120:
|
L120:
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -6,7 +6,7 @@ static doublereal c_b3 = -1.;
|
|||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
int dlaed8_(integer *icompq, integer *k, integer *n, integer *qsiz, doublereal *d__, doublereal *q,
|
int dlaed8_(integer *icompq, integer *k, integer *n, integer *qsiz, doublereal *d__, doublereal *q,
|
||||||
integer *ldq, integer *indxq, doublereal *rho, integer *cutpnt, doublereal *z__,
|
integer *ldq, integer *indxq, doublereal *rho, integer *cutpnt, doublereal *z__,
|
||||||
doublereal *dlamda, doublereal *q2, integer *ldq2, doublereal *w, integer *perm,
|
doublereal *dlambda, doublereal *q2, integer *ldq2, doublereal *w, integer *perm,
|
||||||
integer *givptr, integer *givcol, doublereal *givnum, integer *indxp, integer *indx,
|
integer *givptr, integer *givcol, doublereal *givnum, integer *indxp, integer *indx,
|
||||||
integer *info)
|
integer *info)
|
||||||
{
|
{
|
||||||
@ -35,7 +35,7 @@ int dlaed8_(integer *icompq, integer *k, integer *n, integer *qsiz, doublereal *
|
|||||||
q -= q_offset;
|
q -= q_offset;
|
||||||
--indxq;
|
--indxq;
|
||||||
--z__;
|
--z__;
|
||||||
--dlamda;
|
--dlambda;
|
||||||
q2_dim1 = *ldq2;
|
q2_dim1 = *ldq2;
|
||||||
q2_offset = 1 + q2_dim1;
|
q2_offset = 1 + q2_dim1;
|
||||||
q2 -= q2_offset;
|
q2 -= q2_offset;
|
||||||
@ -87,15 +87,15 @@ int dlaed8_(integer *icompq, integer *k, integer *n, integer *qsiz, doublereal *
|
|||||||
}
|
}
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
dlamda[i__] = d__[indxq[i__]];
|
dlambda[i__] = d__[indxq[i__]];
|
||||||
w[i__] = z__[indxq[i__]];
|
w[i__] = z__[indxq[i__]];
|
||||||
}
|
}
|
||||||
i__ = 1;
|
i__ = 1;
|
||||||
j = *cutpnt + 1;
|
j = *cutpnt + 1;
|
||||||
dlamrg_(&n1, &n2, &dlamda[1], &c__1, &c__1, &indx[1]);
|
dlamrg_(&n1, &n2, &dlambda[1], &c__1, &c__1, &indx[1]);
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
d__[i__] = dlamda[indx[i__]];
|
d__[i__] = dlambda[indx[i__]];
|
||||||
z__[i__] = w[indx[i__]];
|
z__[i__] = w[indx[i__]];
|
||||||
}
|
}
|
||||||
imax = idamax_(n, &z__[1], &c__1);
|
imax = idamax_(n, &z__[1], &c__1);
|
||||||
@ -183,7 +183,7 @@ L80:
|
|||||||
} else {
|
} else {
|
||||||
++(*k);
|
++(*k);
|
||||||
w[*k] = z__[jlam];
|
w[*k] = z__[jlam];
|
||||||
dlamda[*k] = d__[jlam];
|
dlambda[*k] = d__[jlam];
|
||||||
indxp[*k] = jlam;
|
indxp[*k] = jlam;
|
||||||
jlam = j;
|
jlam = j;
|
||||||
}
|
}
|
||||||
@ -192,21 +192,21 @@ L80:
|
|||||||
L100:
|
L100:
|
||||||
++(*k);
|
++(*k);
|
||||||
w[*k] = z__[jlam];
|
w[*k] = z__[jlam];
|
||||||
dlamda[*k] = d__[jlam];
|
dlambda[*k] = d__[jlam];
|
||||||
indxp[*k] = jlam;
|
indxp[*k] = jlam;
|
||||||
L110:
|
L110:
|
||||||
if (*icompq == 0) {
|
if (*icompq == 0) {
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
jp = indxp[j];
|
jp = indxp[j];
|
||||||
dlamda[j] = d__[jp];
|
dlambda[j] = d__[jp];
|
||||||
perm[j] = indxq[indx[jp]];
|
perm[j] = indxq[indx[jp]];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
jp = indxp[j];
|
jp = indxp[j];
|
||||||
dlamda[j] = d__[jp];
|
dlambda[j] = d__[jp];
|
||||||
perm[j] = indxq[indx[jp]];
|
perm[j] = indxq[indx[jp]];
|
||||||
dcopy_(qsiz, &q[perm[j] * q_dim1 + 1], &c__1, &q2[j * q2_dim1 + 1], &c__1);
|
dcopy_(qsiz, &q[perm[j] * q_dim1 + 1], &c__1, &q2[j * q2_dim1 + 1], &c__1);
|
||||||
}
|
}
|
||||||
@ -214,10 +214,10 @@ L110:
|
|||||||
if (*k < *n) {
|
if (*k < *n) {
|
||||||
if (*icompq == 0) {
|
if (*icompq == 0) {
|
||||||
i__1 = *n - *k;
|
i__1 = *n - *k;
|
||||||
dcopy_(&i__1, &dlamda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
dcopy_(&i__1, &dlambda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
||||||
} else {
|
} else {
|
||||||
i__1 = *n - *k;
|
i__1 = *n - *k;
|
||||||
dcopy_(&i__1, &dlamda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
dcopy_(&i__1, &dlambda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
||||||
i__1 = *n - *k;
|
i__1 = *n - *k;
|
||||||
dlacpy_((char *)"A", qsiz, &i__1, &q2[(*k + 1) * q2_dim1 + 1], ldq2, &q[(*k + 1) * q_dim1 + 1],
|
dlacpy_((char *)"A", qsiz, &i__1, &q2[(*k + 1) * q2_dim1 + 1], ldq2, &q[(*k + 1) * q_dim1 + 1],
|
||||||
ldq, (ftnlen)1);
|
ldq, (ftnlen)1);
|
||||||
|
|||||||
@ -4,7 +4,7 @@ extern "C" {
|
|||||||
#include "lmp_f2c.h"
|
#include "lmp_f2c.h"
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
int dlaed9_(integer *k, integer *kstart, integer *kstop, integer *n, doublereal *d__, doublereal *q,
|
int dlaed9_(integer *k, integer *kstart, integer *kstop, integer *n, doublereal *d__, doublereal *q,
|
||||||
integer *ldq, doublereal *rho, doublereal *dlamda, doublereal *w, doublereal *s,
|
integer *ldq, doublereal *rho, doublereal *dlambda, doublereal *w, doublereal *s,
|
||||||
integer *lds, integer *info)
|
integer *lds, integer *info)
|
||||||
{
|
{
|
||||||
integer q_dim1, q_offset, s_dim1, s_offset, i__1, i__2;
|
integer q_dim1, q_offset, s_dim1, s_offset, i__1, i__2;
|
||||||
@ -15,14 +15,13 @@ int dlaed9_(integer *k, integer *kstart, integer *kstop, integer *n, doublereal
|
|||||||
extern doublereal dnrm2_(integer *, doublereal *, integer *);
|
extern doublereal dnrm2_(integer *, doublereal *, integer *);
|
||||||
extern int dcopy_(integer *, doublereal *, integer *, doublereal *, integer *),
|
extern int dcopy_(integer *, doublereal *, integer *, doublereal *, integer *),
|
||||||
dlaed4_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *,
|
dlaed4_(integer *, integer *, doublereal *, doublereal *, doublereal *, doublereal *,
|
||||||
doublereal *, integer *);
|
doublereal *, integer *),
|
||||||
extern doublereal dlamc3_(doublereal *, doublereal *);
|
xerbla_(char *, integer *, ftnlen);
|
||||||
extern int xerbla_(char *, integer *, ftnlen);
|
|
||||||
--d__;
|
--d__;
|
||||||
q_dim1 = *ldq;
|
q_dim1 = *ldq;
|
||||||
q_offset = 1 + q_dim1;
|
q_offset = 1 + q_dim1;
|
||||||
q -= q_offset;
|
q -= q_offset;
|
||||||
--dlamda;
|
--dlambda;
|
||||||
--w;
|
--w;
|
||||||
s_dim1 = *lds;
|
s_dim1 = *lds;
|
||||||
s_offset = 1 + s_dim1;
|
s_offset = 1 + s_dim1;
|
||||||
@ -49,13 +48,9 @@ int dlaed9_(integer *k, integer *kstart, integer *kstop, integer *n, doublereal
|
|||||||
if (*k == 0) {
|
if (*k == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
i__1 = *n;
|
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
|
||||||
dlamda[i__] = dlamc3_(&dlamda[i__], &dlamda[i__]) - dlamda[i__];
|
|
||||||
}
|
|
||||||
i__1 = *kstop;
|
i__1 = *kstop;
|
||||||
for (j = *kstart; j <= i__1; ++j) {
|
for (j = *kstart; j <= i__1; ++j) {
|
||||||
dlaed4_(k, &j, &dlamda[1], &w[1], &q[j * q_dim1 + 1], rho, &d__[j], info);
|
dlaed4_(k, &j, &dlambda[1], &w[1], &q[j * q_dim1 + 1], rho, &d__[j], info);
|
||||||
if (*info != 0) {
|
if (*info != 0) {
|
||||||
goto L120;
|
goto L120;
|
||||||
}
|
}
|
||||||
@ -77,11 +72,11 @@ int dlaed9_(integer *k, integer *kstart, integer *kstop, integer *n, doublereal
|
|||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
i__2 = j - 1;
|
i__2 = j - 1;
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
for (i__ = 1; i__ <= i__2; ++i__) {
|
||||||
w[i__] *= q[i__ + j * q_dim1] / (dlamda[i__] - dlamda[j]);
|
w[i__] *= q[i__ + j * q_dim1] / (dlambda[i__] - dlambda[j]);
|
||||||
}
|
}
|
||||||
i__2 = *k;
|
i__2 = *k;
|
||||||
for (i__ = j + 1; i__ <= i__2; ++i__) {
|
for (i__ = j + 1; i__ <= i__2; ++i__) {
|
||||||
w[i__] *= q[i__ + j * q_dim1] / (dlamda[i__] - dlamda[j]);
|
w[i__] *= q[i__ + j * q_dim1] / (dlambda[i__] - dlambda[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i__1 = *k;
|
i__1 = *k;
|
||||||
|
|||||||
@ -4,7 +4,7 @@ extern "C" {
|
|||||||
#include "lmp_f2c.h"
|
#include "lmp_f2c.h"
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
static integer c__0 = 0;
|
static integer c__0 = 0;
|
||||||
static doublereal c_b8 = 1.;
|
static doublereal c_b7 = 1.;
|
||||||
int dlasd8_(integer *icompq, integer *k, doublereal *d__, doublereal *z__, doublereal *vf,
|
int dlasd8_(integer *icompq, integer *k, doublereal *d__, doublereal *z__, doublereal *vf,
|
||||||
doublereal *vl, doublereal *difl, doublereal *difr, integer *lddifr, doublereal *dsigma,
|
doublereal *vl, doublereal *difl, doublereal *difr, integer *lddifr, doublereal *dsigma,
|
||||||
doublereal *work, integer *info)
|
doublereal *work, integer *info)
|
||||||
@ -62,19 +62,15 @@ int dlasd8_(integer *icompq, integer *k, doublereal *d__, doublereal *z__, doubl
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
i__1 = *k;
|
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
|
||||||
dsigma[i__] = dlamc3_(&dsigma[i__], &dsigma[i__]) - dsigma[i__];
|
|
||||||
}
|
|
||||||
iwk1 = 1;
|
iwk1 = 1;
|
||||||
iwk2 = iwk1 + *k;
|
iwk2 = iwk1 + *k;
|
||||||
iwk3 = iwk2 + *k;
|
iwk3 = iwk2 + *k;
|
||||||
iwk2i = iwk2 - 1;
|
iwk2i = iwk2 - 1;
|
||||||
iwk3i = iwk3 - 1;
|
iwk3i = iwk3 - 1;
|
||||||
rho = dnrm2_(k, &z__[1], &c__1);
|
rho = dnrm2_(k, &z__[1], &c__1);
|
||||||
dlascl_((char *)"G", &c__0, &c__0, &rho, &c_b8, k, &c__1, &z__[1], k, info, (ftnlen)1);
|
dlascl_((char *)"G", &c__0, &c__0, &rho, &c_b7, k, &c__1, &z__[1], k, info, (ftnlen)1);
|
||||||
rho *= rho;
|
rho *= rho;
|
||||||
dlaset_((char *)"A", k, &c__1, &c_b8, &c_b8, &work[iwk3], k, (ftnlen)1);
|
dlaset_((char *)"A", k, &c__1, &c_b7, &c_b7, &work[iwk3], k, (ftnlen)1);
|
||||||
i__1 = *k;
|
i__1 = *k;
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
dlasd4_(k, &j, &dsigma[1], &z__[1], &work[iwk1], &rho, &d__[j], &work[iwk2], info);
|
dlasd4_(k, &j, &dsigma[1], &z__[1], &work[iwk1], &rho, &d__[j], &work[iwk2], info);
|
||||||
|
|||||||
@ -16,7 +16,7 @@ int dlatrs_(char *uplo, char *trans, char *diag, char *normin, integer *n, doubl
|
|||||||
extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, integer *);
|
extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, integer *);
|
||||||
doublereal xbnd;
|
doublereal xbnd;
|
||||||
integer imax;
|
integer imax;
|
||||||
doublereal tmax, tjjs, xmax, grow, sumj;
|
doublereal tmax, tjjs, xmax, grow, sumj, work[1];
|
||||||
extern int dscal_(integer *, doublereal *, doublereal *, integer *);
|
extern int dscal_(integer *, doublereal *, doublereal *, integer *);
|
||||||
extern logical lsame_(char *, char *, ftnlen, ftnlen);
|
extern logical lsame_(char *, char *, ftnlen, ftnlen);
|
||||||
doublereal tscal, uscal;
|
doublereal tscal, uscal;
|
||||||
@ -100,7 +100,7 @@ int dlatrs_(char *uplo, char *trans, char *diag, char *normin, integer *n, doubl
|
|||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (j = 2; j <= i__1; ++j) {
|
for (j = 2; j <= i__1; ++j) {
|
||||||
i__2 = j - 1;
|
i__2 = j - 1;
|
||||||
d__1 = dlange_((char *)"M", &i__2, &c__1, &a[j * a_dim1 + 1], &c__1, &sumj, (ftnlen)1);
|
d__1 = dlange_((char *)"M", &i__2, &c__1, &a[j * a_dim1 + 1], &c__1, work, (ftnlen)1);
|
||||||
tmax = max(d__1, tmax);
|
tmax = max(d__1, tmax);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -108,7 +108,7 @@ int dlatrs_(char *uplo, char *trans, char *diag, char *normin, integer *n, doubl
|
|||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
i__2 = *n - j;
|
i__2 = *n - j;
|
||||||
d__1 =
|
d__1 =
|
||||||
dlange_((char *)"M", &i__2, &c__1, &a[j + 1 + j * a_dim1], &c__1, &sumj, (ftnlen)1);
|
dlange_((char *)"M", &i__2, &c__1, &a[j + 1 + j * a_dim1], &c__1, work, (ftnlen)1);
|
||||||
tmax = max(d__1, tmax);
|
tmax = max(d__1, tmax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,8 +7,7 @@ int drscl_(integer *n, doublereal *sa, doublereal *sx, integer *incx)
|
|||||||
doublereal mul, cden;
|
doublereal mul, cden;
|
||||||
logical done;
|
logical done;
|
||||||
doublereal cnum, cden1, cnum1;
|
doublereal cnum, cden1, cnum1;
|
||||||
extern int dscal_(integer *, doublereal *, doublereal *, integer *),
|
extern int dscal_(integer *, doublereal *, doublereal *, integer *);
|
||||||
dlabad_(doublereal *, doublereal *);
|
|
||||||
extern doublereal dlamch_(char *, ftnlen);
|
extern doublereal dlamch_(char *, ftnlen);
|
||||||
doublereal bignum, smlnum;
|
doublereal bignum, smlnum;
|
||||||
--sx;
|
--sx;
|
||||||
@ -17,7 +16,6 @@ int drscl_(integer *n, doublereal *sa, doublereal *sx, integer *incx)
|
|||||||
}
|
}
|
||||||
smlnum = dlamch_((char *)"S", (ftnlen)1);
|
smlnum = dlamch_((char *)"S", (ftnlen)1);
|
||||||
bignum = 1. / smlnum;
|
bignum = 1. / smlnum;
|
||||||
dlabad_(&smlnum, &bignum);
|
|
||||||
cden = *sa;
|
cden = *sa;
|
||||||
cnum = 1.;
|
cnum = 1.;
|
||||||
L10:
|
L10:
|
||||||
|
|||||||
@ -3,8 +3,8 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#include "lmp_f2c.h"
|
#include "lmp_f2c.h"
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
static real c_b176 = (float)0.;
|
static real c_b179 = (float)0.;
|
||||||
static real c_b177 = (float)1.;
|
static real c_b180 = (float)1.;
|
||||||
static integer c__0 = 0;
|
static integer c__0 = 0;
|
||||||
integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1, integer *n2, integer *n3,
|
integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1, integer *n2, integer *n3,
|
||||||
integer *n4, ftnlen name_len, ftnlen opts_len)
|
integer *n4, ftnlen name_len, ftnlen opts_len)
|
||||||
@ -201,6 +201,12 @@ L50:
|
|||||||
} else {
|
} else {
|
||||||
nb = 64;
|
nb = 64;
|
||||||
}
|
}
|
||||||
|
} else if (s_lmp_cmp(subnam + 3, (char *)"QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
|
||||||
|
if (sname) {
|
||||||
|
nb = 32;
|
||||||
|
} else {
|
||||||
|
nb = 32;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (s_lmp_cmp(c2, (char *)"PO", (ftnlen)2, (ftnlen)2) == 0) {
|
} else if (s_lmp_cmp(c2, (char *)"PO", (ftnlen)2, (ftnlen)2) == 0) {
|
||||||
if (s_lmp_cmp(c3, (char *)"TRF", (ftnlen)3, (ftnlen)3) == 0) {
|
if (s_lmp_cmp(c3, (char *)"TRF", (ftnlen)3, (ftnlen)3) == 0) {
|
||||||
@ -402,6 +408,12 @@ L60:
|
|||||||
} else {
|
} else {
|
||||||
nbmin = 2;
|
nbmin = 2;
|
||||||
}
|
}
|
||||||
|
} else if (s_lmp_cmp(subnam + 3, (char *)"QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
|
||||||
|
if (sname) {
|
||||||
|
nbmin = 2;
|
||||||
|
} else {
|
||||||
|
nbmin = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (s_lmp_cmp(c2, (char *)"SY", (ftnlen)2, (ftnlen)2) == 0) {
|
} else if (s_lmp_cmp(c2, (char *)"SY", (ftnlen)2, (ftnlen)2) == 0) {
|
||||||
if (s_lmp_cmp(c3, (char *)"TRF", (ftnlen)3, (ftnlen)3) == 0) {
|
if (s_lmp_cmp(c3, (char *)"TRF", (ftnlen)3, (ftnlen)3) == 0) {
|
||||||
@ -493,6 +505,12 @@ L70:
|
|||||||
} else {
|
} else {
|
||||||
nx = 128;
|
nx = 128;
|
||||||
}
|
}
|
||||||
|
} else if (s_lmp_cmp(subnam + 3, (char *)"QP3RK", (ftnlen)4, (ftnlen)5) == 0) {
|
||||||
|
if (sname) {
|
||||||
|
nx = 128;
|
||||||
|
} else {
|
||||||
|
nx = 128;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (s_lmp_cmp(c2, (char *)"SY", (ftnlen)2, (ftnlen)2) == 0) {
|
} else if (s_lmp_cmp(c2, (char *)"SY", (ftnlen)2, (ftnlen)2) == 0) {
|
||||||
if (sname && s_lmp_cmp(c3, (char *)"TRD", (ftnlen)3, (ftnlen)3) == 0) {
|
if (sname && s_lmp_cmp(c3, (char *)"TRD", (ftnlen)3, (ftnlen)3) == 0) {
|
||||||
@ -555,13 +573,13 @@ L130:
|
|||||||
L140:
|
L140:
|
||||||
ret_val = 1;
|
ret_val = 1;
|
||||||
if (ret_val == 1) {
|
if (ret_val == 1) {
|
||||||
ret_val = ieeeck_(&c__1, &c_b176, &c_b177);
|
ret_val = ieeeck_(&c__1, &c_b179, &c_b180);
|
||||||
}
|
}
|
||||||
return ret_val;
|
return ret_val;
|
||||||
L150:
|
L150:
|
||||||
ret_val = 1;
|
ret_val = 1;
|
||||||
if (ret_val == 1) {
|
if (ret_val == 1) {
|
||||||
ret_val = ieeeck_(&c__0, &c_b176, &c_b177);
|
ret_val = ieeeck_(&c__0, &c_b179, &c_b180);
|
||||||
}
|
}
|
||||||
return ret_val;
|
return ret_val;
|
||||||
L160:
|
L160:
|
||||||
|
|||||||
@ -5,7 +5,7 @@ extern "C" {
|
|||||||
static doublereal c_b3 = -1.;
|
static doublereal c_b3 = -1.;
|
||||||
static integer c__1 = 1;
|
static integer c__1 = 1;
|
||||||
int zlaed8_(integer *k, integer *n, integer *qsiz, doublecomplex *q, integer *ldq, doublereal *d__,
|
int zlaed8_(integer *k, integer *n, integer *qsiz, doublecomplex *q, integer *ldq, doublereal *d__,
|
||||||
doublereal *rho, integer *cutpnt, doublereal *z__, doublereal *dlamda,
|
doublereal *rho, integer *cutpnt, doublereal *z__, doublereal *dlambda,
|
||||||
doublecomplex *q2, integer *ldq2, doublereal *w, integer *indxp, integer *indx,
|
doublecomplex *q2, integer *ldq2, doublereal *w, integer *indxp, integer *indx,
|
||||||
integer *indxq, integer *perm, integer *givptr, integer *givcol, doublereal *givnum,
|
integer *indxq, integer *perm, integer *givptr, integer *givcol, doublereal *givnum,
|
||||||
integer *info)
|
integer *info)
|
||||||
@ -35,7 +35,7 @@ int zlaed8_(integer *k, integer *n, integer *qsiz, doublecomplex *q, integer *ld
|
|||||||
q -= q_offset;
|
q -= q_offset;
|
||||||
--d__;
|
--d__;
|
||||||
--z__;
|
--z__;
|
||||||
--dlamda;
|
--dlambda;
|
||||||
q2_dim1 = *ldq2;
|
q2_dim1 = *ldq2;
|
||||||
q2_offset = 1 + q2_dim1;
|
q2_offset = 1 + q2_dim1;
|
||||||
q2 -= q2_offset;
|
q2 -= q2_offset;
|
||||||
@ -86,15 +86,15 @@ int zlaed8_(integer *k, integer *n, integer *qsiz, doublecomplex *q, integer *ld
|
|||||||
}
|
}
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
dlamda[i__] = d__[indxq[i__]];
|
dlambda[i__] = d__[indxq[i__]];
|
||||||
w[i__] = z__[indxq[i__]];
|
w[i__] = z__[indxq[i__]];
|
||||||
}
|
}
|
||||||
i__ = 1;
|
i__ = 1;
|
||||||
j = *cutpnt + 1;
|
j = *cutpnt + 1;
|
||||||
dlamrg_(&n1, &n2, &dlamda[1], &c__1, &c__1, &indx[1]);
|
dlamrg_(&n1, &n2, &dlambda[1], &c__1, &c__1, &indx[1]);
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||||
d__[i__] = dlamda[indx[i__]];
|
d__[i__] = dlambda[indx[i__]];
|
||||||
z__[i__] = w[indx[i__]];
|
z__[i__] = w[indx[i__]];
|
||||||
}
|
}
|
||||||
imax = idamax_(n, &z__[1], &c__1);
|
imax = idamax_(n, &z__[1], &c__1);
|
||||||
@ -173,7 +173,7 @@ L70:
|
|||||||
} else {
|
} else {
|
||||||
++(*k);
|
++(*k);
|
||||||
w[*k] = z__[jlam];
|
w[*k] = z__[jlam];
|
||||||
dlamda[*k] = d__[jlam];
|
dlambda[*k] = d__[jlam];
|
||||||
indxp[*k] = jlam;
|
indxp[*k] = jlam;
|
||||||
jlam = j;
|
jlam = j;
|
||||||
}
|
}
|
||||||
@ -182,19 +182,19 @@ L70:
|
|||||||
L90:
|
L90:
|
||||||
++(*k);
|
++(*k);
|
||||||
w[*k] = z__[jlam];
|
w[*k] = z__[jlam];
|
||||||
dlamda[*k] = d__[jlam];
|
dlambda[*k] = d__[jlam];
|
||||||
indxp[*k] = jlam;
|
indxp[*k] = jlam;
|
||||||
L100:
|
L100:
|
||||||
i__1 = *n;
|
i__1 = *n;
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (j = 1; j <= i__1; ++j) {
|
||||||
jp = indxp[j];
|
jp = indxp[j];
|
||||||
dlamda[j] = d__[jp];
|
dlambda[j] = d__[jp];
|
||||||
perm[j] = indxq[indx[jp]];
|
perm[j] = indxq[indx[jp]];
|
||||||
zcopy_(qsiz, &q[perm[j] * q_dim1 + 1], &c__1, &q2[j * q2_dim1 + 1], &c__1);
|
zcopy_(qsiz, &q[perm[j] * q_dim1 + 1], &c__1, &q2[j * q2_dim1 + 1], &c__1);
|
||||||
}
|
}
|
||||||
if (*k < *n) {
|
if (*k < *n) {
|
||||||
i__1 = *n - *k;
|
i__1 = *n - *k;
|
||||||
dcopy_(&i__1, &dlamda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
dcopy_(&i__1, &dlambda[*k + 1], &c__1, &d__[*k + 1], &c__1);
|
||||||
i__1 = *n - *k;
|
i__1 = *n - *k;
|
||||||
zlacpy_((char *)"A", qsiz, &i__1, &q2[(*k + 1) * q2_dim1 + 1], ldq2, &q[(*k + 1) * q_dim1 + 1], ldq,
|
zlacpy_((char *)"A", qsiz, &i__1, &q2[(*k + 1) * q2_dim1 + 1], ldq2, &q[(*k + 1) * q_dim1 + 1], ldq,
|
||||||
(ftnlen)1);
|
(ftnlen)1);
|
||||||
|
|||||||
Reference in New Issue
Block a user