int main_diffraction()
{
int nx = 1024;
int ny = 1024;
// input
fftw_complex * in = new fftw_complex[nx*ny];
// initialize input field
initField( nx, ny, in );
// output
fftw_complex * out = new fftw_complex[nx*ny];
double outDx, outDy;
FresnelTransform2D prop;
prop.setProcessor(1); // 0: cpu, 1: gpu
prop.setIntegrationType(1); // 0: non-conv, 1: convolution
prop.setLambda(633.0E-9);
prop.forward_propagate(nx, ny, 2.5E-5, 2.5E-5, (Complex*)in, outDx, outDy, (Complex*)out, 1.0);//*/
/*AngSpecProp2D angSpec;
angSpec.setProcessor(0);
angSpec.setLambda(633.0E-9);
angSpec.forward_propagate(nx, ny, 2.5E-5, 2.5E-5, (Complex*)in, outDx, outDy, (Complex*)out, 1.0); //*/
FileIO io;
io.writeField( nx, ny, outDx, outDy, (Complex*)out, "fresnel.dhc", 0);
delete[] in;
delete[] out;
return 0;
}