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

📄 zlatmr.c

📁 SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems
💻 C
📖 第 1 页 / 共 4 页
字号:
				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;			i__3 = j + i * a_dim1;			d_cnjg(&z__1, &a[i + j * a_dim1]);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L320: */		    }/* L330: */		}	    } else if (isym == 1) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    i__2 = *m;		    for (i = 1; i <= i__2; ++i) {			i__3 = i + j * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L340: */		    }/* L350: */		}	    } else if (isym == 2) {		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;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;			i__3 = j + i * a_dim1;			i__4 = i + j * a_dim1;			a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;/* L360: */		    }/* L370: */		}	    }	} else if (ipack == 1) {	    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;		    zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &			    d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],			     sparse);		    a[i__3].r = z__1.r, a[i__3].i = z__1.i;		    if (i != j) {			i__3 = j + i * a_dim1;			a[i__3].r = 0., a[i__3].i = 0.;		    }/* L380: */		}/* L390: */	    }	} else if (ipack == 2) {	    i__1 = *n;	    for (j = 1; j <= i__1; ++j) {		i__2 = j;		for (i = 1; i <= i__2; ++i) {		    if (isym == 0) {			i__3 = j + i * a_dim1;			zlatm2_(&z__2, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			d_cnjg(&z__1, &z__2);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;		    } else {			i__3 = j + i * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;		    }		    if (i != j) {			i__3 = i + j * a_dim1;			a[i__3].r = 0., a[i__3].i = 0.;		    }/* L400: */		}/* L410: */	    }	} 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;		    }		    i__3 = isub + jsub * a_dim1;		    zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &			    d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],			     sparse);		    a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L420: */		}/* L430: */	    }	} else if (ipack == 4) {	    if (isym == 0 || isym == 2) {		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);			i__3 = isub + jsub * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;			if (isym == 0) {			    i__3 = isub + jsub * a_dim1;			    d_cnjg(&z__1, &a[isub + jsub * a_dim1]);			    a[i__3].r = z__1.r, a[i__3].i = z__1.i;			}/* L440: */		    }/* L450: */		}	    } 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;			}			i__3 = isub + jsub * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L460: */		    }/* L470: */		}	    }	} 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., a[i__3].i = 0.;		    } else {			if (isym == 0) {			    i__3 = j - i + 1 + i * a_dim1;			    zlatm2_(&z__2, m, n, &i, &j, kl, ku, &idist, &				    iseed[1], &d[1], &igrade, &dl[1], &dr[1], 				    &ipvtng, &iwork[1], sparse);			    d_cnjg(&z__1, &z__2);			    a[i__3].r = z__1.r, a[i__3].i = z__1.i;			} else {			    i__3 = j - i + 1 + i * a_dim1;			    zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &				    iseed[1], &d[1], &igrade, &dl[1], &dr[1], 				    &ipvtng, &iwork[1], sparse);			    a[i__3].r = z__1.r, a[i__3].i = z__1.i;			}		    }/* L480: */		}/* L490: */	    }	} 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) {		    i__3 = i - j + kuu + 1 + j * a_dim1;		    zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1], &			    d[1], &igrade, &dl[1], &dr[1], &ipvtng, &iwork[1],			     sparse);		    a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L500: */		}/* L510: */	    }	} 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) {			i__3 = i - j + kuu + 1 + j * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;			if (i < 1) {			    i__3 = j - i + 1 + kuu + (i + *n) * a_dim1;			    a[i__3].r = 0., a[i__3].i = 0.;			}			if (i >= 1 && i != j) {			    if (isym == 0) {				i__3 = j - i + 1 + kuu + i * a_dim1;				d_cnjg(&z__1, &a[i - j + kuu + 1 + j * a_dim1]					);				a[i__3].r = z__1.r, a[i__3].i = z__1.i;			    } else {				i__3 = j - i + 1 + kuu + i * a_dim1;				i__4 = i - j + kuu + 1 + j * a_dim1;				a[i__3].r = a[i__4].r, a[i__3].i = a[i__4].i;			    }			}/* L520: */		    }/* L530: */		}	    } 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) {			i__3 = i - j + kuu + 1 + j * a_dim1;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]				, &d[1], &igrade, &dl[1], &dr[1], &ipvtng, &				iwork[1], sparse);			a[i__3].r = z__1.r, a[i__3].i = z__1.i;/* L540: */		    }/* L550: */		}	    }	}    }/*     5)      Scaling the norm */    if (ipack == 0) {	onorm = zlange_("M", m, n, &a[a_offset], lda, tempa);    } else if (ipack == 1) {	onorm = zlansy_("M", "U", n, &a[a_offset], lda, tempa);    } else if (ipack == 2) {	onorm = zlansy_("M", "L", n, &a[a_offset], lda, tempa);    } else if (ipack == 3) {	onorm = zlansp_("M", "U", n, &a[a_offset], tempa);    } else if (ipack == 4) {	onorm = zlansp_("M", "L", n, &a[a_offset], tempa);    } else if (ipack == 5) {	onorm = zlansb_("M", "L", n, &kll, &a[a_offset], lda, tempa);    } else if (ipack == 6) {	onorm = zlansb_("M", "U", n, &kuu, &a[a_offset], lda, tempa);    } else if (ipack == 7) {	onorm = zlangb_("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;		    zdscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);		    zdscal_(m, anorm, &a[j * a_dim1 + 1], &c__1);/* L560: */		}	    } else if (ipack == 3 || ipack == 4) {		i__1 = *n * (*n + 1) / 2;		d__1 = 1. / onorm;		zdscal_(&i__1, &d__1, &a[a_offset], &c__1);		i__1 = *n * (*n + 1) / 2;		zdscal_(&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;		    zdscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);		    i__2 = kll + kuu + 1;		    zdscal_(&i__2, anorm, &a[j * a_dim1 + 1], &c__1);/* L570: */		}	    }	} else {/*           Scale straightforwardly */	    if (ipack <= 2) {		i__1 = *n;		for (j = 1; j <= i__1; ++j) {		    d__1 = *anorm / onorm;		    zdscal_(m, &d__1, &a[j * a_dim1 + 1], &c__1);/* L580: */		}	    } else if (ipack == 3 || ipack == 4) {		i__1 = *n * (*n + 1) / 2;		d__1 = *anorm / onorm;		zdscal_(&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;		    zdscal_(&i__2, &d__1, &a[j * a_dim1 + 1], &c__1);/* L590: */		}	    }	}    }/*     End of ZLATMR */    return 0;} /* zlatmr_ */

⌨️ 快捷键说明

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