⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlatmr.c

📁 SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems
💻 C
📖 第 1 页 / 共 3 页
字号:
		}/* L180: */	    }	} else if (ipack == 4) {	    i__1 = *n;	    for (j = 1; j <= i__1; ++j) {		i__2 = j;		for (i = 1; i <= i__2; ++i) {		    temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,			     &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &			    ipvtng, &iwork[1], sparse);/*                 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);		    a[iisub + jjsub * a_dim1] = temp;/* L190: */		}/* L200: */	    }	} 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) {			a[j - i + 1 + (i + *n) * a_dim1] = 0.;		    } else {			temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &				idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[				1], &ipvtng, &iwork[1], sparse);			mnsub = min(isub,jsub);			mxsub = max(isub,jsub);			a[mxsub - mnsub + 1 + mnsub * a_dim1] = temp;		    }/* L210: */		}/* L220: */	    }	} 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) {		    temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &idist,			     &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &			    ipvtng, &iwork[1], sparse);		    mnsub = min(isub,jsub);		    mxsub = max(isub,jsub);		    a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;/* L230: */		}/* L240: */	    }	} else if (ipack == 7) {	    if (isym == 0) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = j;		    for (i = j - kuu; i <= i__2; ++i) {			temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &				idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[				1], &ipvtng, &iwork[1], sparse);			mnsub = min(isub,jsub);			mxsub = max(isub,jsub);			a[mnsub - mxsub + kuu + 1 + mxsub * a_dim1] = temp;			if (i < 1) {			    a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.;			}			if (i >= 1 && mnsub != mxsub) {			    a[mxsub - mnsub + 1 + kuu + mnsub * a_dim1] = 				    temp;			}/* L250: */		    }/* L260: */		}	    } 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) {			temp = dlatm3_(m, n, &i, &j, &isub, &jsub, kl, ku, &				idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[				1], &ipvtng, &iwork[1], sparse);			a[isub - jsub + kuu + 1 + jsub * a_dim1] = temp;/* L270: */		    }/* L280: */		}	    }	}    } else {/*        Use DLATM2 */	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) {			a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &				idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[				1], &ipvtng, &iwork[1], sparse);			a[j + i * a_dim1] = a[i + j * a_dim1];/* L290: */		    }/* L300: */		}	    } else if (isym == 1) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = *m;		    for (i = 1; i <= i__2; ++i) {			a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &				idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[				1], &ipvtng, &iwork[1], sparse);/* L310: */		    }/* L320: */		}	    }	} else if (ipack == 1) {	    i__1 = *n;	    for (j = 1; j <= i__1; ++j) {		i__2 = j;		for (i = 1; i <= i__2; ++i) {		    a[i + j * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &idist, 			    &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &			    ipvtng, &iwork[1], sparse);		    if (i != j) {			a[j + i * a_dim1] = 0.;		    }/* L330: */		}/* L340: */	    }	} else if (ipack == 2) {	    i__1 = *n;	    for (j = 1; j <= i__1; ++j) {		i__2 = j;		for (i = 1; i <= i__2; ++i) {		    a[j + i * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &idist, 			    &iseed[1], &d[1], &igrade, &dl[1], &dr[1], &			    ipvtng, &iwork[1], sparse);		    if (i != j) {			a[i + j * a_dim1] = 0.;		    }/* L350: */		}/* L360: */	    }	} else if (ipack == 3) {	    isub = 0;	    jsub = 1;	    i__1 = *n;	    for (j = 1; j <= i__1; ++j) {		i__2 = j;		for (i = 1; i <= i__2; ++i) {		    ++isub;		    if (isub > *lda) {			isub = 1;			++jsub;		    }		    a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl, ku, &			    idist, &iseed[1], &d[1], &igrade, &dl[1], &dr[1], 			    &ipvtng, &iwork[1], sparse);/* L370: */		}/* L380: */	    }	} else if (ipack == 4) {	    if (isym == 0) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = j;		    for (i = 1; i <= i__2; ++i) {/*                    Compute K = location of (I,J) entry in packed array */			if (i == 1) {			    k = j;			} else {			    k = *n * (*n + 1) / 2 - (*n - i + 1) * (*n - i + 				    2) / 2 + j - i + 1;			}/*                    Convert K to (ISUB,JSUB) location */			jsub = (k - 1) / *lda + 1;			isub = k - *lda * (jsub - 1);			a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl, 				ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],				 &dr[1], &ipvtng, &iwork[1], sparse);/* L390: */		    }/* L400: */		}	    } else {		isub = 0;		jsub = 1;		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = *m;		    for (i = j; i <= i__2; ++i) {			++isub;			if (isub > *lda) {			    isub = 1;			    ++jsub;			}			a[isub + jsub * a_dim1] = dlatm2_(m, n, &i, &j, kl, 				ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],				 &dr[1], &ipvtng, &iwork[1], sparse);/* L410: */		    }/* L420: */		}	    }	} 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) {			a[j - i + 1 + (i + *n) * a_dim1] = 0.;		    } else {			a[j - i + 1 + i * a_dim1] = dlatm2_(m, n, &i, &j, kl, 				ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],				 &dr[1], &ipvtng, &iwork[1], sparse);		    }/* L430: */		}/* L440: */	    }	} 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) {		    a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &j, 			    kl, ku, &idist, &iseed[1], &d[1], &igrade, &dl[1],			     &dr[1], &ipvtng, &iwork[1], sparse);/* L450: */		}/* L460: */	    }	} else if (ipack == 7) {	    if (isym == 0) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = j;		    for (i = j - kuu; i <= i__2; ++i) {			a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &				j, kl, ku, &idist, &iseed[1], &d[1], &igrade, 				&dl[1], &dr[1], &ipvtng, &iwork[1], sparse);			if (i < 1) {			    a[j - i + 1 + kuu + (i + *n) * a_dim1] = 0.;			}			if (i >= 1 && i != j) {			    a[j - i + 1 + kuu + i * a_dim1] = a[i - j + kuu + 				    1 + j * a_dim1];			}/* L470: */		    }/* L480: */		}	    } 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) {			a[i - j + kuu + 1 + j * a_dim1] = dlatm2_(m, n, &i, &				j, kl, ku, &idist, &iseed[1], &d[1], &igrade, 				&dl[1], &dr[1], &ipvtng, &iwork[1], sparse);/* L490: */		    }/* L500: */		}	    }	}    }/*     5)      Scaling the norm */    if (ipack == 0) {	onorm = dlange_("M", m, n, &a[a_offset], lda, tempa);    } else if (ipack == 1) {	onorm = dlansy_("M", "U", n, &a[a_offset], lda, tempa);    } else if (ipack == 2) {	onorm = dlansy_("M", "L", n, &a[a_offset], lda, tempa);    } else if (ipack == 3) {	onorm = dlansp_("M", "U", n, &a[a_offset], tempa);    } else if (ipack == 4) {	onorm = dlansp_("M", "L", n, &a[a_offset], tempa);    } else if (ipack == 5) {	onorm = dlansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);    } else if (ipack == 6) {	onorm = dlansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);    } else if (ipack == 7) {	onorm = dlangb_("M", n, &kll, &kuu, &a[a_offset], lda, tempa);    }    if (*anorm >= 0.) {	if (*anorm > 0. && onorm == 0.) {/*           Desired scaling impossible */	    *info = 5;	    return 0;	} else if (*anorm > 1. && onorm < 1. || *anorm < 1. && onorm > 1.) {/*           Scale carefully to avoid over / underflow */	    if (ipack <= 2) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    d__1 = 1. / onorm;		    dscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);		    dscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);/* L510: */		}	    } else if (ipack == 3 || ipack == 4) {		i__1 = *n * (*n + 1) / 2;		d__1 = 1. / onorm;		dscal_(&i__1, &d__1, &a[a_offset], &c__1);		i__1 = *n * (*n + 1) / 2;		dscal_(&i__1, anorm, &a[a_offset], &c__1);	    } else if (ipack >= 5) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = kll + kuu + 1;		    d__1 = 1. / onorm;		    dscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);		    i__2 = kll + kuu + 1;		    dscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);/* L520: */		}	    }	} else {/*           Scale straightforwardly */	    if (ipack <= 2) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    d__1 = *anorm / onorm;		    dscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);/* L530: */		}	    } else if (ipack == 3 || ipack == 4) {		i__1 = *n * (*n + 1) / 2;		d__1 = *anorm / onorm;		dscal_(&i__1, &d__1, &a[a_offset], &c__1);	    } else if (ipack >= 5) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = kll + kuu + 1;		    d__1 = *anorm / onorm;		    dscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);/* L540: */		}	    }	}    }/*     End of DLATMR */    return 0;} /* dlatmr_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -