#! /usr/local/tk3.2/bin/wish -f
# 
# Generate a menu of the available solvers.  Because each method has 
# different options, this needs to set the appropriate options
# Input parameter:
# w - name of root menus window (like .menu.solvers)
proc solvers_menu w {
menubutton $w -text "Solver Method" -menu $w.m
menu $w.m
$w.m add radio -label "LU"    -command "setsv lu"    -variable svsv -value lu
$w.m add radio -label "ILU"   -command "setsv ilu"   -variable svsv -value ilu
$w.m add radio -label "OSM"   -command "setsv osm"   -variable svsv -value osm
$w.m add radio -label "BDD"   -command "setsv bdd"   -variable svsv -value bdd
$w.m add radio -label "SSOR"  -command "setsv ssor"  -variable svsv -value ssor
$w.m add radio -label "ICC"   -command "setsv icc"   -variable svsv -value icc
$w.m add radio -label "ICCJP" -command "setsv iccjp" \
				-variable svsv -value iccjp
$w.m add radio -label "NoPre" -command "setsv nopre" \
				-variable svsv -value nopre
$w.m add radio -label "Jacobi"  -command "setsv jacobi" \
	-variable svsv -value jacobi
$w.m invoke 1
# ilu (set the default and flag it)
}

# This procedure sets the options for a given method, given the method name
proc setsv s { 
    global svm svoptnames svoptvalues svoptvars
    set svm $s
    set svoptnames {}
    set svoptvalues {}
    set svoptvars {}
    # Set solver specific options
    if {[ string compare $svm "osm" ] == 0 || \
        [ string compare $svm "bdd" ] == 0} {
        set svoptnames {{Number of Domains:} {Use 2d?} {InnerSolver:} {InnerIt:}}
	set svoptvalues {"4" "No" "ilu" "preonly"}
	set svoptvars   {nd use2d svinner itinner}
        }
    if {[string compare $svm "ilu" ] == 0} {
	# valid values are nonnegative
	set svoptnames { {Level of Fill:} }
	set svoptvalues {0}
	set svoptvars   {fill}
        }
    if {[string compare $svm "ssor" ] == 0} {
	# valid values are 0-2"
	set svoptnames {Omega:}
	set svoptvalues {1.0}
	set svoptvars   {omega}
        }
    if {[string compare $svm "lu" ] == 0} {
	# valid values are "nd rcm qmd 1wd"
	set svoptnames  {Ordering:}
	set svoptvalues {nd}
	set svoptvars   {order}
	}
}

