#!/bin/env python # sim-manage -- manage simulations. # # Michael Thomas # Center for Computation & Technology # Louisiana State University # import sys, os ############################################ ## APP SPECIFIC DEFINES ## # # Usage when (-h, --help) is used, this is the first line showing how to call the app # optionGroups which option groups from etc/options to import. common is always imported. App = "sim-manage.py" Usage = "usage: %prog [options] command simulationname" optionGroups = ['sim-manage'] Purpose = "manage a Cactus process" ############################################ ############################################ ## INIT ## if os.path.basename(sys.argv[0]) == App: rp = os.path.realpath(__file__) paths = rp.split(os.sep) paths.pop() paths.pop() global BASE_PATH BASE_PATH = os.sep.join(paths) sys.path.append(BASE_PATH) from lib import * ## lets go to work known_commands = ['create', 'submit', 'run', 'interactive'] usage_strings = { 'create': 'create a simulation', 'submit': 'submit a simulation', 'run': 'launch a simulation', 'interactive': 'initiate an interactive session on a compute node'} def buildUsageString(): global Usage cmdString = "%s\n\n\nAvailable Commands:\n" % Usage iString = [] for kk in known_commands: ss = " %s%s" % (libutil.BuildWithSpace(kk, 22), usage_strings[kk]) iString.append(ss) cmdString = "%s%s" % (cmdString, "\n".join(iString)) return cmdString ############################### MAIN ############################### def command_create(): global SimEnvironment global OptionsManager global SimLib simulationName = OptionsManager.args.pop(0) print "Simulation name: %s" % simulationName parfile = SimLib.GetParFile() if parfile == None: print "Error, no parameter file specified" sys.exit(0) print "Parameter file: %s" % parfile restart = simrestart.SimRestart(SimEnvironment) restart.create(simulationName, parfile) def command_run(): global SimEnvironment global OptionsManager global SimLib simulationName = OptionsManager.args.pop(0) print "Simulation name: %s" % simulationName restart = simrestart.SimRestart(SimEnvironment) restart.load(simulationName) restart.run() def CommandDispatch(): global SimEnvironment global OptionsManager global known_commands if SimEnvironment.COMMAND == None: command = OptionsManager.args.pop(0) else: command = SimEnvironment.COMMAND if command not in known_commands: print "Error, unknown command" OptionsManager.PrintHelp() sys.exit(0) print "Executing command: %s" % command exec("command_%s()" % command) def main(env): global OptionsManager global ConfigurationDatabase global SimLib global DefineDatabase global SimEnvironment SimEnvironment = env OptionsManager = SimEnvironment.OptionsManager ConfigurationDatabase = SimEnvironment.ConfigurationDatabase SimLib = SimEnvironment.SimLib DefineDatabase = SimEnvironment.DefineDatabase ############################################ if os.path.basename(SimEnvironment.EXECUTABLE) == App: print "sim-manage: %s\n" % Purpose print "cdb: %s" % SimEnvironment.cdb if SimEnvironment.udb != None: print "udb: %s" % SimEnvironment.udb print if len(OptionsManager.args) < 2: OptionsManager.PrintHelp() sys.exit(0) CommandDispatch() # only run if you are App if os.path.basename(sys.argv[0]) == App: global SimEnvironment SimEnvironment = simenv.SimEnvironment(BASE_PATH, os.path.realpath(sys.argv[0])) SimEnvironment.initApp(usageString=buildUsageString(), optionGroups=optionGroups) main(SimEnvironment)