| Home |
#! /usr/bin/env python """ syntax: python m3d.py m3d.in """
Initialize python and run syntax. Please keep them.
Reference: docs.python.org/tut, docs.python.org/lib, docs.python.org/ref.
import os import re import sys import string
All the modules we need right now. Make them global for code simplicity.
#set up selectors
pcoment=re.compile('^(\s)*#.*')
pnewline=re.compile('^(\s)*\n$')
pstar=re.compile('^(\*)\w')
pnlist=re.compile('^&')
peel of comment lines, such as a line start with # sign: #This is modified on xx-xx-xxxx;
peel of unnecessary blank lines;
find the item checked by *, such as a line: seaborg *jaguar #I am choosing jaguar this time;
count the number of namelist in wxy file.
#IDs for all the fields given in m3d.input file
pmkfile=re.compile('^__makefile__', re.IGNORECASE)
pexec=re.compile('^__executable__', re.IGNORECASE)
pcomputer=re.compile('^__name_of_computer__', re.IGNORECASE)
pquenue=re.compile('^__name_of_quenue__', re.IGNORECASE)
presource=re.compile('^__resource__', re.IGNORECASE)
pjobname=re.compile('^__runtime_job_name__', re.IGNORECASE)
pmode=re.compile('^__runtime_mode__', re.IGNORECASE)
pequilibrium=re.compile('^__equilibrium__', re.IGNORECASE)
pchk=re.compile('^__checkpoint__', re.IGNORECASE)
pothers=re.compile('^__others__', re.IGNORECASE)
pconf=re.compile('^__configuration__', re.IGNORECASE)
pwxy=re.compile('^__wxy__', re.IGNORECASE)
pend=re.compile('^__', re.IGNORECASE)
IDs for all the fields listed in m3d.input and their names are self-explained.
The order of the field in m3d.input can be arbituary up to your convenience
except the following two:
__START__
__END__
They have to be in the begining and the end of the m3d.input, respectively.
They are picked up by ID "pend".
Up to this point, makefile generator is not available yet.
re.IGNORECASE means both lower case and upper case letters are acceptable.
#computer
pseaborg=re.compile('seaborg', re.IGNORECASE)
pjacquard=re.compile('jacquard', re.IGNORECASE)
pjaguar=re.compile('jaguar', re.IGNORECASE)
pbgl=re.compile('bgl', re.IGNORECASE)
A list of all the computers M3D are running now. More can be added in future.
#quenue
pinteractive=re.compile('interactive', re.IGNORECASE)
pdebug=re.compile('debug', re.IGNORECASE)
pregular=re.compile('regular', re.IGNORECASE)
ppremium=re.compile('premiun', re.IGNORECASE)
pbatch=re.compile('batch', re.IGNORECASE)
A list of all the quenue available for users. More can be added in future.
Actually "interactive" can be deleted since it is only used on Seaborg and
its turn-around time is the same as "debug" quenue.
#convenient definitions bn = ' ' nline = '\n'
"bn" represent one space; "nline" represents a new line.
These are given for code simplicity. Also anyone can add his/hers.
#default variables name_of_exe='m3dp.x' name_of_computer='seaborg' name_of_quenue = 'debug' num_of_proc=1 num_of_proc_total=1 wtime='00:30:00' name_of_job='m3dp' name_of_mode='vn' name_of_equilibrium='vmec4.dat' name_of_checkpoint='' name_of_config='config.dat' memory='4GB'
The name of all the global variables and their default values.
#__________________________fun1 generate wxy file__________________________
def construct_wxy_file(wxy):
"""driver for m3d dec-21-2006 by Jin Chen"""
new_wxy=[]
nlist_in_wxy=[]
for item in wxy:
if(pcoment.match(item)): #get rid of comment lines
pass
elif(pnewline.match(item)): #get rid of blank lines
pass
else:
new_wxy.append(string.strip(item)) #get rid of \n
#print new_wxy
#f=open('wxy', 'w')
for item in new_wxy: #item is a string, wxy is a list
#f.write(item)
first=string.strip(item)
second= re.sub(r"(\s)+=", "=", item) #get rid of space before =
third= re.sub(r"=(\s)+", "=", second) #get rid of the space after =
fourth= re.sub(r"(\s)+", " ", third) #keep only one space bettwen the fields
fifth= re.split(r"\s", fourth) #fifth is a list
for field in fifth:
#sys.stdout.write(field+nline)
#f.write(field+nline) #write a new look of wxy file
if(pnlist.match(field)): #count the number of namelist found for wxy file
#print ' is', wxy.index(' '+field+'\n'), 'th position in wxy'
nlist_in_wxy.append(field)
#f.close()
num_nlist=len(nlist_in_wxy)
print num_nlist, 'namelists are found for wxy :', nlist_in_wxy
print
Module construct_wxy_file. Rewrite the wxy file with each variable per line. For example,
if we uncomment the following 3 lines:
      #f=open('wxy', 'w')
                                #f.write(field+nline)
      #f.close()
