int main(void) { long idum=(-3); unsigned long err,i,j,k,nn1=NX,nn2=NY,nn3=NZ; float fnorm,***data1,***data2,**speq1; fnorm=(float)nn1*(float)nn2*(float)nn3/2.0; data1=f3tensor(1,nn1,1,nn2,1,nn3); data2=f3tensor(1,nn1,1,nn2,1,nn3); speq1=matrix(1,nn1,1,nn2<<1); for (i=1;i<=nn1;i++) for (j=1;j<=nn2;j++) for (k=1;k<=nn3;k++) data2[i][j][k]=fnorm*(data1[i][j][k]=2*ran1(&idum)-1); rlft3(data1,speq1,nn1,nn2,nn3,1); /* here would be any processing in Fourier space */ rlft3(data1,speq1,nn1,nn2,nn3,-1); err=compare("data",data1,data2,nn1,nn2,nn3,EPS); if (err) { printf("Comparison error at tolerance %12.6f\n",EPS); printf("Total number of errors is %d\n",err); } else { printf("Data compares OK to tolerance %12.6f\n",EPS); } free_matrix(speq1,1,nn1,1,nn2<<1); free_f3tensor(data2,1,nn1,1,nn2,1,nn3); free_f3tensor(data1,1,nn1,1,nn2,1,nn3); return (err > 0); }
int main(void) /* example1 */ { void rlft3(float ***data, float **speq, unsigned long nn1, unsigned long nn2, unsigned long nn3, int isign); float ***data, **speq; data=f3tensor(1,1,1,N2,1,N3); speq=matrix(1,1,1,2*N2); rlft3(data,speq,1,N2,N3,1); rlft3(data,speq,1,N2,N3,-1); free_matrix(speq,1,1,1,2*N2); free_f3tensor(data,1,1,1,N2,1,N3); return 0; }
int main(void) /* example3 */ { void rlft3(float ***data, float **speq, unsigned long nn1, unsigned long nn2, unsigned long nn3, int isign); int j; float fac,r,i,***data1,***data2,**speq1,**speq2,*sp1,*sp2; data1=f3tensor(1,N,1,N,1,N); data2=f3tensor(1,N,1,N,1,N); speq1=matrix(1,N,1,2*N); speq2=matrix(1,N,1,2*N); rlft3(data1,speq1,N,N,N,1); rlft3(data2,speq2,N,N,N,1); fac=2.0/(N*N*N); sp1 = &data1[1][1][1]; sp2 = &data2[1][1][1]; for (j=1;j<=N*N*N/2;j++) { r = sp1[0]*sp2[0] - sp1[1]*sp2[1]; i = sp1[0]*sp2[1] + sp1[1]*sp2[0]; sp1[0] = fac*r; sp1[1] = fac*i; sp1 += 2; sp2 += 2; } sp1 = &speq1[1][1]; sp2 = &speq2[1][1]; for (j=1;j<=N*N;j++) { r = sp1[0]*sp2[0] - sp1[1]*sp2[1]; i = sp1[0]*sp2[1] + sp1[1]*sp2[0]; sp1[0] = fac*r; sp1[1] = fac*i; sp1 += 2; sp2 += 2; } rlft3(data1,speq1,N,N,N,-1); free_matrix(speq2,1,N,1,2*N); free_matrix(speq1,1,N,1,2*N); free_f3tensor(data2,1,N,1,N,1,N); free_f3tensor(data1,1,N,1,N,1,N); return 0; }