|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
#include <math.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <time.h>
|
|
|
|
|
#include "chunk_array.h"
|
|
|
|
|
#include "file_array.h"
|
|
|
|
|
|
|
|
|
|
/*fast fourier transform */
|
|
|
|
|
/* THE COOLEY-TUKEY FAST FOURIER TRANSFORM */
|
|
|
|
@ -91,7 +91,7 @@
|
|
|
|
|
/* PROGRAM MODIFIED FROM A SUBROUTINE OF BRENNER */
|
|
|
|
|
/* 10-06-2000, MLR */
|
|
|
|
|
|
|
|
|
|
void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int ifrwd, int icplx, double* workr, double* worki, int cores) {
|
|
|
|
|
void fourt(file_array_t* datar, file_array_t* datai, int nn[3], int ndim, int ifrwd, int icplx, double* workr, double* worki, int cores) {
|
|
|
|
|
int ifact[21], ntot, idim, np1, n, np2, m, ntwo, iff, idiv, iquot, irem, inon2, non2p, np0, nprev, icase, ifmin, i, j, jmax, np2hf, i2, i1max, i3, j3, i1, ifp1, ifp2, i2max, i1rng, istep, imin, imax, mmax, mmin, mstep, j1, j2max, j2, jmin, j3max, nhalf;
|
|
|
|
|
double theta, wstpr, wstpi, wminr, wmini, wr, wi, wtemp, thetm, wmstr, wmsti, twowr, sr, si, oldsr, oldsi, stmpr, stmpi, tempr, tempi, difi, difr, sumr, sumi, TWOPI = 6.283185307179586476925286766559;
|
|
|
|
|
double valueri, valueri1, valueri3, valueii3, valuerj3, valueij3, valuerj, valueij, valueii, valuerimin, valueiimin, valuei1, valuer1;
|
|
|
|
@ -101,8 +101,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
ntot *= nn[idim];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
chunk_array_read(datar);
|
|
|
|
|
chunk_array_read(datai);
|
|
|
|
|
file_array_read(datar);
|
|
|
|
|
file_array_read(datai);
|
|
|
|
|
|
|
|
|
|
/*main loop for each dimension*/
|
|
|
|
|
np1 = 1;
|
|
|
|
@ -189,14 +189,10 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
ntot /= 2;
|
|
|
|
|
i = 1;
|
|
|
|
|
for (j = 1; j <= ntot; j++) {
|
|
|
|
|
chunk_array_get(datar, i, &valueri);
|
|
|
|
|
////printf("[1] datar[%d] = %f\n", i, valueri);
|
|
|
|
|
chunk_array_get(datar, i+1, &valueri1);
|
|
|
|
|
////printf("[2] datar[%d] = %f\n", i+1, valueri1);
|
|
|
|
|
////printf("[48] Saving in datar the value %f in pos %d\n", valueri, j);
|
|
|
|
|
////printf("[49] Saving in datai the value %f in pos %d\n", valueri1, j);
|
|
|
|
|
chunk_array_save(datar, j, valueri);
|
|
|
|
|
chunk_array_save(datai, j, valueri1);
|
|
|
|
|
file_array_get(datar, i, &valueri);
|
|
|
|
|
file_array_get(datar, i+1, &valueri1);
|
|
|
|
|
file_array_save(datar, j, valueri);
|
|
|
|
|
file_array_save(datai, j, valueri1);
|
|
|
|
|
i += 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -214,28 +210,18 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
for (i3 = i1; i3 <= ntot; i3 += np2) {
|
|
|
|
|
j3 = j + i3 - i2;
|
|
|
|
|
|
|
|
|
|
chunk_array_get(datar, i3, &valueri3);
|
|
|
|
|
chunk_array_get(datai, i3, &valueii3);
|
|
|
|
|
chunk_array_get(datar, j3, &valuerj3);
|
|
|
|
|
chunk_array_get(datai, j3, &valueij3);
|
|
|
|
|
|
|
|
|
|
//printf("[3] datar[%d] = %f\n", i3, valueri3);
|
|
|
|
|
//printf("[4] datai[%d] = %f\n", i3, valueii3);
|
|
|
|
|
//printf("[5] datar[%d] = %f\n", j3, valuerj3);
|
|
|
|
|
//printf("[6] datai[%d] = %f\n", j3, valueij3);
|
|
|
|
|
file_array_get(datar, i3, &valueri3);
|
|
|
|
|
file_array_get(datai, i3, &valueii3);
|
|
|
|
|
file_array_get(datar, j3, &valuerj3);
|
|
|
|
|
file_array_get(datai, j3, &valueij3);
|
|
|
|
|
|
|
|
|
|
tempr = valueri3;
|
|
|
|
|
tempi = valueii3;
|
|
|
|
|
|
|
|
|
|
//printf("[50] Saving in datar the value %f in pos %d\n", valuerj3, i3);
|
|
|
|
|
//printf("[51] Saving in datai the value %f in pos %d\n", valueij3, i3);
|
|
|
|
|
//printf("[52] Saving in datar the value %f in pos %d\n", tempr, j3);
|
|
|
|
|
//printf("[53] Saving in datai the value %f in pos %d\n", tempi, j3);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i3, valuerj3);
|
|
|
|
|
chunk_array_save(datai, i3, valueij3);
|
|
|
|
|
chunk_array_save(datar, j3, tempr);
|
|
|
|
|
chunk_array_save(datai, j3, tempi);
|
|
|
|
|
file_array_save(datar, i3, valuerj3);
|
|
|
|
|
file_array_save(datai, i3, valueij3);
|
|
|
|
|
file_array_save(datar, j3, tempr);
|
|
|
|
|
file_array_save(datai, j3, tempi);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -260,11 +246,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
for (i3 = i1; i3 <= ntot; i3 += np2) {
|
|
|
|
|
j = i3;
|
|
|
|
|
for (i = 1; i <= n; i++) {
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[7] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[8] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
if (icase != 3) {
|
|
|
|
|
workr[i] = valuerj;
|
|
|
|
@ -289,11 +272,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
i2max = i3 + np2 - np1;
|
|
|
|
|
i = 1;
|
|
|
|
|
for (i2 = i3; i2 <= i2max; i2 += np1) {
|
|
|
|
|
//printf("[54] Saving in datar the value %f in pos %d\n", workr[i], i2);
|
|
|
|
|
//printf("[55] Saving in datai the value %f in pos %d\n", worki[i], i2);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i2, workr[i]);
|
|
|
|
|
chunk_array_save(datai, i2, worki[i]);
|
|
|
|
|
file_array_save(datar, i2, workr[i]);
|
|
|
|
|
file_array_save(datai, i2, worki[i]);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -314,25 +294,15 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
L310:
|
|
|
|
|
j = i1;
|
|
|
|
|
for (i = imin; i <= ntot; i += istep) {
|
|
|
|
|
chunk_array_get(datar, i, &tempr);
|
|
|
|
|
chunk_array_get(datai, i, &tempi);
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[9] tempr = %f\n", i, tempr);
|
|
|
|
|
//printf("[10] tempi = %f\n", i, tempi);
|
|
|
|
|
//printf("[11] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[12] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
chunk_array_save(datai, i, valueij - tempi);
|
|
|
|
|
chunk_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
chunk_array_save(datai, j, valueij + tempi);
|
|
|
|
|
|
|
|
|
|
//printf("[56] Saving in datar the value %f in pos %d\n", valuerj - tempr, i);
|
|
|
|
|
//printf("[57] Saving in datai the value %f in pos %d\n", valueij - tempi, i);
|
|
|
|
|
//printf("[58] Saving in datar the value %f in pos %d\n", valuerj + tempr, j);
|
|
|
|
|
//printf("[59] Saving in datai the value %f in pos %d\n", valueij + tempi, j);
|
|
|
|
|
file_array_get(datar, i, &tempr);
|
|
|
|
|
file_array_get(datai, i, &tempi);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
file_array_save(datai, i, valueij - tempi);
|
|
|
|
|
file_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
file_array_save(datai, j, valueij + tempi);
|
|
|
|
|
|
|
|
|
|
j += istep;
|
|
|
|
|
}
|
|
|
|
@ -352,43 +322,25 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
j = imin - istep / 2;
|
|
|
|
|
for (i = imin; i <= ntot; i += istep) {
|
|
|
|
|
if (ifrwd != 0) {
|
|
|
|
|
chunk_array_get(datai, i, &tempr);
|
|
|
|
|
chunk_array_get(datar, i, &tempi);
|
|
|
|
|
|
|
|
|
|
//printf("[13] datai[%d] = %f\n", i, tempr);
|
|
|
|
|
//printf("[14] datar[%d] = %f\n", i, tempi);
|
|
|
|
|
|
|
|
|
|
file_array_get(datai, i, &tempr);
|
|
|
|
|
file_array_get(datar, i, &tempi);
|
|
|
|
|
tempi = -tempi;
|
|
|
|
|
} else {
|
|
|
|
|
chunk_array_get(datai, i, &tempr);
|
|
|
|
|
//printf("[15] datai[%d] = %f\n", i, tempr);
|
|
|
|
|
file_array_get(datai, i, &tempr);
|
|
|
|
|
tempr = -tempr;
|
|
|
|
|
chunk_array_get(datar, i, &tempi);
|
|
|
|
|
//printf("[16] datar[%d] = %f\n", i, tempi);
|
|
|
|
|
file_array_get(datar, i, &tempi);
|
|
|
|
|
}
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[17] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[18] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
chunk_array_save(datai, i, valueij - tempi);
|
|
|
|
|
|
|
|
|
|
//printf("[60] Saving in datar the value %f in pos %d\n", valuerj - tempr, i);
|
|
|
|
|
//printf("[61] Saving in datai the value %f in pos %d\n", valueij - tempi, i);
|
|
|
|
|
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[19] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[20] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
file_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
file_array_save(datai, i, valueij - tempi);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
chunk_array_save(datai, j, valueij + tempi);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[62] Saving in datar the value %f in pos %d\n", valuerj + tempr, j);
|
|
|
|
|
//printf("[63] Saving in datai the value %f in pos %d\n", valueij + tempi, j);
|
|
|
|
|
file_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
file_array_save(datai, j, valueij + tempi);
|
|
|
|
|
|
|
|
|
|
j += istep;
|
|
|
|
|
}
|
|
|
|
@ -426,29 +378,18 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
L510:
|
|
|
|
|
j = imin - istep / 2;
|
|
|
|
|
for (i = imin; i <= ntot; i += istep) {
|
|
|
|
|
chunk_array_get(datar, i, &valueri);
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, i, &valueii);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[21] datar[%d] = %f\n", i, valueri);
|
|
|
|
|
//printf("[22] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[23] datai[%d] = %f\n", i, valueii);
|
|
|
|
|
//printf("[24] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
file_array_get(datar, i, &valueri);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, i, &valueii);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
tempr = valueri * wr - valueii * wi;
|
|
|
|
|
tempi = valueri * wi + valueii * wr;
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
chunk_array_save(datai, i, valueij - tempi);
|
|
|
|
|
chunk_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
chunk_array_save(datai, j, valueij + tempi);
|
|
|
|
|
|
|
|
|
|
//printf("[64] Saving in datar the value %f in pos %d\n", valuerj - tempr, i);
|
|
|
|
|
//printf("[65] Saving in datai the value %f in pos %d\n", valueij - tempi, i);
|
|
|
|
|
//printf("[66] Saving in datar the value %f in pos %d\n", valuerj + tempr, j);
|
|
|
|
|
//printf("[67] Saving in datai the value %f in pos %d\n", valueij + tempi, j);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, i, valuerj - tempr);
|
|
|
|
|
file_array_save(datai, i, valueij - tempi);
|
|
|
|
|
file_array_save(datar, j, valuerj + tempr);
|
|
|
|
|
file_array_save(datai, j, valueij + tempi);
|
|
|
|
|
j += istep;
|
|
|
|
|
}
|
|
|
|
|
imin = 2 * imin - i1;
|
|
|
|
@ -501,11 +442,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
j3max = j2 + np2 - ifp2;
|
|
|
|
|
for (j3 = j2; j3 <= j3max; j3 += ifp2) {
|
|
|
|
|
j = jmin + ifp2 - ifp1;
|
|
|
|
|
chunk_array_get(datar, j, &sr);
|
|
|
|
|
chunk_array_get(datai, j, &si);
|
|
|
|
|
|
|
|
|
|
//printf("[25] datar[%d] = %f\n", j, sr);
|
|
|
|
|
//printf("[26] datai[%d] = %f\n", j, si);
|
|
|
|
|
file_array_get(datar, j, &sr);
|
|
|
|
|
file_array_get(datai, j, &si);
|
|
|
|
|
|
|
|
|
|
oldsr = 0.;
|
|
|
|
|
oldsi = 0.;
|
|
|
|
@ -514,11 +452,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
stmpr = sr;
|
|
|
|
|
stmpi = si;
|
|
|
|
|
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[27] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[28] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
sr = twowr * sr - oldsr + valuerj;
|
|
|
|
|
si = twowr * si - oldsi + valueij;
|
|
|
|
@ -528,18 +463,12 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
if (j > jmin)
|
|
|
|
|
goto L620;
|
|
|
|
|
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
workr[i] = wr * sr - wi * si - oldsr + valuerj;
|
|
|
|
|
worki[i] = wi * sr + wr * si - oldsi + valueij;
|
|
|
|
|
|
|
|
|
|
//printf("[85] wr = %f, sr = %f, wi = %f, si = %f, oldsr = %f, datar[j] = %f\n", wr, sr, wi, si, oldsr, valuerj);
|
|
|
|
|
//printf("[86] wi = %f, sr = %f, wr = %f, si = %f, oldsi = %f, datai[j] = %f\n", wi, sr, wr, si, oldsi, valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[83] Saving in workr the value %f in pos %d\n", wr * sr - wi * si - oldsr + valuerj, i);
|
|
|
|
|
//printf("[84] Saving in worki the value %f in pos %d\n", wi * sr + wr * si - oldsi + valueij, i);
|
|
|
|
|
|
|
|
|
|
jmin += ifp2;
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
@ -551,11 +480,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
for (j2 = i3; j2 <= j2max; j2 += ifp1) {
|
|
|
|
|
j3max = j2 + np2 - ifp2;
|
|
|
|
|
for (j3 = j2; j3 <= j3max; j3 += ifp2) {
|
|
|
|
|
//printf("[68] Saving in datar the value %f in pos %d, i = %d\n", workr[i], j3, i);
|
|
|
|
|
//printf("[69] Saving in datai the value %f in pos %d, i = %d\n", worki[i], j3, i);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j3, workr[i]);
|
|
|
|
|
chunk_array_save(datai, j3, worki[i]);
|
|
|
|
|
file_array_save(datar, j3, workr[i]);
|
|
|
|
|
file_array_save(datai, j3, worki[i]);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -599,15 +525,10 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
L710:
|
|
|
|
|
j = jmin;
|
|
|
|
|
for (i = imin; i <= ntot; i += np2) {
|
|
|
|
|
chunk_array_get(datar, i, &valueri);
|
|
|
|
|
chunk_array_get(datai, i, &valueii);
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[29] datar[%d] = %f\n", i, valueri);
|
|
|
|
|
//printf("[30] datai[%d] = %f\n", i, valueii);
|
|
|
|
|
//printf("[31] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[32] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
file_array_get(datar, i, &valueri);
|
|
|
|
|
file_array_get(datai, i, &valueii);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
sumr = (valueri + valuerj) / 2.;
|
|
|
|
|
sumi = (valueii + valueij) / 2.;
|
|
|
|
@ -616,15 +537,10 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
tempr = wr * sumi + wi * difr;
|
|
|
|
|
tempi = wi * sumi - wr * difr;
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, sumr + tempr);
|
|
|
|
|
chunk_array_save(datai, i, difi + tempi);
|
|
|
|
|
chunk_array_save(datar, j, sumr - tempr);
|
|
|
|
|
chunk_array_save(datai, j, tempi - difi);
|
|
|
|
|
|
|
|
|
|
//printf("[70] Saving in datar the value %f in pos %d\n", sumr + tempr, i);
|
|
|
|
|
//printf("[71] Saving in datai the value %f in pos %d\n", difi + tempi, i);
|
|
|
|
|
//printf("[72] Saving in datar the value %f in pos %d\n", sumr - tempr, j);
|
|
|
|
|
//printf("[73] Saving in datai the value %f in pos %d\n", tempi - difi, j);
|
|
|
|
|
file_array_save(datar, i, sumr + tempr);
|
|
|
|
|
file_array_save(datai, i, difi + tempi);
|
|
|
|
|
file_array_save(datar, j, sumr - tempr);
|
|
|
|
|
file_array_save(datai, j, tempi - difi);
|
|
|
|
|
|
|
|
|
|
j += np2;
|
|
|
|
|
}
|
|
|
|
@ -642,10 +558,8 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
if (ifrwd == 0)
|
|
|
|
|
goto L740;
|
|
|
|
|
for (i = imin; i <= ntot; i += np2) {
|
|
|
|
|
chunk_array_get(datai, i, &valueii);
|
|
|
|
|
//printf("[33] datai[%d] = %f\n", i, valueii);
|
|
|
|
|
chunk_array_save(datai, i, -valueii);
|
|
|
|
|
//printf("[73] Saving in datai the value %f in pos %d\n", -valueii, i);
|
|
|
|
|
file_array_get(datai, i, &valueii);
|
|
|
|
|
file_array_save(datai, i, -valueii);
|
|
|
|
|
}
|
|
|
|
|
L740:
|
|
|
|
|
np2 *= 2;
|
|
|
|
@ -657,34 +571,21 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
i = imin;
|
|
|
|
|
goto L755;
|
|
|
|
|
L750: ;
|
|
|
|
|
chunk_array_get(datar, i, &valueri);
|
|
|
|
|
chunk_array_get(datai, i, &valueii);
|
|
|
|
|
|
|
|
|
|
//printf("[34] datar[%d] = %f\n", i, valueri);
|
|
|
|
|
//printf("[35] datai[%d] = %f\n", i, valueii);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j, valueri);
|
|
|
|
|
chunk_array_save(datai, j, -valueii);
|
|
|
|
|
|
|
|
|
|
//printf("[74] Saving in datar the value %f in pos %d\n", valueri, j);
|
|
|
|
|
//printf("[75] Saving in datai the value %f in pos %d\n", -valueii, j);
|
|
|
|
|
file_array_get(datar, i, &valueri);
|
|
|
|
|
file_array_get(datai, i, &valueii);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, j, valueri);
|
|
|
|
|
file_array_save(datai, j, -valueii);
|
|
|
|
|
L755:
|
|
|
|
|
i++;
|
|
|
|
|
j--;
|
|
|
|
|
if (i < imax)
|
|
|
|
|
goto L750;
|
|
|
|
|
chunk_array_get(datar, imin, &valuerimin);
|
|
|
|
|
chunk_array_get(datai, imin, &valueiimin);
|
|
|
|
|
|
|
|
|
|
//printf("[36] datar[%d] = %f\n", imin, valuerimin);
|
|
|
|
|
//printf("[37] datai[%d] = %f\n", imin, valueiimin);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j, valuerimin - valueiimin);
|
|
|
|
|
chunk_array_save(datai, j, 0.);
|
|
|
|
|
file_array_get(datar, imin, &valuerimin);
|
|
|
|
|
file_array_get(datai, imin, &valueiimin);
|
|
|
|
|
|
|
|
|
|
//printf("[75] Saving in datar the value %f in pos %d\n", valuerimin - valueiimin, j);
|
|
|
|
|
//printf("[76] Saving in datai the value %f in pos %d\n", 0., j);
|
|
|
|
|
file_array_save(datar, j, valuerimin - valueiimin);
|
|
|
|
|
file_array_save(datai, j, 0.);
|
|
|
|
|
|
|
|
|
|
if (i >= j) {
|
|
|
|
|
goto L780;
|
|
|
|
@ -692,51 +593,30 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
goto L770;
|
|
|
|
|
}
|
|
|
|
|
L765:
|
|
|
|
|
chunk_array_get(datar, i, &valueri);
|
|
|
|
|
chunk_array_get(datai, i, &valueii);
|
|
|
|
|
|
|
|
|
|
//printf("[38] datar[%d] = %f\n", i, valueri);
|
|
|
|
|
//printf("[39] datai[%d] = %f\n", i, valueii);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j, valueri);
|
|
|
|
|
chunk_array_save(datai, j, valueii);
|
|
|
|
|
|
|
|
|
|
//printf("[77] Saving in datar the value %f in pos %d\n", valueri, j);
|
|
|
|
|
//printf("[78] Saving in datai the value %f in pos %d\n", valueii, j);
|
|
|
|
|
file_array_get(datar, i, &valueri);
|
|
|
|
|
file_array_get(datai, i, &valueii);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, j, valueri);
|
|
|
|
|
file_array_save(datai, j, valueii);
|
|
|
|
|
L770:
|
|
|
|
|
i--;
|
|
|
|
|
j--;
|
|
|
|
|
if (i > imin)
|
|
|
|
|
goto L765;
|
|
|
|
|
|
|
|
|
|
chunk_array_get(datar, imin, &valuerimin);
|
|
|
|
|
chunk_array_get(datai, imin, &valueiimin);
|
|
|
|
|
|
|
|
|
|
//printf("[40] datar[%d] = %f\n", imin, valuerimin);
|
|
|
|
|
//printf("[41] datai[%d] = %f\n", imin, valueiimin);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, j, valuerimin + valueiimin);
|
|
|
|
|
chunk_array_save(datai, j, 0.);
|
|
|
|
|
|
|
|
|
|
//printf("[75] Saving in datar the value %f in pos %d\n", valuerimin + valueiimin, j);
|
|
|
|
|
//printf("[76] Saving in datai the value %f in pos %d\n", 0., j);
|
|
|
|
|
file_array_get(datar, imin, &valuerimin);
|
|
|
|
|
file_array_get(datai, imin, &valueiimin);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, j, valuerimin + valueiimin);
|
|
|
|
|
file_array_save(datai, j, 0.);
|
|
|
|
|
imax = imin;
|
|
|
|
|
goto L745;
|
|
|
|
|
L780: ;
|
|
|
|
|
chunk_array_get(datai, 1, &valuei1);
|
|
|
|
|
chunk_array_get(datar, 1, &valuer1);
|
|
|
|
|
|
|
|
|
|
//printf("[42] datai[1] = %f\n", valuei1);
|
|
|
|
|
//printf("[43] datar[1] = %f\n", valuer1);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, 1, valuei1 + valuer1);
|
|
|
|
|
chunk_array_save(datai, 1, 0.);
|
|
|
|
|
|
|
|
|
|
//printf("[77] Saving in datar the value %f in pos %d\n", valuei1 + valuer1, 1);
|
|
|
|
|
//printf("[78] Saving in datai the value %f in pos %d\n", 0., 1);
|
|
|
|
|
file_array_get(datai, 1, &valuei1);
|
|
|
|
|
file_array_get(datar, 1, &valuer1);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, 1, valuei1 + valuer1);
|
|
|
|
|
file_array_save(datai, 1, 0.);
|
|
|
|
|
goto L900;
|
|
|
|
|
|
|
|
|
|
/*complete a real transform for the 2nd, 3rd, ... dimension by conjugate symmetries*/
|
|
|
|
@ -754,35 +634,21 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int
|
|
|
|
|
if (idim > 2) {
|
|
|
|
|
j = jmax + np0;
|
|
|
|
|
for (i = imin; i <= imax; i++) {
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[44] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[45] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, valuerj);
|
|
|
|
|
chunk_array_save(datai, i, -valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[79] Saving in datar the value %f in pos %d\n", valuerj, i);
|
|
|
|
|
//printf("[80] Saving in datai the value %f in pos %d\n", -valueij, i);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, i, valuerj);
|
|
|
|
|
file_array_save(datai, i, -valueij);
|
|
|
|
|
j--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
j = jmax;
|
|
|
|
|
for (i = imin; i <= imax; i += np0) {
|
|
|
|
|
chunk_array_get(datar, j, &valuerj);
|
|
|
|
|
chunk_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[46] datar[%d] = %f\n", j, valuerj);
|
|
|
|
|
//printf("[47] datai[%d] = %f\n", j, valueij);
|
|
|
|
|
|
|
|
|
|
chunk_array_save(datar, i, valuerj);
|
|
|
|
|
chunk_array_save(datai, i, -valueij);
|
|
|
|
|
|
|
|
|
|
//printf("[81] Saving in datar the value %f in pos %d\n", valuerj, i);
|
|
|
|
|
//printf("[82] Saving in datai the value %f in pos %d\n", -valueij, i);
|
|
|
|
|
file_array_get(datar, j, &valuerj);
|
|
|
|
|
file_array_get(datai, j, &valueij);
|
|
|
|
|
|
|
|
|
|
file_array_save(datar, i, valuerj);
|
|
|
|
|
file_array_save(datai, i, -valueij);
|
|
|
|
|
j -= np0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|