|
Package parasol ::
Module Plots_Cache'
|
|
1
2
3
4
5
6
9
10 self.maxCache = maxCache
11 self.Nresults = 0
12 self.PS = PS
13 self.resultDict = {}
14
15 self.desVarL = []
16
17
18 self.resultVarL = []
19
20
21 for key,dv in self.PS.desVarDict.items():
22 if PS.hasMinMaxControlVar(key) or PS.hasFeasibleControlVar(key):
23
24 self.resultVarL.append(dv)
25 else:
26 self.desVarL.append(dv)
27
28 for key,rv in self.PS.resultVarDict.items():
29 self.resultVarL.append(rv)
30
31 print ' ----------------------------------- '
32 for dv in self.desVarL:
33 print ' DESIGN===>',dv.name,'in Plots_Cache desVar List'
34 for rv in self.resultVarL:
35 print ' RESULT===>',rv.name,'in Plots_Cache resultVar List'
36 print ' ----------------------------------- '
37
39 '''Save design variables values in dictionary, dvSavedD, so the state can
40 be restored at a later time by restoreParasolState
41 '''
42 self.dvSavedD = {}
43 for dv in self.desVarL:
44 self.dvSavedD[dv.name] = dv.val
45
47 '''Restore design variables values from dvSavedD and call
48 ParametricSoln model evaluate(), this is done to restore the last call
49 to saveParasolState
50 '''
51 for dv in self.desVarL:
52 dv.val = self.dvSavedD[dv.name]
53 self.PS.evaluate()
54
56 '''
57 Either retrieve results from cache, or rerun model to get result vars
58 Assume that the desVars have been set in PS to desired values
59 '''
60
61 dvL = []
62 for dv in self.desVarL:
63 dvL.append( dv.val )
64 dvTuple = tuple( dvL )
65
66 if self.resultDict.has_key(dvTuple):
67
68 rvL = self.resultDict[dvTuple]
69 for i,rv in enumerate( self.resultVarL ):
70 rv.val = rvL[i]
71
72
73 else:
74 self.PS.evaluate()
75
76 rvL = []
77 for rv in self.resultVarL:
78 rvL.append( rv.val )
79
80
81 if self.Nresults < self.maxCache:
82 self.Nresults += 1
83 self.resultDict[dvTuple] = rvL
84
85
86 if dump:
87 keyL = self.resultDict.keys()
88 keyL.sort()
89 for key in keyL:
90 print key,self.resultDict[key]
91
93 '''set up so that the ParametricSoln model can be called as a simple function
94 by Carpet plot routine
95
96 for example:
97 setUpForFuncCall( dvL=['a','b'], outL=['x','y'])
98
99 would set up for:
100 x, y = self.funcCall( a, b )
101 '''
102
103 self.funcCallDesVarNameL = dvNameL
104 self.funcCAllOutVarNameL = outNameL
105
106 self.violationCoordL = []
107 self.violationDescD = {}
108
109
111 '''Treats ParametricSoln object like a function call as defined in setUpForFuncCall
112 (only used by Carpet plot routine)
113 '''
114
115
116 for i,dvName in enumerate(self.funcCallDesVarNameL):
117 self.PS.setDesignVar( dvName, dvL[i] )
118
119 self.getResults()
120
121 resultL = []
122 for outName in self.funcCAllOutVarNameL:
123 if self.PS.hasResultVar(outName):
124 resultL.append( self.PS.getResultVar(outName) )
125 else:
126 resultL.append( self.PS.getDesignVar(outName) )
127
128
129 vioList = self.PS.violatesResultConstraint()
130 if len(vioList)>0:
131 self.violationCoordL.append( resultL )
132 for viol in vioList:
133 self.violationDescD[viol] = viol
134
135 return resultL
136
137
139 if len(self.violationCoordL)==0:
140 return [],[]
141
142 jj=range(len(self.violationCoordL[0]))
143
144 rl = [[li[j] for li in self.violationCoordL] for j in jj]
145 if len(rl)==1:
146 rl=rl[0]
147 return rl
148