2015-01-29 13:29:41 -05:00
|
|
|
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'
|
2015-01-29 13:49:40 -05:00
|
|
|
print*,' maxthreads - suggest #CPUs or #CPUs-1'
|
2015-01-29 13:29:41 -05:00
|
|
|
print*,' o,i - out-of-place or in-place (default=in-place)'
|
|
|
|
print*,' r,c - real or complex (default=complex)'
|
2015-01-29 13:38:51 -05:00
|
|
|
print*,' '
|
2015-01-29 13:29:41 -05:00
|
|
|
print*,'Examples:'
|
2015-01-29 13:38:51 -05:00
|
|
|
print*,' timefft 1 1 32768 (1 thread, in-place, complex)'
|
|
|
|
print*,' timefft 2 3 or32768 (more patient, 3 threads,'
|
|
|
|
print*,' out-of-place, real)'
|
2015-01-29 13:29:41 -05:00
|
|
|
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
|