TABLE OF CONTENTS
::pwtk::pwo::sortFiles
SYNOPSIS
proc ::pwtk::pwo::sortFiles {args} {
USAGE
::pwtk::pwo::sortFiles [-by energy|force|press|dipole] [-increasing|-decreasing] filelist
PURPOSE
Return a sorted list of pw.x output files according to the specified criteria.
OPTIONS
- -by ... by which criteria top sort (possibilities are energy, force, press, or dipole)
- -increasing ... sort in increasing order
- -decreasing ... sort in decreasing order
filelist can be glob-style pattern
SOURCE
set options { {by.arg energy "criteria for sorting, allowed values are energy, force, press, or dipole"} {increasing "sort in increasing order"} {decreasing "sort in decreasing order"} } set usage ": pwtk::pwo::sortFiles \[-by energy|force|press|dipole] \[-order increasing|decreasing] filelist" array set opt [::cmdline::getoptions args $options $usage] set sort increasing if { $opt(increasing) && $opt(decreasing) } { ::pwtk::error "both -increasing and -decreasing option specified, please use only one" 1 } elseif { $opt(decreasing) } { set sort decreasing } switch -glob -- $opt(by) { e* { set cmd ::pwtk::pwo::totene } fblocked* { set cmd ::pwtk::pwo::totfor } m* { set cmd ::pwtk::pwo::totmag } p* { set cmd ::pwtk::pwo::press } d* { set cmd ::pwtk::pwo::dipole } default { ::pwtk:error "wrong value for -by option, must be one of energy, force, magnetization, press, or dipole" 1 } } set unsorted {} # construct and sort the "value pwo" list foreach pwo [glob -nocomplain $args] { lappend unsorted [list [$cmd $pwo] $pwo] } set sorted [lsort -real -index 0 -$sort $unsorted] # extract only "pwo" from the sorted list set result "" foreach pair $sorted { lappend result [lindex $pair 1] } return $result }