Doxygen Source Code Documentation
qft.c File Reference
#include "mrilib.h"
Go to the source code of this file.
Functions | |
int | main (int argc, char *argv[]) |
Function Documentation
|
\** File : SUMA.c
Input paramters :
Definition at line 3 of file qft.c. References argc, CEXPIT, csfft_cox(), csfft_nextup(), i, malloc, r, and strtod().
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 } |