Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
qft.c
Go to the documentation of this file.00001 #include "mrilib.h"
00002
00003 int main( int argc , char * argv[] )
00004 {
00005 int ii , mm , pp , nn , rr , kk , mode ;
00006 float ph , fac ;
00007 complex * cx ;
00008
00009 if( argc < 6 ){ printf("Usage: qft N r k {r,q,l,a} p\n"); exit(1); }
00010
00011 nn = strtol(argv[1],NULL,10) ; if( nn < 4 ) exit(1) ;
00012 nn = csfft_nextup(nn) ;
00013
00014 rr = strtol(argv[2],NULL,10) ; if( rr < 2 ) exit(1) ;
00015 mm = rr*nn ;
00016
00017 kk = strtol(argv[3],NULL,10) ;
00018
00019 switch( argv[4][0] ){
00020 case 'r': mode = 0 ; break ;
00021 case 'q': mode = -1 ; break ;
00022 case 'l': mode = -2 ; break ;
00023 case 'a': mode = 1 ; break ;
00024
00025 default: fprintf(stderr,"mode flag illegal\n");exit(1) ;
00026 }
00027
00028 fac = strtod(argv[5],NULL) ;
00029
00030 srand48((long)time(NULL)) ;
00031
00032 cx = (complex *) malloc(sizeof(complex)*mm) ;
00033
00034 for( ii=0 ; ii < mm ; ii++ ){
00035 switch( mode ){
00036 case 0: pp = lrand48() ; break ;
00037 case -1: pp = fac*ii*ii ; break ;
00038 case -2: pp = fac*ii + (lrand48()%3 - 1) ; break ;
00039 case 1: pp = fac*ii ; break ;
00040 }
00041 pp = (pp+nn) % nn ; printf("%d ",pp) ;
00042
00043 ph = -(2.0*PI*kk*rr/mm) * pp ; cx[ii] = CEXPIT(ph) ;
00044 }
00045 printf("\n\n");
00046
00047 csfft_cox( 1 , mm , cx ) ;
00048
00049 for( ii=0 ; ii < mm ; ii++ ){
00050 printf(" %4d: %13.6f %13.6f" , ii,cx[ii].r,cx[ii].i ) ;
00051 if( ii%3 == 2 ) printf("\n") ;
00052 }
00053 printf("\n") ; exit(0) ;
00054 }