4 babbling=
'''<!-- This file contains processor configurations for common node
5 sizes. It is used by the sites/*.ent to set processor counts for
8 DO NOT MODIFY THIS FILE! It is automatically generated by forecast_procs.py.
10 Coupled forecast information:
12 CPL_FCST_3KM_HYCOM_2IO_8PPN
14 | +=-=-=-=-=-=-=-=-=-= resolution: 2 or 3 km
16 | | +=-=-=-=-= minimum number of dedicated I/O nodes
18 | | +=-=-= node size (processors per node)
19 | +=-=-=-=-=-=-=- ocean model: HYCOM or POM
20 +=-=-=-=-=-=-=-=-=-=-=-= FCST = processor configuration (12:ppn=8+23:ppn=8+2:ppn=8)
21 TASKS = task count (296)
23 Uncoupled forecast information:
25 ATM_FCST_2KM_2IO_12PPN
27 | +=-=-=-=-=-=-=-=-=-= resolution: 2 or 3 km
29 | +=-=-=-=-= minimum number of dedicated I/O nodes
31 | +=-=-= node size (processors per node)
33 +=-=-=-=-=-=-=-=-=-=-=-= FCST = processor configuration (12:ppn=8+23:ppn=8+2:ppn=8)
34 TASKS = task count (296)
38 def pack(nodesize,count):
43 elif nodesize*(n//nodesize)==n:
44 out.append([n//nodesize,nodesize])
46 need=math.ceil(n/float(nodesize))
47 averagef=n/math.ceil(need)
48 af,ai = math.modf(averagef)
49 n1=need-round(af*need)
51 if n1: out.append([n1, ai])
52 if n2: out.append([n2, ai+1])
55 def gridproc(crayflag,n,*args):
64 elif isinstance(arg,basestring)
and re.match(
'^[0-9]+/[0-9]+$',arg):
68 nodemax=min(nodesize,int(arg[(c+1):],10))
69 out.extend(pack(nodemax,n))
75 out.extend(pack(nodesize,n))
77 sys.stderr.write(
'Bad argument '+repr(arg)+
'\n')
79 sumproc=sum(x*y
for x,y
in out)
80 s=
'+'.join([
'%d:ppn=%d'%(x,y)
for x,y
in out])
81 if requestproc!=sumproc:
82 sys.stderr.write(
'Logic error: requested %d proc got %d proc in %s.\n'%(
83 requestproc,sumproc,s))
92 for n
in [8,12,16,24,1024,2024]:
133 proclist= [ [
'NONE',0,0,0], [
'POM',cpl,pom,0], [
'HYCOM',6,90,0],
134 [
'POMWW3',cpl,pom,ww3] ]
136 proclist= [ [
'NONE',0,0,0], [
'POM',cpl,pom,0], [
'HYCOM',0,96,0],
137 [
'POMWW3',cpl,pom,ww3] ]
138 for om,cpl1,cpl2,cpl3
in proclist:
139 cray=
'_CRAY' if crayflag
else ''
141 pname=
'ATM_FCST_%dKM_%dIO_%dPPN%s'%(km,nio,n,cray)
142 tname=
'ATM_TASKS_%dKM_%dIO_%dPPN%s'%(km,nio,n,cray)
143 sumproc,procs = gridproc(crayflag,n,wrfcompute,io1,io2)
145 pname=
'CPL_FCST_%dKM_%s_%dIO_%dPPN%s'%(km,om,nio,n,cray)
146 tname=
'CPL_TASKS_%dKM_%s_%dIO_%dPPN%s'%(km,om,nio,n,cray)
148 sumproc,procs = gridproc(crayflag,n,cpl1,cpl2,cpl3,wrfcompute,io1,io2)
150 sumproc,procs = gridproc(crayflag,n,cpl1+cpl2+cpl3,wrfcompute,io1,io2)
151 print '<!ENTITY %s "%s">'%(pname,procs)
152 print '<!ENTITY %s "%d">'%(tname,int(round(sumproc)))