wxy has a
#__________________________fun2 generate conf file__________________________ def construct_con_file(con): """driver for m3d dec-21-2006 by Jin Chen""" new_con=[] for item in con: if(pcoment.match(item)): #peel of comment lines pass elif(pnewline.match(item)): #peel of blank lines pass else: #f_m3d = re.match(r"(.+[\.].+)#(.*)", item) #peel of comments f_m3d = re.match(r"(.+[\.].+)(//)(.*)", item) #find floats i_m3d = re.match(r"(\d+)\s+(.*)", item) #find integers if(f_m3d): #print m_m3d.group(0) new_con.append(string.atof(f_m3d.group(1))) #found a float number elif(i_m3d): #print n_m3d.group(0) new_con.append(string.atoi(i_m3d.group(1))) #found an integer else: new_con.append(item) #if it's a string #f=open(name_of_config, 'w') #write a new look of config file #for item in new_con: #sys.stdout.write(str(item)+nline) #f.write(m3d[item]) #f.close() #get the numbers to calculate the total number of processors needed for the job A= new_con[0] B= new_con[1] C= new_con[2] D= new_con[3] E= new_con[4] F= new_con[5] #global num_of_proc_total if(D==1): num_of_proc_total=B*F elif(D==2): num_of_proc_total=B*(F+1) print 'num_of_proc_total = ', num_of_proc_total print #return it since "num_of_proc_total" is a global variable return num_of_proc_total
Module construct_con_file. It will calculate the total number of processors
using the values given in configuration file.
If user prefers, she/he can rewrite the config file with each value per line. For example,
if the following 4 lines are uncommented:
     #f=open(name_of_config, 'w')
     #for item in new_con:
                #f.write(m3d[item])
     #f.close()
