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

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    
}