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

📄 fftpack.cpp

📁 Add c++ support for Gaussian Quadrature v1.1
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	ipm = ip - 1;	arg1 = (real_t) l1 * argh;	ch1 = REAL_CONSTANT(1.0);	sh1 = REAL_CONSTANT(0.0);	dch1 = cos(arg1);	dsh1 = sin(arg1);	i__2 = ipm;	for (j = 1; j <= i__2; ++j) {	    ch1h = dch1 * ch1 - dsh1 * sh1;	    sh1 = dch1 * sh1 + dsh1 * ch1;	    ch1 = ch1h;	    i__ = is + 2;	    wa[i__ - 1] = ch1;	    wa[i__] = sh1;	    if (ido < 5) {		goto L109;	    }	    i__3 = ido;	    for (ii = 5; ii <= i__3; ii += 2) {		i__ += 2;		wa[i__ - 1] = ch1 * wa[i__ - 3] - sh1 * wa[i__ - 2];		wa[i__] = ch1 * wa[i__ - 2] + sh1 * wa[i__ - 3];/* L108: */	    }L109:	    is += ido;/* L110: */	}	l1 = l2;/* L111: */    }    return;} /* ezfft1_ *//* Subroutine */ void ezfftb(integer_t *n, real_t *r__, real_t *azero, 	real_t *a, real_t *b, real_t *wsave, integer_t *ifac){    /* System generated locals */    integer_t i__1;    /* Local variables */    integer_t i__, ns2;    /* Parameter adjustments */    --ifac;    --wsave;    --b;    --a;    --r__;    /* Function Body */    if ((i__1 = *n - 2) < 0) {	goto L101;    } else if (i__1 == 0) {	goto L102;    } else {	goto L103;    }L101:    r__[1] = *azero;    return;L102:    r__[1] = *azero + a[1];    r__[2] = *azero - a[1];    return;L103:    ns2 = (*n - 1) / 2;    i__1 = ns2;    for (i__ = 1; i__ <= i__1; ++i__) {	r__[i__ * 2] = a[i__] * REAL_CONSTANT(0.5);	r__[(i__ << 1) + 1] = b[i__] * REAL_CONSTANT(-0.5);/* L104: */    }    r__[1] = *azero;    if (*n % 2 == 0) {	r__[*n] = a[ns2 + 1];    }    rfftb(n, &r__[1], &wsave[*n + 1], &ifac[1]);    return;} /* ezfftb_ *//* Subroutine */ void ezfftf(integer_t *n, real_t *r__, real_t *azero, 	real_t *a, real_t *b, real_t *wsave, integer_t *ifac){    /* System generated locals */    integer_t i__1;    /* Local variables */    integer_t i__;    real_t cf;    integer_t ns2;    real_t cfm;    integer_t ns2m;/*                       VERSION 3  JUNE 1979 */    /* Parameter adjustments */    --ifac;    --wsave;    --b;    --a;    --r__;    /* Function Body */    if ((i__1 = *n - 2) < 0) {	goto L101;    } else if (i__1 == 0) {	goto L102;    } else {	goto L103;    }L101:    *azero = r__[1];    return;L102:    *azero = (r__[1] + r__[2]) * REAL_CONSTANT(0.5);    a[1] = (r__[1] - r__[2]) * REAL_CONSTANT(0.5);    return;L103:    i__1 = *n;    for (i__ = 1; i__ <= i__1; ++i__) {	wsave[i__] = r__[i__];/* L104: */    }    rfftf(n, &wsave[1], &wsave[*n + 1], &ifac[1]);    cf = 2.0 / (real_t) (*n);    cfm = -cf;    *azero = cf * 0.5 * wsave[1];    ns2 = (*n + 1) / 2;    ns2m = ns2 - 1;    i__1 = ns2m;    for (i__ = 1; i__ <= i__1; ++i__) {	a[i__] = cf * wsave[i__ * 2];	b[i__] = cfm * wsave[(i__ << 1) + 1];/* L105: */    }    if (*n % 2 == 1) {	return;    }    a[ns2] = cf * 0.5 * wsave[*n];    b[ns2] = REAL_CONSTANT(0.0);    return;} /* ezfftf_ *//* Subroutine */ void ezffti(integer_t *n, real_t *wsave, integer_t *ifac){    /* Parameter adjustments */    --ifac;    --wsave;    /* Function Body */    if (*n == 1) {	return;    }    ezfft1(n, &wsave[(*n << 1) + 1], &ifac[1]);    return;} /* ezffti_ *//* Subroutine */ static void passb(integer_t *nac, integer_t *ido, integer_t *ip, integer_t *	l1, integer_t *idl1, real_t *cc, real_t *c1, real_t *c2, 	real_t *ch, real_t *ch2, real_t *wa){    /* System generated locals */    integer_t ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 	    i__1, i__2, i__3;    /* Local variables */    integer_t i__, j, k, l, jc, lc, ik, nt, idj, idl, inc, idp;    real_t wai, war;    integer_t ipp2, idij, idlj, idot, ipph;    /* Parameter adjustments */    ch_dim1 = *ido;    ch_dim2 = *l1;    ch_offset = 1 + ch_dim1 * (1 + ch_dim2);    ch -= ch_offset;    c1_dim1 = *ido;    c1_dim2 = *l1;    c1_offset = 1 + c1_dim1 * (1 + c1_dim2);    c1 -= c1_offset;    cc_dim1 = *ido;    cc_dim2 = *ip;    cc_offset = 1 + cc_dim1 * (1 + cc_dim2);    cc -= cc_offset;    ch2_dim1 = *idl1;    ch2_offset = 1 + ch2_dim1;    ch2 -= ch2_offset;    c2_dim1 = *idl1;    c2_offset = 1 + c2_dim1;    c2 -= c2_offset;    --wa;    /* Function Body */    idot = *ido / 2;    nt = *ip * *idl1;    ipp2 = *ip + 2;    ipph = (*ip + 1) / 2;    idp = *ip * *ido;    if (*ido < *l1) {	goto L106;    }    i__1 = ipph;    for (j = 2; j <= i__1; ++j) {	jc = ipp2 - j;	i__2 = *l1;	for (k = 1; k <= i__2; ++k) {	    i__3 = *ido;	    for (i__ = 1; i__ <= i__3; ++i__) {		ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 			cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 			cc_dim1];		ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 			cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 			cc_dim1];/* L101: */	    }/* L102: */	}/* L103: */    }    i__1 = *l1;    for (k = 1; k <= i__1; ++k) {	i__2 = *ido;	for (i__ = 1; i__ <= i__2; ++i__) {	    ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 		    cc_dim1];/* L104: */	}/* L105: */    }    goto L112;L106:    i__1 = ipph;    for (j = 2; j <= i__1; ++j) {	jc = ipp2 - j;	i__2 = *ido;	for (i__ = 1; i__ <= i__2; ++i__) {	    i__3 = *l1;	    for (k = 1; k <= i__3; ++k) {		ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 			cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 			cc_dim1];		ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 			cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 			cc_dim1];/* L107: */	    }/* L108: */	}/* L109: */    }    i__1 = *ido;    for (i__ = 1; i__ <= i__1; ++i__) {	i__2 = *l1;	for (k = 1; k <= i__2; ++k) {	    ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 		    cc_dim1];/* L110: */	}/* L111: */    }L112:    idl = 2 - *ido;    inc = 0;    i__1 = ipph;    for (l = 2; l <= i__1; ++l) {	lc = ipp2 - l;	idl += *ido;	i__2 = *idl1;	for (ik = 1; ik <= i__2; ++ik) {	    c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik 		    + (ch2_dim1 << 1)];	    c2[ik + lc * c2_dim1] = wa[idl] * ch2[ik + *ip * ch2_dim1];/* L113: */	}	idlj = idl;	inc += *ido;	i__2 = ipph;	for (j = 3; j <= i__2; ++j) {	    jc = ipp2 - j;	    idlj += inc;	    if (idlj > idp) {		idlj -= idp;	    }	    war = wa[idlj - 1];	    wai = wa[idlj];	    i__3 = *idl1;	    for (ik = 1; ik <= i__3; ++ik) {		c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1];		c2[ik + lc * c2_dim1] += wai * ch2[ik + jc * ch2_dim1];/* L114: */	    }/* L115: */	}/* L116: */    }    i__1 = ipph;    for (j = 2; j <= i__1; ++j) {	i__2 = *idl1;	for (ik = 1; ik <= i__2; ++ik) {	    ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];/* L117: */	}/* L118: */    }    i__1 = ipph;    for (j = 2; j <= i__1; ++j) {	jc = ipp2 - j;	i__2 = *idl1;	for (ik = 2; ik <= i__2; ik += 2) {	    ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + 		    jc * c2_dim1];	    ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + 		    jc * c2_dim1];	    ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * 		    c2_dim1];	    ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * 		    c2_dim1];/* L119: */	}/* L120: */    }    *nac = 1;    if (*ido == 2) {	return;    }    *nac = 0;    i__1 = *idl1;    for (ik = 1; ik <= i__1; ++ik) {	c2[ik + c2_dim1] = ch2[ik + ch2_dim1];/* L121: */    }    i__1 = *ip;    for (j = 2; j <= i__1; ++j) {	i__2 = *l1;	for (k = 1; k <= i__2; ++k) {	    c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 		    ch_dim1 + 1];	    c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * 		    ch_dim1 + 2];/* L122: */	}/* L123: */    }    if (idot > *l1) {	goto L127;    }    idij = 0;    i__1 = *ip;    for (j = 2; j <= i__1; ++j) {	idij += 2;	i__2 = *ido;	for (i__ = 4; i__ <= i__2; i__ += 2) {	    idij += 2;	    i__3 = *l1;	    for (k = 1; k <= i__3; ++k) {		c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[			i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 			ch[i__ + (k + j * ch_dim2) * ch_dim1];		c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 			+ (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 			1 + (k + j * ch_dim2) * ch_dim1];/* L124: */	    }/* L125: */	}/* L126: */    }    return;L127:    idj = 2 - *ido;    i__1 = *ip;    for (j = 2; j <= i__1; ++j) {	idj += *ido;	i__2 = *l1;	for (k = 1; k <= i__2; ++k) {	    idij = idj;	    i__3 = *ido;	    for (i__ = 4; i__ <= i__3; i__ += 2) {		idij += 2;		c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[			i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 			ch[i__ + (k + j * ch_dim2) * ch_dim1];		c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 			+ (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 			1 + (k + j * ch_dim2) * ch_dim1];/* L128: */	    }/* L129: */	}/* L130: */    }    return;} /* passb_ *//* Subroutine */ static void passb2(integer_t *ido, integer_t *l1, real_t *cc, 	real_t *ch, real_t *wa1){    /* System generated locals */    integer_t cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;    /* Local variables */    integer_t i__, k;    real_t ti2, tr2;    /* Parameter adjustments */    ch_dim1 = *ido;    ch_dim2 = *l1;    ch_offset = 1 + ch_dim1 * (1 + ch_dim2);    ch -= ch_offset;    cc_dim1 = *ido;    cc_offset = 1 + cc_dim1 * 3;    cc -= cc_offset;    --wa1;    /* Function Body */    if (*ido > 2) {	goto L102;    }    i__1 = *l1;    for (k = 1; k <= i__1; ++k) {	ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 		cc[((k << 1) + 2) * cc_dim1 + 1];	ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 		+ 1] - cc[((k << 1) + 2) * cc_dim1 + 1];	ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + 		cc[((k << 1) + 2) * cc_dim1 + 2];	ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 		+ 2] - cc[((k << 1) + 2) * cc_dim1 + 2];/* L101: */    }    return;L102:    i__1 = *l1;    for (k = 1; k <= i__1; ++k) {	i__2 = *ido;	for (i__ = 2; i__ <= i__2; i__ += 2) {	    ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 		    1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1];	    tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<		     1) + 2) * cc_dim1];	    ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 		    cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1];	    ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2)		     * cc_dim1];	    ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 + 		    wa1[i__] * tr2;	    ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 		    - wa1[i__] * ti2;/* L103: */	}/* L104: */    }    return;} /* passb2_ *//* Subroutine */ static void passb3(integer_t *ido, integer_t *l1, real_t *cc, 	real_t *ch, real_t *wa1, real_t *wa2){    /* Initialized data */    static real_t taur = REAL_CONSTANT(-0.5);    static real_t taui = 	    REAL_CONSTANT(0.8660254037844386467637231707529361834710262690519031402790348975);    /* System generated locals */    integer_t cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;    /* Local variables */    integer_t i__, k;    real_t ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;    /* Parameter adjustments */    ch_dim1 = *ido;    ch_dim2 = *l1;    ch_offset = 1 + ch_dim1 * (1 + ch_dim2);    ch -= ch_offset;

⌨️ 快捷键说明

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