#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
APSStandardSetup

set usage "usage: psub \[-mpich-4.3.0 <threads>\] \[-name <string>\] <command>\nSubmits a command to PBSpro."

set name ""
set mpich-4.3.0 0

set index 0
set args ""
while {$index<[llength $argv]} {
    if {[string match -* [lindex $argv $index]]} {
	lappend args [lindex $argv $index]
	incr index
	lappend args [lindex $argv $index]
	incr index
    } else {
	break
    }
}
if [llength $args] {
    APSStrictParseArguments {name {mpich-4.3.0}}
    set argv [lrange $argv $index end]
}
if [llength $argv]==0 {
    puts stderr "$usage"
    exit 1
}

if {$name == ""} {
    set name $env(USER)_[clock seconds]
}
if {${mpich-4.3.0} > 0} {
    set nodes [expr int(ceil(${mpich-4.3.0} / 24.0))]
    set ncpus [expr int(ceil(${mpich-4.3.0} / (1.0 * $nodes)))]
    set mpiprocs $ncpus
    if {[catch {exec qsub -V -N $name -lselect=${nodes}:ncpus=${ncpus}:mpiprocs=${mpiprocs} -- /bin/bash -c "cd \$PBS_O_WORKDIR; /usr/local/oag/3rdParty/mpich-4.3.0/bin/mpirun -np ${mpich-4.3.0} $argv"} result]} {
        puts "Error: $result"
    } else {
        puts "Submitted job $name"
    }
} else {
    if {[catch {exec qsub -V -N $name -lselect=1:ncpus=1 -- /bin/bash -c "cd \$PBS_O_WORKDIR; $argv"} result]} {
        puts "Error: $result"
    } else {
        puts "Submitted job $name"
    }
}
