#! /usr/bin/env python import os import sys #=======# # usage # #=======# # jobrun_vesta exe_name exe_inputs/options #=============# # global data # #=============# # the account to charge time to account = 'QMCPACK-training' # participant account! #account = 'QMCPACK' # instructor account! # executables jobrun_vesta knows how to handle exe_name_list = 'ppconvert rungms convert4qmc pw.x pw2qmcpack.x qmcpack qmcpack_comp'.split() exe_names = set(exe_name_list) # protect user against errors and print pedagogical error messages guard = True #guard = False # examples displayed to user if no arguments are provided examples = ''' jobrun_vesta ppconvert --gamess_pot O.BFD.gamess --s_ref "1s(2)2p(4)" --p_ref "1s(2)2p(4)" --d_ref "1s(2)2p(4)" --log_grid --upf O.BFD.upf jobrun_vesta rungms H2O.PBE jobrun_vesta convert4qmc -gamessAscii H2O.CISD.orbs.output -ci H2O.CISD.orbs.output -threshold 0.01 -readInitialGuess 60 -add3BodyJ jobrun_vesta pw.x scf.in jobrun_vesta pw2qmcpack.x p2q.in jobrun_vesta qmcpack opt.in.xml ''' # portions of template qsub script cobalt_header = '''#!/bin/bash #COBALT -q qmcpack #COBALT -A {0} #COBALT -n {1} #COBALT -t {2} #COBALT -O {3} ''' #cobalt_header = '''#!/bin/bash ##COBALT -q default ##COBALT -A {0} ##COBALT -n {1} ##COBALT -t {2} ##COBALT -O {3} #''' cobalt_shape = '''LOCARGS="--block $COBALT_PARTNAME ${COBALT_CORNER:+--corner} $COBALT_CORNER ${COBALT_SHAPE:+--shape} $COBALT_SHAPE" echo "Cobalt location args: $LOCARGS" >&2 ''' runjob='runjob --np {0} -p {1} $LOCARGS --verbose=INFO --envs OMP_NUM_THREADS={2} : {3}{4}' #==================# # global functions # #==================# def error(msg): print 'jobrun error:\n '+msg.replace('\n','\n ') print 'exiting' sys.exit() #end def error def join_args(args): s = '' for a in args: s+=' '+a #end for return s.lstrip() #end def join_args #==================# # actual execution # #==================# # get the tokens provided by the user args = sys.argv[1:] # require at least one argument, the exe name if len(args)==0: error('no arguments provided to jobrun_vesta\nfirst argument to jobrun_vesta must be the exe name\nvalid options are: {0}\nan example for each executable is shown below\n{1}'.format(exe_name_list,examples)) #end if # get the exe name and any arguments for the exe itself exe_name = args[0] exe_arg_list = args[1:] # exe must be known if exe_name not in exe_names: error('invalid exe name: {0}\nvalid options are: {1}'.format(exe_name,exe_name_list)) #end if # generate submission command based on target executable script = False runstr = None command = '' if exe_name=='ppconvert': #===========# # ppconvert # #===========# for n in range(len(exe_arg_list)-1): # put " back on arguments arg1 = exe_arg_list[n] arg2 = exe_arg_list[n+1] if arg1.startswith('--') and arg1.endswith('ref'): if not arg2.startswith('"'): arg2 = '"'+arg2 #end if if not arg2.endswith('"'): arg2 = arg2+'"' #end if exe_arg_list[n+1] = arg2 #end if #end for script = True #exe = '/soft/applications/qmcpack/Binaries/ppconvert' exe = '/home/yeluo/qmcdev/trunk/src/QMCTools/ppconvert/build/ppconvert' prefix = 'ppconv' nodes = 1 procs = 1 threads = 1 time = 60 argstr = ' '+join_args(exe_arg_list)+'\n' runstr = exe+argstr elif exe_name=='rungms': #========# # GAMESS # #========# if len(exe_arg_list)!=1: error('must provide a single argument to rungms, the input file prefix\narguments provided: {0}'.format(exe_arg_list)) #end if infile_prefix = exe_arg_list[0] if guard: if infile_prefix.endswith('.inp'): infile = infile_prefix infile_prefix = infile_prefix.rsplit('.',1)[0] error('rungms expects the input file prefix, not the file itself\nfile provided: {0}\nprefix expected: {1}'.format(infile,infile_prefix)) else: infile = infile_prefix+'.inp' #end if if not os.path.exists(infile): error('gamess input file does not exist: {0}'.format(infile)) #end if #end if #gms = '/soft/applications/qmcpack/Binaries/gmsbgq' gms = '/home/yeluo/qmcdev/DFT_Binaries/gmsbgq.old' # 1 May 2012 (R2) nodes = 32 time = 20 mode = 'c1' # rungms prefix nodes time mode account prefix command = '{0} {1} {2} {3} {4} {5} {1}'.format(gms,infile_prefix,nodes,time,mode,account,infile_prefix) elif exe_name=='convert4qmc': #=============# # convert4qmc # #=============# prefix = 'c4q' for n in range(len(exe_arg_list)): if exe_arg_list[n]=='-prefix' and n+1