📄 clatmr.c
字号:
/* Compute DL if grading set */ if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 || igrade == 6) { clatm1_(model, condl, &c__0, &idist, &iseed[1], &dl[1], m, info); if (*info != 0) { *info = 3; return 0; } }/* Compute DR if grading set */ if (igrade == 2 || igrade == 3) { clatm1_(moder, condr, &c__0, &idist, &iseed[1], &dr[1], n, info); if (*info != 0) { *info = 4; return 0; } }/* 3) Generate IWORK if pivoting */ if (ipvtng > 0) { i__1 = npvts; for (i = 1; i <= i__1; ++i) { iwork[i] = i;/* L70: */ } if (fulbnd) { i__1 = npvts; for (i = 1; i <= i__1; ++i) { k = ipivot[i]; j = iwork[i]; iwork[i] = iwork[k]; iwork[k] = j;/* L80: */ } } else { for (i = npvts; i >= 1; --i) { k = ipivot[i]; j = iwork[i]; iwork[i] = iwork[k]; iwork[k] = j;/* L90: */ } } }/* 4) Generate matrices for each kind of PACKing Always sweep matrix columnwise (if symmetric, upper half only) so that matrix generated does not depend on PACK */ if (fulbnd) {/* Use CLATM3 so matrices generated with differing PIVOTing only differ only in the order of their rows and/or columns. */ if (ipack == 0) { if (isym == 0) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; i__3 = isub + jsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; i__3 = jsub + isub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i;/* L100: */ }/* L110: */ } } else if (isym == 1) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = *m; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; i__3 = isub + jsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;/* L120: */ }/* L130: */ } } else if (isym == 2) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; i__3 = isub + jsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; i__3 = jsub + isub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;/* L140: */ }/* L150: */ } } } else if (ipack == 1) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], & ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (mxsub == isub && isym == 0) { i__3 = mnsub + mxsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mnsub + mxsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; } if (mnsub != mxsub) { i__3 = mxsub + mnsub * a_dim1; a[i__3].r = 0.f, a[i__3].i = 0.f; }/* L160: */ }/* L170: */ } } else if (ipack == 2) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], & ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (mxsub == jsub && isym == 0) { i__3 = mxsub + mnsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mxsub + mnsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; } if (mnsub != mxsub) { i__3 = mnsub + mxsub * a_dim1; a[i__3].r = 0.f, a[i__3].i = 0.f; }/* L180: */ }/* L190: */ } } else if (ipack == 3) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], & ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i;/* Compute K = location of (ISUB,JSUB) entry in packed array */ mnsub = min(isub,jsub); mxsub = max(isub,jsub); k = mxsub * (mxsub - 1) / 2 + mnsub;/* Convert K to (IISUB,JJSUB) location */ jjsub = (k - 1) / *lda + 1; iisub = k - *lda * (jjsub - 1); if (mxsub == isub && isym == 0) { i__3 = iisub + jjsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = iisub + jjsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; }/* L200: */ }/* L210: */ } } else if (ipack == 4) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], & ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i;/* Compute K = location of (I,J) entry in packed array */ mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (mnsub == 1) { k = mxsub; } else { k = *n * (*n + 1) / 2 - (*n - mnsub + 1) * (*n - mnsub + 2) / 2 + mxsub - mnsub + 1; }/* Convert K to (IISUB,JJSUB) location */ jjsub = (k - 1) / *lda + 1; iisub = k - *lda * (jjsub - 1); if (mxsub == jsub && isym == 0) { i__3 = iisub + jjsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = iisub + jjsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; }/* L220: */ }/* L230: */ } } else if (ipack == 5) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = j - kuu; i <= i__2; ++i) { if (i < 1) { i__3 = j - i + 1 + (i + *n) * a_dim1; a[i__3].r = 0.f, a[i__3].i = 0.f; } else { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (mxsub == jsub && isym == 0) { i__3 = mxsub - mnsub + 1 + mnsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mxsub - mnsub + 1 + mnsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; } }/* L240: */ }/* L250: */ } } else if (ipack == 6) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = j - kuu; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], & ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (mxsub == isub && isym == 0) { i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; }/* L260: */ }/* L270: */ } } else if (ipack == 7) { if (isym != 1) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = j - kuu; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; mnsub = min(isub,jsub); mxsub = max(isub,jsub); if (i < 1) { i__3 = j - i + 1 + kuu + (i + *n) * a_dim1; a[i__3].r = 0.f, a[i__3].i = 0.f; } if (mxsub == isub && isym == 0) { i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; } if (i >= 1 && mnsub != mxsub) { if (mnsub == isub && isym == 0) { i__3 = mxsub - mnsub + 1 + kuu + mnsub * a_dim1; r_cnjg(&q__1, &ctemp); a[i__3].r = q__1.r, a[i__3].i = q__1.i; } else { i__3 = mxsub - mnsub + 1 + kuu + mnsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i; } }/* L280: */ }/* L290: */ } } else if (isym == 1) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j + kll; for (i = j - kuu; i <= i__2; ++i) { clatm3_(&q__1, m, n, &i, &j, &isub, &jsub, kl, ku, & idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[ 1], &ipvtng, &iwork[1], sparse); ctemp.r = q__1.r, ctemp.i = q__1.i; i__3 = isub - jsub + kuu + 1 + jsub * a_dim1; a[i__3].r = ctemp.r, a[i__3].i = ctemp.i;/* L300: */ }/* L310: */ } } } } else {/* Use CLATM2 */ if (ipack == 0) { if (isym == 0) { i__1 = *n; for (j = 1; j <= i__1; ++j) { i__2 = j; for (i = 1; i <= i__2; ++i) { i__3 = i + j * a_dim1; clatm2_(&q__1, m, n, &i, &j, kl, ku, &idist, &iseed[1] , &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -