diff options
author | = <henry.gouk@gmail.com> | 2013-11-20 01:06:51 +1300 |
---|---|---|
committer | = <henry.gouk@gmail.com> | 2013-11-20 01:06:51 +1300 |
commit | c78bcbf169fe90bdcdf762c654f63474bb618e1b (patch) | |
tree | 36464279722b87c419dedf25102674e72f751bc4 /src/ffts_real_nd.c | |
parent | 231e164ddb16ba4c763a2dda1034c979ab5b493d (diff) | |
download | ffts-c78bcbf169fe90bdcdf762c654f63474bb618e1b.zip ffts-c78bcbf169fe90bdcdf762c654f63474bb618e1b.tar.gz |
Fixed 9.
Diffstat (limited to 'src/ffts_real_nd.c')
-rw-r--r-- | src/ffts_real_nd.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/ffts_real_nd.c b/src/ffts_real_nd.c index bf46254..ea47bf3 100644 --- a/src/ffts_real_nd.c +++ b/src/ffts_real_nd.c @@ -95,19 +95,28 @@ void ffts_execute_nd_real_inv(ffts_plan_t *p, const void * in, void * out) { uint64_t *din = (uint64_t *)in; uint64_t *buf = p->buf; + uint64_t *buf2; uint64_t *dout = (uint64_t *)out; + size_t vol = 1; float *bufr = (float *)(p->buf); float *doutr = (float *)out; size_t i,j; + + for(i=0;i<p->rank;i++) { + vol *= p->Ns[i]; + } + + buf2 = buf + vol; + ffts_scalar_transpose(din, buf, p->Ms[0], p->Ns[0], p->transpose_buf); for(i=0;i<p->Ms[0];i++) { - p->plans[0]->transform(p->plans[0], buf + (i * p->Ns[0]), dout + (i * p->Ns[0])); + p->plans[0]->transform(p->plans[0], buf + (i * p->Ns[0]), buf2 + (i * p->Ns[0])); } - ffts_scalar_transpose(dout, buf, p->Ns[0], p->Ms[0], p->transpose_buf); + ffts_scalar_transpose(buf2, buf, p->Ns[0], p->Ms[0], p->transpose_buf); for(j=0;j<p->Ms[1];j++) { p->plans[1]->transform(p->plans[1], buf + (j * (p->Ms[0])), &doutr[j * p->Ns[1]]); } @@ -132,7 +141,7 @@ ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign) { p->Ns[i] = Ns[i]; vol *= Ns[i]; } - p->buf = valloc(sizeof(float) * 2 * vol); + p->buf = valloc(sizeof(float) * (sign < 0 ? 2 : 4) * vol); for(i=0;i<rank;i++) { p->Ms[i] = vol / p->Ns[i]; |