-
Notifications
You must be signed in to change notification settings - Fork 55
/
espsite.py.example.PBSstdinopenmpi
46 lines (36 loc) · 1.73 KB
/
espsite.py.example.PBSstdinopenmpi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# cluster-dependent definitions
# espresso.py will make use of all "self" variables in config class
import os
class config:
def __init__(self):
self.scratch = '/scratch'
if not os.path.exists(self.scratch):
self.scratch = '/tmp'
self.submitdir = os.getenv('PBS_O_WORKDIR')
self.batch = self.submitdir!=None
#check for batch
if self.batch:
nodefile = os.getenv('PBS_NODEFILE')
f = open(nodefile, 'r')
procs = [x.strip() for x in f.readlines()]
f.close()
self.procs = procs
self.jobid = os.getenv('PBS_JOBID')
nprocs = len(procs)
self.nprocs = nprocs
uniqnodefile = self.scratch+'/uniqnodefile'
os.system('uniq $PBS_NODEFILE >'+uniqnodefile)
p = os.popen('wc -l <'+uniqnodefile, 'r')
nnodes = p.readline().strip()
p.close()
self.perHostMpiExec = 'mpiexec -machinefile '+uniqnodefile+' -np '+nnodes
self.perProcMpiExec = 'mpiexec -machinefile '+nodefile+' -np '+str(nprocs)+' -wdir %s %s'
self.perSpecProcMpiExec = 'mpiexec -machinefile %s -np %d -wdir %s %s'
def do_perProcMpiExec(self, workdir, program):
return os.popen2(self.perProcMpiExec % (workdir, program))
def do_perProcMpiExec_outputonly(self, workdir, program):
return os.popen(self.perProcMpiExec % (workdir, program), 'r')
def runonly_perProcMpiExec(self, workdir, program):
os.system(self.perProcMpiExec % (workdir, program))
def do_perSpecProcMpiExec(self, machinefile, nproc, workdir, program):
return os.popen3(self.perSpecProcMpiExec % (machinefile, nproc, workdir, program))