Esempio n. 1
0
void convo2d()
{
	/*ID FFT Row wise*/
	for (i = 0; i<MAXN; i++)
	{
		fft1d(data1[i], MAXN, -1);
		fft1d(data2[i], MAXN, -1);
	}

	/*Transpose*/
	for (i = 0; i < MAXN; i++)
	{
		for (j = i; j < MAXN; j++)
		{
			C_SWAP(data1[i][j], data1[j][i]);
			C_SWAP(data2[i][j], data2[j][i]);
		}
	}

	/*1D FFT Row wise (Transposed Column)*/
	for (i = 0; i<MAXN; i++)
	{
		fft1d(data1[i], MAXN, -1);
		fft1d(data2[i], MAXN, -1);
	}
	
	/*Point Multiplication*/
	for (i = 0; i < MAXN; i++)
	{
		for (j = 0; j < MAXN; j++)
		{
			data3[i][j].r = data1[i][j].r * data2[i][j].r - data1[i][j].i * data2[i][j].i;
			data3[i][j].i = data1[i][j].r * data2[i][j].i + data1[i][j].i * data2[i][j].r;
		}
	}
	
	/*1D IFFT Row wise*/
	for (i = 0; i<MAXN; i++)
	{
		fft1d(data3[i], MAXN, 1);
	}
	
	/*Transpose*/
	for (j = 0; j < MAXN; j++)
	{
		for (i = j; i < MAXN; i++)
		{
			C_SWAP(data3[i][j], data3[j][i]);
		}
	}

	/*1D IFFT Row wise (Transposed Column)*/
	for (i = 0; i<MAXN; i++)
	{
		fft1d(data3[i], MAXN, 1);
	}
}
Esempio n. 2
0
  //perform the fft in all directions
  void fft4d(complex *out,complex *in,int *dirs,int ncpp,double sign,int normalize)
  {
    //copy input in the output (if they differ!)
    if(out!=in) vector_copy(out,in);
    
    //perform the fft in each direction
    for(int mu=0;mu<NDIM;mu++)
      {
	//perform the 1d fft (slower dir)
	if(dirs[mu]) fft1d(out,out,ncpp*loc_vol/loc_size[mu],mu,sign,normalize);
	
	//for the time being we stick to transpose the data
	data_coordinate_order_shift(out,ncpp,mu);
      }
  }