summaryrefslogtreecommitdiffstats
path: root/src/ffts_real_nd.c
diff options
context:
space:
mode:
author= <henry.gouk@gmail.com>2013-11-20 01:06:51 +1300
committer= <henry.gouk@gmail.com>2013-11-20 01:06:51 +1300
commitc78bcbf169fe90bdcdf762c654f63474bb618e1b (patch)
tree36464279722b87c419dedf25102674e72f751bc4 /src/ffts_real_nd.c
parent231e164ddb16ba4c763a2dda1034c979ab5b493d (diff)
downloadffts-c78bcbf169fe90bdcdf762c654f63474bb618e1b.zip
ffts-c78bcbf169fe90bdcdf762c654f63474bb618e1b.tar.gz
Fixed 9.
Diffstat (limited to 'src/ffts_real_nd.c')
-rw-r--r--src/ffts_real_nd.c15
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];
OpenPOWER on IntegriCloud