49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | subroutine timefft_opts(npatience,nthreads,linplace,lcomplex,nfft,    & | ||
|  |      problem,nflags) | ||
|  | 
 | ||
|  |   use FFTW3 | ||
|  | 
 | ||
|  |   logical linplace,lcomplex | ||
|  |   character problem*9,arg*12 | ||
|  | 
 | ||
|  |   nargs=iargc() | ||
|  |   if(nargs.lt.3) then | ||
|  |      print*,'Usage: timefft npatience maxthreads [[o|i][r|c]]nfft' | ||
|  |      print*,'       npatience  - 0 to 4' | ||
|  |      print*,'       maxthreads - suggest #CPUs or #CPUs-1' | ||
|  |      print*,'       o,i        - out-of-place or in-place (default=in-place)' | ||
|  |      print*,'       r,c        - real or complex (default=complex)' | ||
|  |      print*,' ' | ||
|  |      print*,'Examples:' | ||
|  |      print*,'       timefft 1 1 32768     (1 thread, in-place, complex)' | ||
|  |      print*,'       timefft 2 3 or32768   (more patient, 3 threads,' | ||
|  |      print*,'                              out-of-place, real)' | ||
|  |      stop | ||
|  |   endif | ||
|  | 
 | ||
|  |   call getarg(1,arg) | ||
|  |   read(arg,*) npatience | ||
|  |   call getarg(2,arg) | ||
|  |   read(arg,*) nthreads | ||
|  |   call getarg(3,arg) | ||
|  |   linplace=arg(1:1).ne.'o' .and. arg(2:2).ne.'o' | ||
|  |   lcomplex=arg(1:1).ne.'r' .and. arg(2:2).ne.'r' | ||
|  |   k=3 | ||
|  |   if(ichar(arg(2:2)).ge.48 .and. ichar(arg(2:2)).le.57) k=2 | ||
|  |   if(ichar(arg(1:1)).ge.48 .and. ichar(arg(1:1)).le.57) k=1 | ||
|  |   read(arg(k:),*) nfft | ||
|  | 
 | ||
|  |   write(problem,'(i9)') nfft | ||
|  |   problem='ic'//adjustl(problem) | ||
|  |   if(.not.linplace) problem(1:1)='o' | ||
|  |   if(.not.lcomplex) problem(2:2)='r' | ||
|  | 
 | ||
|  |   nflags=FFTW_ESTIMATE | ||
|  |   if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT | ||
|  |   if(npatience.eq.2) nflags=FFTW_MEASURE | ||
|  |   if(npatience.eq.3) nflags=FFTW_PATIENT | ||
|  |   if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE | ||
|  | 
 | ||
|  |   return | ||
|  | end subroutine timefft_opts |