#include "mrilib.h"
int main( int argc , char * argv[] )
{
int ii , mm , pp , nn , rr , kk , mode ;
float ph , fac ;
complex * cx ;
if( argc < 6 ){ printf("Usage: qft N r k {r,q,l,a} p\n"); exit(1); }
nn = strtol(argv[1],NULL,10) ; if( nn < 4 ) exit(1) ;
nn = csfft_nextup(nn) ;
rr = strtol(argv[2],NULL,10) ; if( rr < 2 ) exit(1) ;
mm = rr*nn ;
kk = strtol(argv[3],NULL,10) ;
switch( argv[4][0] ){
case 'r': mode = 0 ; break ;
case 'q': mode = -1 ; break ;
case 'l': mode = -2 ; break ;
case 'a': mode = 1 ; break ;
default: fprintf(stderr,"mode flag illegal\n");exit(1) ;
}
fac = strtod(argv[5],NULL) ;
srand48((long)time(NULL)) ;
cx = (complex *) malloc(sizeof(complex)*mm) ;
for( ii=0 ; ii < mm ; ii++ ){
switch( mode ){
case 0: pp = lrand48() ; break ;
case -1: pp = fac*ii*ii ; break ;
case -2: pp = fac*ii + (lrand48()%3 - 1) ; break ;
case 1: pp = fac*ii ; break ;
}
pp = (pp+nn) % nn ; printf("%d ",pp) ;
ph = -(2.0*PI*kk*rr/mm) * pp ; cx[ii] = CEXPIT(ph) ;
}
printf("\n\n");
csfft_cox( 1 , mm , cx ) ;
for( ii=0 ; ii < mm ; ii++ ){
printf(" %4d: %13.6f %13.6f" , ii,cx[ii].r,cx[ii].i ) ;
if( ii%3 == 2 ) printf("\n") ;
}
printf("\n") ; exit(0) ;
}
syntax highlighted by Code2HTML, v. 0.9.1