config.dat has a
#__________________________fun3 generate job script__________________________
def construct_job_file(other_option):
"""driver for m3d dec-21-2006 by Jin Chen"""
pbs_sign = '#@'
resource =''
account_no = 'mp288'
runtime_option = ''
#computer
nodes= num_of_proc_total / num_of_proc
print 'num_of_nodes = ', nodes
sys.stdout.write('generate job submit file and then submitt the job'+nline)
#mpi command
if (pseaborg.match(name_of_computer)):
runtime_option = runtime_option + 'poe' +bn
if (pjacquard.match(name_of_computer)):
runtime_option = runtime_option + 'mpiexec' +bn
pbs_sign = '#PBS'
resource =''+ 'nodes=' + str(nodes) +':' + 'ppn=' + str(num_of_proc) + ',' + wtime
if (pjaguar.match(name_of_computer)):
runtime_option = runtime_option + 'yod' +bn
pbs_sign = '#PBS'
size = nodes
sn = re.search("sn", name_of_mode)
if(sn):
size = num_of_proc_total
resource =''+ wtime +','+ memory +','+ 'size=' + str(size)
account_no = 'FUS013' #FUS013dev and FUS013cem
if (pbgl.match(name_of_computer)):
runtime_option = runtime_option + 'cqsub' +bn+ ...
'-q' +bn+ name_of_quenue +bn+ '-t' +bn+ str(wtime) +bn+ ...
'-n' +bn+ str(num_of_proc*nodes) +bn+ '-'+name_of_mode +bn+ ...
str(num_of_proc*nodes) +bn
#m3d executable
runtime_option = runtime_option + name_of_exe + bn
if (pseaborg.match(name_of_computer)):
if(pinteractive.match(name_of_quenue)):
runtime_option = runtime_option +bn+ '-retry 20 -retrycount 100' +bn+ \
'-nodes' +bn+ str(nodes) +bn+ \
'-tasks_per_node' +bn+ str(num_of_proc) +bn
elif (pjaguar.match(name_of_computer)):
runtime_option = runtime_option + '-'+name_of_mode.upper() +bn
runtime_option = runtime_option + '\\' + nline
#physics
vmec = re.search("vmec", name_of_equilibrium)
equin = re.search("\.in", name_of_equilibrium)
if(vmec) :
runtime_option = runtime_option + '-vmecfile' +bn+ name_of_equilibrium +bn+'\\'+nline
elif equin:
runtime_option = runtime_option + '-vmecInput' +bn+ name_of_equilibrium +bn+'\\'+nline
if(name_of_checkpoint):
runtime_option = runtime_option + '-checkpoint' +bn+ name_of_checkpoint +bn+'\\'+nline
if(name_of_config):
runtime_option = runtime_option + '-configFile' +bn+ name_of_config +bn+'\\'+nline
runtime_option = runtime_option +'\\'+nline
#other options
runtime_option = runtime_option + other_option +'\\'+nline
runtime_option = runtime_option +'\\'+nline
#solver options
symm = re.search("m3dp_fsymm", name_of_exe)
if not symm:
runtime_option = runtime_option + '-poisson_pc_type asm' +bn+'\\'+nline \
+ '-poisson_pc_asm_overlap 1' +bn+'\\'+nline \
+ '-poisson_sub_pc_type ilu' +bn+'\\'+nline \
+ '-poisson_sub_pc_ilu_levels 3' +bn+'\\'+nline \
+ '-poisson_ksp_type gmres' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-poissonN_pc_type asm' +bn+'\\'+nline \
+ '-poissonN_pc_asm_overlap 1' +bn+'\\'+nline \
+ '-poissonN_sub_pc_type ilu' +bn+'\\'+nline \
+ '-poissonN_sub_pc_ilu_levels 3' +bn+'\\'+nline \
+ '-poissonN_ksp_type gmres' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-xflg_nullspace' +bn+'\\'+nline \
+ '-xpoissonN_pc_type asm' +bn+'\\'+nline \
+ '-xpoissonN_pc_asm_overlap 1' +bn+'\\'+nline \
+ '-xpoissonN_sub_pc_type icc' +bn+'\\'+nline \
+ '-xpoissonN_sub_pc_factor_levels 3' +bn+'\\'+nline \
+ '-xpoissonN_ksp_type cg' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-poissonH_pc_type asm' +bn+'\\'+nline \
+ '-poissonH_pc_asm_overlap 1' +bn+'\\'+nline \
+ '-poissonH_sub_pc_type ilu' +bn+'\\'+nline \
+ '-poissonH_sub_pc_ilu_levels 3' +bn+'\\'+nline \
+ '-poissonH_ksp_type gmres' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-pc_type asm' +bn+'\\'+nline \
+ '-pc_asm_overlap 1' +bn+'\\'+nline \
+ '-sub_pc_type ilu' +bn+'\\'+nline \
+ '-sub_pc_ilu_levels 3' +bn+'\\'+nline \
+ '-ksp_type gmres' +bn+'\\'+nline
#runtime_option = runtime_option + '-poisson_ksp_view -poisson_ksp_monitor \
-poissonN_ksp_view -poissonN_ksp_monitor \
-poissonH_ksp_view -poissonH_ksp_monitor \
-ksp_view -ksp_monitor'
elif symm :
runtime_option = runtime_option + '-poisson_pc_type hypre' +bn+'\\'+nline \
+ '-poisson_pc_hypre_type boomeramg' +bn+'\\'+nline \
+ '-poisson_ksp_type cg' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-poissonN_pc_type hypre' +bn+'\\'+nline \
+ '-poissonN_pc_hypre_type boomeramg' +bn+'\\'+nline \
+ '-poissonN_ksp_type cg' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-xflg_nullspace' +bn+'\\'+nline \
+ '-xpoissonN_pc_type asm' +bn+'\\'+nline \
+ '-xpoissonN_pc_asm_overlap 1' +bn+'\\'+nline \
+ '-xpoissonN_sub_pc_type icc' +bn+'\\'+nline \
+ '-xpoissonN_sub_pc_factor_levels 3' +bn+'\\'+nline \
+ '-xpoissonN_ksp_type cg' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-poissonH_pc_type hypre' +bn+'\\'+nline \
+ '-poissonH_pc_hypre_type boomeramg' +bn+'\\'+nline \
+ '-poissonH_ksp_type cg' +bn+'\\'+nline \
+ '\\' + nline
runtime_option = runtime_option + '-pc_type jacobi' +bn+'\\'+nline \
+ '-ksp_type cg' +bn+'\\'+nline
#runtime_option = runtime_option + '-poisson_ksp_view -poisson_ksp_monitor \
-poissonN_ksp_view -poissonN_ksp_monitor \
-poissonH_ksp_view -poissonH_ksp_monitor \
-ksp_view -ksp_monitor'
print
#print 'runtime_option = %s'% runtime_option
#generate job script
if (pseaborg.match(name_of_computer)):
if(pinteractive.match(name_of_quenue)):
f=open('rs.'+name_of_computer+'_'+name_of_job, 'w')
f.write(runtime_option)
f.close()
sys.stderr.write('submit job: rs.'+name_of_computer+'_'+name_of_job)
os.system('rs.'+name_of_computer+'_'+name_of_job)
else:
f=open('bs.'+name_of_computer+'_'+name_of_job, 'w')
f.write('#@ shell = /usr/bin/csh\n')
f.write('#@ name_of_job = %s\n'%name_of_job)
f.write('#@ output = %s.out\n'%name_of_job)
f.write('#@ error = %s.err\n'%name_of_job)
f.write('#@ account_no = %s\n'%account_no)
f.write('#@ job_type = parallel\n')
f.write('#@ class = %s\n'%name_of_quenue)
f.write('#@ tasks_per_node = '+ str(num_of_proc) +'\n')
f.write('#@ node = '+ str(nodes) +'\n')
f.write('#@ wall_clock_limit= %s\n'% wtime)
f.write('#@ notification = complete\n')
f.write('#@ network.MPI = csss,not_shared,us\n')
f.write('#@ queue\n')
f.write('\n')
f.write(runtime_option)
f.write('\n')
f.write('\n')
f.write('echo End of Execution `date`\n')
f.write('\n')
f.write('exit\n')
f.close()
sys.stderr.write('submit job: bs.'+name_of_computer+'_'+name_of_job)
os.system('llsubmit bs.'+name_of_computer+'_'+name_of_job)
elif (pbgl.match(name_of_computer)):
f=open('rs.'+name_of_computer+'_'+name_of_job, 'w')
f.write(runtime_option)
f.close()
sys.stderr.write('submit job: rs.'+name_of_computer+'_'+name_of_job)
os.system('cqsub rs.'+name_of_computer+'_'+name_of_job)
else:
f=open('bs.'+name_of_computer+'_'+name_of_job, 'w')
f.write('#!/bin/csh' + nline)
f.write(pbs_sign +bn+ '-A' +bn+ '%s\n' % account_no)
f.write(pbs_sign +bn+ '-N' +bn+ '%s\n' % name_of_job )
f.write(pbs_sign +bn+ '-o' +bn+ '%s.out\n' % name_of_job)
f.write(pbs_sign +bn+ '-e' +bn+ '%s.err\n' % name_of_job)
f.write(pbs_sign +bn+ '-l' +bn+ '%s\n' % resource)
f.write(pbs_sign +bn+ '-q' +bn+ '%s\n' % name_of_quenue)
f.write(pbs_sign +bn+ '-m' +bn+ 'e\n')
f.write(pbs_sign +bn+ '-V\n')
f.write(nline)
if (pjacquard.match(name_of_computer)):
#path = os.getcwd()
#pritnt path
#f.write('cd'+bn+path)
f.write('echo'+bn+'$PBS_NODEFILE'+nline)
f.write('echo'+bn+'$PBS_O_WORKDIR'+nline)
f.write(nline)
f.write('cd'+bn+'$PBS_O_WORKDIR'+nline)
f.write(nline)
f.write(runtime_option)
f.write(nline)
f.write(nline)
f.write('echo End of Execution `date`\n')
f.write(nline)
f.write('exit' + nline)
f.close()
sys.stderr.write('qsub job: bs.'+name_of_computer+'_'+name_of_job)
os.system('qsub bs.'+name_of_computer+'_'+name_of_job)
Module construct_job_file.
It generates runtime script for each individual machine and submit the job in the end.
#__________________________main__________________________
if __name__ == "__main__":
"""driver for m3d dec-21-2006 by Jin Chen"""
#all the lists and variables are defined here.
resource=[]
others=[]
con=[]
wxy=[]
block=[]
start_of_resource = 0
start_of_others = 0
start_of_conf = 0
start_of_wxy = 0
#read in the files
name_m3d=sys.argv[1]
fid_m3d=file(name_m3d, 'r')
m3d=fid_m3d.readlines() #m3d is a list
fid_m3d.close()
print 'm3d input is given in file %s'% name_m3d
#for item in m3d:
#sys.stdout.write(item)
print
#seperate each block into individual list
for item in m3d:
if(pmkfile.match(item)):
block.append(m3d.index(item))
elif(pexec.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_exe = item[1:]
print 'name_of_executable: %s'% name_of_exe
elif(pcomputer.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_computer=item[1:]
print 'name_of_computer: %s'% name_of_computer
elif(pquenue.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_quenue=item[1:]
print 'name_of_quenue: %s'% name_of_quenue
elif(presource.match(item)):
ind=m3d.index(item)
block.append(ind)
start_of_resource = len(block)-1
#presource=m3d[ind+1].strip()
#print 'wall_clock_time is: %s'% wtime
elif(pjobname.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_job=item[1:]
print 'runtime job name is: %s'% name_of_job
elif(pmode.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_mode=item[1:]
print 'name_of_mode: %s'% name_of_mode
elif(pequilibrium.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_equilibrium=item[1:]
print 'name_of_equilibrium: %s'% name_of_equilibrium
elif(pchk.match(item)):
ind=m3d.index(item)
block.append(ind)
first = string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_checkpoint=item[1:]
print 'name_of_checkpoint: %s'% name_of_checkpoint
elif(pothers.match(item)):
ind=m3d.index(item)
block.append(ind)
start_of_others = len(block)-1
#num_of_proc=string.atoi(m3d[ind+1])
#print 'num_of_proc: %d'% num_of_proc
elif(pconf.match(item)):
ind=m3d.index(item)
block.append(ind)
start_of_conf = len(block)-1
first= string.strip(m3d[ind+1])
second = first.split()
for item in second:
if pstar.match(item):
name_of_config=item[1:]
print 'name_of_configuration: %s'% name_of_config
elif(pwxy.match(item)):
block.append(m3d.index(item))
start_of_wxy = len(block)-1
elif(pend.match(item)):
block.append(m3d.index(item))
print 'We found %s blocks: resource start from %d; ...
other options start from %d; ...
conf start from %d; ...
wxy start from %d'%...
(len(block), start_of_resource, start_of_others, start_of_conf, start_of_wxy)
print
if (pseaborg.match(name_of_computer)):
pass
elif (pbgl.match(name_of_computer)):
if (pdebug.match(name_of_quenue)):
name_of_quenue='short'
else:
name_of_quenue='long'
else:
if (pdebug.match(name_of_quenue)):
pass
else:
name_of_quenue='batch'
#construct resouce list
if(start_of_resource):
for index in range( block[start_of_resource]+1, block[start_of_resource+1]):
if(pcoment.match(m3d[index])):
pass
elif(pnewline.match(m3d[index])):
pass
else:
resource.append(string.strip(m3d[index])) #get rid of \n
print 'resource list = '#, resource
for item in resource: #item is a string, resource is a list
first=string.strip(item)
second= re.sub(r"(\s)+=", "=", item) #get rid of space before =
third= re.sub(r"=(\s)+", "=", second) #get rid of the space after =
fourth= re.sub(r"(\s)+", " ", third) #keep only one space bettwen the fields
fifth= re.split(r"\s", fourth) #fifth is a list
for field in fifth:
#sys.stdout.write("\t"+field+nline)
c_m3d = re.match(r"(.+[\.].+)#(.*)", field) #peel of comments
i_m3d = re.match(r"(.+)(=)(\d+)", field) #peel of integer
s_m3d = re.match(r"(.+)(=)(.+)", field) #peel of string
pnp = re.search("num_proc_per_node", field)
if(pnp):
print i_m3d.group(0)
num_of_proc = string.atoi((i_m3d.group(3)))
wtim = re.search("walltime", field)
if(wtim):
print s_m3d.group(0)
wtime= s_m3d.group(0)
memo = re.search("mem", field)
if(memo):
print s_m3d.group(0)
memory = s_m3d.group(0)
print
#construct others list
if(start_of_others):
for index in range( block[start_of_others]+1, block[start_of_others+1]):
if(pcoment.match(m3d[index])):
pass
elif(pnewline.match(m3d[index])):
pass
else:
others.append(string.strip(m3d[index])) #get rid of \n
other_option = ''
print 'other options = '#, others
for item in others: #item is a string, others is a list
first=string.strip(item)
second= re.sub(r"(\s)+=", "=", item) #get rid of space before =
third= re.sub(r"=(\s)+", "=", second) #get rid of the space after =
fourth= re.sub(r"(\s)+", " ", third) #keep only one space bettwen the fields
fifth= re.split(r"\s", fourth) #fifth is a list
for field in fifth:
#sys.stdout.write("\t"+field+nline)
c_m3d = re.match(r"(.+[\.].+)#(.*)", field) #peel of comments
i_m3d = re.match(r"(.+)(=)(\d+)", field) #peel of integer
s_m3d = re.match(r"(.+)(=)(.+)", field) #peel of string
f_m3d = re.match(r"(.+[\.].+)(//)(.*)", item) #peel of float
chkf = re.search("iwriteCheckPoint", field)
if(chkf):
print i_m3d.group(1), i_m3d.group(3)
other_option = other_option + '-'+i_m3d.group(1) +bn+ i_m3d.group(3) +bn
rescale = re.search("rescale", field)
if(rescale):
print i_m3d.group(1), i_m3d.group(3)
if string.atoi(i_m3d.group(3)) > 0:
other_option = other_option + '-'+i_m3d.group(1) +bn
EB = re.search("EngUpBound", field)
if(EB):
print s_m3d.group(1), s_m3d.group(3)
other_option = other_option + '-'+s_m3d.group(1) +bn+ s_m3d.group(3) +bn
timestep = re.search("timestep", field)
if(timestep):
print s_m3d.group(1), s_m3d.group(3)
other_option = other_option + '-'+s_m3d.group(1) +bn+ s_m3d.group(3) +bn
NumRestart = re.search("NumRestart", field)
if(NumRestart):
print i_m3d.group(1), i_m3d.group(3)
other_option = other_option + '-'+s_m3d.group(1) +bn+ s_m3d.group(3) +bn
samplingT = re.search("samplingT", field)
if(samplingT):
print i_m3d.group(1), i_m3d.group(3)
other_option = other_option + '-'+s_m3d.group(1) +bn+ s_m3d.group(3) +bn
its = re.search("its", field)
if(its):
print i_m3d.group(1), i_m3d.group(3)
other_option = other_option + '-'+s_m3d.group(1) +bn+ s_m3d.group(3) +bn
print other_option
print
#construct configuration list
if(start_of_conf):
sys.stdout.write('generate configuration file'+nline)
f=open(name_of_config, 'w')
#print ' range', ( block[start_of_conf]+1, block[start_of_conf+1])
for index in range( block[start_of_conf]+2, block[start_of_conf+1]):
con.append(m3d[index])
f.write(m3d[index])
f.close()
#construct wxy list
if(start_of_wxy):
sys.stdout.write('generate wxy file'+nline)
f=open('wxy', 'w')
#print ' range', ( block[start_of_wxy]+1, block[start_of_wxy+1])
for index in range( block[start_of_wxy]+1, block[start_of_wxy+1]):
#sys.stdout.write(m3d[index])
wxy.append(m3d[index])
f.write(m3d[index])
f.close()
#call modules construct_con_file, construct_wxy_file, construct_job_file
sys.stdout.write(nline)
num_of_proc_total = construct_con_file(con)
construct_wxy_file(wxy)
construct_job_file(other_option)
Python driver.