X(plan) X(plan_many_dft_r2c)(int rank, const int *n,
			     int howmany,
			     R *in, const int *inembed,
			     int istride, int idist,
			     C *out, const int *onembed,
			     int ostride, int odist, unsigned flags)
{
     R *ro, *io;
     int *nfi, *nfo;
     int inplace;
     X(plan) p;

     if (!X(many_kosherp)(rank, n, howmany)) return 0;

     X(extract_reim)(FFT_SIGN, out, &ro, &io);
     inplace = in == ro;

     p = X(mkapiplan)(
	  0, flags, 
	  X(mkproblem_rdft2_d)(
	       X(mktensor_rowmajor)(
		    rank, n,
		    X(rdft2_pad)(rank, n, inembed, inplace, 0, &nfi),
		    X(rdft2_pad)(rank, n, onembed, inplace, 1, &nfo),
		    istride, 2 * ostride), 
	       X(mktensor_1d)(howmany, idist, 2 * odist),
	       TAINT_UNALIGNED(in, flags),
	       TAINT_UNALIGNED(ro, flags), TAINT_UNALIGNED(io, flags),
	       R2HC));

     X(ifree0)(nfi);
     X(ifree0)(nfo);
     return p;
}
Exemplo n.º 2
0
X(plan) X(plan_many_dft)(int rank, const int *n,
			 int howmany,
			 C *in, const int *inembed,
			 int istride, int idist,
			 C *out, const int *onembed,
			 int ostride, int odist, int sign, unsigned flags)
{
     R *ri, *ii, *ro, *io;

     if (!X(many_kosherp)(rank, n, howmany)) return 0;

     X(extract_reim)(sign, in, &ri, &ii);
     X(extract_reim)(sign, out, &ro, &io);

     return 
	  X(mkapiplan)(sign, flags,
		       X(mkproblem_dft_d)(
			    X(mktensor_rowmajor)(rank, n, 
						 N0(inembed), N0(onembed),
						 2 * istride, 2 * ostride),
			    X(mktensor_1d)(howmany, 2 * idist, 2 * odist),
			    TAINT_UNALIGNED(ri, flags),
			    TAINT_UNALIGNED(ii, flags),
			    TAINT_UNALIGNED(ro, flags),
			    TAINT_UNALIGNED(io, flags)));
}
Exemplo n.º 3
0
X(plan) FFTEXP X(plan_many_dft_c2r)(int rank, const int *n,
			     int howmany,
			     C *in, const int *inembed,
			     int istride, int idist,
			     R *out, const int *onembed,
			     int ostride, int odist, unsigned flags)
{
     R *ri, *ii;
     int *nfi, *nfo;
     int inplace;
     X(plan) p;

     if (!X(many_kosherp)(rank, n, howmany)) return 0;

     X(extract_reim)(FFT_SIGN, in, &ri, &ii);
     inplace = out == ri;

     if (!inplace)
	  flags |= FFTW_DESTROY_INPUT;

     enter_sync();

     p = X(mkapiplan)(
	  0, flags,
	  X(mkproblem_rdft2_d)(
	       X(mktensor_rowmajor)(
		    rank, n, 
		    X (rdft2_pad)(rank, n, inembed, inplace, 1, &nfi),
		    X (rdft2_pad)(rank, n, onembed, inplace, 0, &nfo),
		    2 * istride, ostride),
	       X(mktensor_1d)(howmany, 2 * idist, odist),
	       TAINT_UNALIGNED(out, flags),
	       TAINT_UNALIGNED(ri, flags), TAINT_UNALIGNED(ii, flags),
	       HC2R));

     leave_sync();

     X(ifree0)(nfi);
     X(ifree0)(nfo);
     return p;
}