Parse the commandline
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=:), | intent(in), | allocatable | :: | prog |
Name of the calling program |
|
| logical, | intent(out) | :: | dryrun |
Have we been asked for a dryrun |
||
| logical, | intent(out) | :: | post_proc_flag |
Have we been asked for a dryrun |
||
| character(len=:), | intent(inout), | allocatable | :: | seedname |
subroutine io_commandline(prog, dryrun, post_proc_flag, seedname) !================================================ ! !! Parse the commandline ! !================================================ implicit none character(len=:), allocatable, intent(in) :: prog !! Name of the calling program logical, intent(out) :: dryrun, post_proc_flag !! Have we been asked for a dryrun character(len=:), allocatable, intent(inout) :: seedname integer :: num_arg, loop character(len=50), allocatable :: ctemp(:) logical :: print_help, print_version character(len=10) :: help_flag(3), version_flag(3), dryrun_flag(3) help_flag(1) = '-h ' help_flag(2) = '-help ' help_flag(3) = '--help ' version_flag(1) = '-v ' version_flag(2) = '-version ' version_flag(3) = '--version ' dryrun_flag(1) = '-d ' dryrun_flag(2) = '-dryrun ' dryrun_flag(3) = '--dryrun ' post_proc_flag = .false. print_help = .false. print_version = .false. dryrun = .false. num_arg = command_argument_count() allocate (ctemp(num_arg)) do loop = 1, num_arg call get_command_argument(loop, ctemp(loop)) end do if (num_arg == 0) then ! program called without any argument print_help = .true. elseif (num_arg == 1) then ! program called with one argument if (any(index(ctemp(1), help_flag(:)) > 0)) then print_help = .true. elseif (any(index(ctemp(1), version_flag(:)) > 0)) then print_version = .true. elseif ((ctemp(1) (1:1) == '-')) then !catch any other flag. Note seedname can't start with '-' print_help = .true. else ! must be the seedname seedname = trim(ctemp(1)) end if else ! not 2 - as mpi call might add commands to argument list if (any(index(ctemp(1), help_flag(:)) > 0)) then print_help = .true. elseif (any(index(ctemp(1), version_flag(:)) > 0)) then print_version = .true. elseif (any(index(ctemp(1), dryrun_flag(:)) > 0)) then dryrun = .true. seedname = trim(ctemp(2)) if (seedname(1:1) == '-') print_help = .true. elseif (index(ctemp(1), '-pp') > 0) then post_proc_flag = .true. seedname = trim(ctemp(2)) if (seedname(1:1) == '-') print_help = .true. else ! must be the seedname seedname = trim(ctemp(1)) if (seedname(1:1) == '-') print_help = .true. end if end if if (print_help) then if (prog == 'wannier90') then write (6, '(a)') 'Wannier90: The Maximally Localised Wannier Function Code' write (6, '(a)') 'http://www.wannier.org' write (6, '(a)') ' Usage:' write (6, '(a)') ' wannier90.x <seedname> : Runs file <seedname>.win' write (6, '(a)') ' wannier90.x -pp <seedname> : Write postprocessing files for <seedname>.win' write (6, '(a)') ' wannier90.x [-d|--dryrun] <seedname> : Perform a dryrun calculation on files <seedname>.win' write (6, '(a)') ' wannier90.x [-v|--version] : print version information' write (6, '(a)') ' wannier90.x [-h|--help] : print this help message' elseif (prog == 'postw90') then write (6, '(a)') 'postw90: Post-processing for the Wannier90 code' write (6, '(a)') 'http://www.wannier.org' write (6, '(a)') ' Usage:' write (6, '(a)') ' First run wannier90.x then' write (6, '(a)') ' postw90.x <seedname> : Runs file <seedname>.win' write (6, '(a)') ' postw90.x [-d|--dryrun] <seedname> : Perform a dryrun calculation on files <seedname>.win' write (6, '(a)') ' postw90.x [-v|--version] : print version information' write (6, '(a)') ' postw90.x [-h|--help] : print this help message' end if stop end if if (print_version) then if (prog == 'wannier90') then write (6, '(a,a)') 'Wannier90: ', trim(w90_version) elseif (prog == 'postw90') then write (6, '(a,a)') 'Postw90: ', trim(w90_version) end if stop end if ! If on the command line the whole seedname.win was passed, I strip the last ".win" if (len(trim(seedname)) .ge. 5) then if (seedname(len(trim(seedname)) - 4 + 1:) .eq. ".win") then seedname = seedname(:len(trim(seedname)) - 4) end if end if end subroutine io_commandline