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

📄 zlatmr.c

📁 SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems
💻 C
📖 第 1 页 / 共 4 页
字号:
    }/*     Compute DL if grading set */    if (igrade == 1 || igrade == 3 || igrade == 4 || igrade == 5 || igrade == 	    6) {	zlatm1_(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) {	zlatm1_(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 ZLATM3 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) {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__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;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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) {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__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) {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__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) {		    zlatm3_(&z__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 = z__1.r, ctemp.i = z__1.i;		    mnsub = min(isub,jsub);		    mxsub = max(isub,jsub);		    if (mxsub == isub && isym == 0) {			i__3 = mnsub + mxsub * a_dim1;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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., a[i__3].i = 0.;		    }/* 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) {		    zlatm3_(&z__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 = z__1.r, ctemp.i = z__1.i;		    mnsub = min(isub,jsub);		    mxsub = max(isub,jsub);		    if (mxsub == jsub && isym == 0) {			i__3 = mxsub + mnsub * a_dim1;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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., a[i__3].i = 0.;		    }/* 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) {		    zlatm3_(&z__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 = z__1.r, ctemp.i = z__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;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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) {		    zlatm3_(&z__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 = z__1.r, ctemp.i = z__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;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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., a[i__3].i = 0.;		    } else {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__1.i;			mnsub = min(isub,jsub);			mxsub = max(isub,jsub);			if (mxsub == jsub && isym == 0) {			    i__3 = mxsub - mnsub + 1 + mnsub * a_dim1;			    d_cnjg(&z__1, &ctemp);			    a[i__3].r = z__1.r, a[i__3].i = z__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) {		    zlatm3_(&z__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 = z__1.r, ctemp.i = z__1.i;		    mnsub = min(isub,jsub);		    mxsub = max(isub,jsub);		    if (mxsub == isub && isym == 0) {			i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;			d_cnjg(&z__1, &ctemp);			a[i__3].r = z__1.r, a[i__3].i = z__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) {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__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., a[i__3].i = 0.;			}			if (mxsub == isub && isym == 0) {			    i__3 = mnsub - mxsub + kuu + 1 + mxsub * a_dim1;			    d_cnjg(&z__1, &ctemp);			    a[i__3].r = z__1.r, a[i__3].i = z__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;				d_cnjg(&z__1, &ctemp);				a[i__3].r = z__1.r, a[i__3].i = z__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) {			zlatm3_(&z__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 = z__1.r, ctemp.i = z__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 ZLATM2 */	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;			zlatm2_(&z__1, m, n, &i, &j, kl, ku, &idist, &iseed[1]

⌨️ 快捷键说明

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