using Printf using FFTW include("navier_stokes.jl") include("driving.jl") include("print.jl") function main() ## defaults delta=0.0001220703125 nsteps=10000000 nu=0.00048828125 print_freq=1000 K1=16 K2=K1 N1=4*K1+1 N2=4*K2+1 # read cli arguments (params,driving,command)=read_args(ARGS) # whether N was set in parameters setN1=false setN2=false # read params if params!="" for param in split(params,";") terms=split(param,"=") if length(terms)!=2 print(stderr,"error: could not read parameter '",param,"'.\n") exit(-1) end lhs=string(terms[1]) rhs=string(terms[2]) if lhs=="K1" K1=parse(Int64,rhs) elseif lhs=="K2" K2=parse(Int64,rhs) elseif lhs=="K" K1=parse(Int64,rhs) K2=K1 elseif lhs=="N1" N1=parse(Int64,rhs) setN1=true elseif lhs=="N2" N2=parse(Int64,rhs) setN2=true elseif lhs=="N" N1=parse(Int64,rhs) N2=N1 setN1=true setN2=true elseif lhs=="nsteps" nsteps=parse(Int64,rhs) elseif lhs=="nu" nu=parse(Float64,rhs) elseif lhs=="delta" delta=parse(Float64,rhs) elseif lhs=="print_freq" print_freq=parse(Int64,rhs) else print(stderr,"unrecognized parameter '",lhs,"'.\n") exit(-1) end end end ## read driving if driving=="test" g=(kx,ky)->g_test(kx,ky) end ## set parameters if ! setN1 N1=4*K1+1 end if ! setN2 N2=4*K2+1 end ## run command if command=="uk" navier_stokes_uk(nsteps,nu,g,N1,N2,K1,K2,delta,print_freq) elseif command=="alpha" navier_stokes_alpha(nsteps,nu,g,N1,N2,K1,K2,delta,print_freq) else print(stderr,"unrecognized command '",command,"'.\n") exit(-1) end end # read cli arguments function read_args(ARGS) # flag flag="" # output strings command="" params="" # default driving force driving="test" # loop over arguments for arg in ARGS # argument that starts with a dash if arg[1]=='-' # go through characters after dash for char in arg[2:length(arg)] # set params if char=='p' # raise flag flag="params" elseif char=='g' # raise flag flag="driving" else print_usage() exit(-1) end end # arguments that do not start with a dash else if flag=="params" params=arg elseif flag=="driving" driving=arg else command=arg end # reset flag flag="" end end if command=="" print_usage() exit(-1) end return (params,driving,command) end # usage function print_usage() print(stderr,"usage: nstrophy [-p params] [-g driving] \n") end main()