#!/bin/sh
# \
LD_LIBRARY_PATH=$XCRYSDEN_TOPDIR/external/lib; export LD_LIBRARY_PATH
# this line restarts tclsh \
exec $XCRYSDEN_TOPDIR/bin/xctclsh $0 "$@"

#
# Usage: unitconv unit value
#
#    or: unitconv unit expr
#
# unit == "input unit"

# Energy Units
#-------------
set au2kcalm 627.5095
set au2ev    27.211652
set au2kjm   [expr $au2kcalm * 4.184]
set au2kj    4.3597482e-21 
set au2kcal  [expr $au2kj / 4.184]
set au2erg   4.3597482e-11
set au2ry    2.0

set kcalm2au [expr 1 / $au2kcalm]
set ev2au    [expr 1 / $au2ev]
set kjm2au   [expr 1 / $au2kjm]
set kj2au    [expr 1 / $au2kj]
set kcal2au  [expr 1 / $au2kcal]
set erg2au   [expr 1 / $au2erg]
set ry2au    0.5

# Distance Units
#---------------
set bohr2angs 0.529177
set m2angs    1.e10

set angs2bohr [expr 1.0 / $bohr2angs]
set m2bohr    [expr 1.e10 * $angs2bohr]

set unit [lindex $argv 0]
if { $unit != "au" && $unit != "kcalm" && $unit != "ev" \
	&& $unit != "ry"   && $unit != "kjm" && $unit != "kj" \
	&& $unit != "kcal" && $unit != "erg" \
	&& $unit != "angs" && $unit != "bohr" && $unit != "m" } {
    puts stderr "input unit not known; must be one of au, ry, kcalm, ev, kjm, kj, kcal or angs, bohr, m"
    exit
}

#
# parse the command line arguments
#
foreach item [lrange $argv 1 end] {
    append numbers [format "%s " $item]
}
set sum [eval {expr 1.0 * } ($numbers)]

if { $unit == "kcalm" } {
    set sum [expr $sum * $kcalm2au]
} elseif { $unit == "ev" } {
    set sum [expr $sum * $ev2au]
} elseif { $unit == "kjm" } {
    set sum [expr $sum * $kjm2au]
} elseif { $unit == "kj" } {
    set sum [expr $sum * $kj2au]
} elseif { $unit == "kcal" } {
    set sum [expr $sum * $kcal2au]
} elseif { $unit == "erg" } {
    set sum [expr $sum * $erg2au]
} elseif { $unit == "ry" } {
    set sum [expr $sum * $ry2au]
}

if { $unit == "angs" } {
    ;
} elseif { $unit == "bohr" } {
    set sum [expr $sum * $bohr2angs]
} elseif { $unit == "m" } {
    set sum [expr $sum * $m2angs]
}


if { $unit == "au" || $unit == "kcalm" || $unit == "ev" \
	|| $unit == "kjm" || $unit == "kj" || $unit == "ry" \
	|| $unit == "kcal" || $unit == "erg" } {
    puts stdout " $sum a.u. = [expr $sum * $au2ry] Ry = [expr $sum * $au2ev] eV = [expr $sum * $au2kcalm] kcal/mol = [expr $sum * $au2kjm] kJ/mol = [expr $sum * $au2kj] kJ = [expr $sum * $au2kcal] kcal = [expr $sum * $au2erg] erg"
} else {
    puts stdout " $sum angs = [expr $sum * $angs2bohr] bohr = [format %e [expr $sum / $m2angs]] m"
}

exit 0