33import numpy as np
44
55# protection incase env doesn't have matplotlib installed, since its not strictly required
6- try :
6+ try :
77 import matplotlib
88 import matplotlib .pyplot as plt
9- except ImportError :
9+ except ImportError :
1010 plt = None
1111
1212
13+ def get_val (prob , point , element , var_name , units = None ):
14+ """
15+ Get the value of the requested element from the OpenMDAO model.
16+
17+ Parameters
18+ ----------
19+ prob: <Problem>
20+ OpenMDAO problem that contains the pycycle model.
21+ point: str
22+ OpenMDAO pathname of the cycle point.
23+ element: str
24+ Name of the pcycle element system.
25+ var_name: str
26+ Name of the variable to get.
27+ units: str or None
28+ Units for the return value. Default is None, which will return using the delared units.
29+
30+ Returns
31+ float
32+ Value of requested element.
33+ """
34+ try :
35+ val = prob .get_val (f"{ point } .{ element } .{ var_name } " , units = units )
36+ except KeyError :
37+ # This is a cycle parameter.
38+ val = prob .get_val (f"{ element } .{ var_name } " , units = units )
39+
40+ return val [0 ]
41+
1342def print_flow_station (prob , fs_names , file = sys .stdout ):
1443 names = ['tot:P' , 'tot:T' , 'tot:h' , 'tot:S' , 'stat:P' , 'stat:W' , 'stat:MN' , 'stat:V' , 'stat:area' ]
1544
@@ -83,14 +112,19 @@ def print_burner(prob, element_names, file=sys.stdout):
83112
84113 # line_tmpl = '{:<20}| '+'{:13.3f}'*4
85114 line_tmpl = '{:<20}| {:13.4f}{:13.2f}{:13.4f}{:13.5f}'
115+
86116 for e_name in element_names :
87- W_fuel = prob [e_name + '.Wfuel' ][0 ]
88- W_tot = prob [e_name + '.Fl_O:stat:W' ][0 ]
117+
118+ point , _ , element = e_name .rpartition ("." )
119+
120+ W_fuel = get_val (prob , point , element , 'Wfuel' )
121+ W_tot = get_val (prob , point , element , 'Fl_O:stat:W' )
89122 W_air = W_tot - W_fuel
90123 FAR = W_fuel / W_air
91- print (line_tmpl .format (e_name , prob [e_name + '.dPqP' ][0 ],
92- prob [e_name + '.Fl_O:tot:T' ][0 ],
93- W_fuel , FAR ),
124+ dPqP = get_val (prob , point , element , 'dPqP' )
125+ T_tot = get_val (prob , point , element , 'Fl_O:tot:T' )
126+
127+ print (line_tmpl .format (e_name , dPqP , T_tot , W_fuel , FAR ),
94128 file = file , flush = True )
95129
96130
@@ -108,17 +142,28 @@ def print_turbine(prob, element_names, file=sys.stdout):
108142
109143 line_tmpl = '{:<14}| ' + '{:13.3f}' * 9
110144 for e_name in element_names :
145+
146+ point , _ , element = e_name .rpartition ("." )
147+
111148 sys = prob .model ._get_subsystem (e_name )
112149 if sys .options ['design' ]:
113- PR_temp = prob [ e_name + '. map.scalars.PR'][ 0 ]
114- eff_temp = prob [ e_name + '. map.scalars.eff'][ 0 ]
150+ PR_temp = get_val ( prob , point , element , ' map.scalars.PR')
151+ eff_temp = get_val ( prob , point , element , ' map.scalars.eff')
115152 else :
116- PR_temp = prob [e_name + '.PR' ][0 ]
117- eff_temp = prob [e_name + '.eff' ][0 ]
118-
119- print (line_tmpl .format (e_name , prob [e_name + '.Wp' ][0 ], PR_temp ,
120- eff_temp , prob [e_name + '.eff_poly' ][0 ], prob [e_name + '.Np' ][0 ], prob [e_name + '.power' ][0 ],
121- prob [e_name + '.map.NpMap' ][0 ], prob [e_name + '.map.PRmap' ][0 ], prob [e_name + '.map.alphaMap' ][0 ]),
153+ PR_temp = get_val (prob , point , element , 'PR' )
154+ eff_temp = get_val (prob , point , element , 'eff' )
155+
156+ Wp = get_val (prob , point , element , 'Wp' )
157+ eff_poly = get_val (prob , point , element , 'eff_poly' )
158+ Np = get_val (prob , point , element , 'Np' )
159+ power = get_val (prob , point , element , 'power' )
160+ NpMap = get_val (prob , point , element , 'map.NpMap' )
161+ PRmap = get_val (prob , point , element , 'map.PRmap' )
162+ alphaMap = get_val (prob , point , element , 'map.alphaMap' )
163+
164+ print (line_tmpl .format (e_name , Wp , PR_temp ,
165+ eff_temp , eff_poly , Np , power ,
166+ NpMap , PRmap , alphaMap ),
122167 file = file , flush = True )
123168
124169
@@ -134,21 +179,30 @@ def print_nozzle(prob, element_names, file=sys.stdout):
134179
135180
136181 for e_name in element_names :
182+
183+ point , _ , element = e_name .rpartition ("." )
184+
137185 sys = prob .model ._get_subsystem (e_name )
138186 if sys .options ['lossCoef' ] == 'Cv' :
139- Cv_val = prob [e_name + '.Cv' ][0 ]
187+
188+ Cv_val = get_val (prob , point , element , 'Cv' )
140189 Cfg_val = ' N/A '
141190 line_tmpl = '{:<14}| ' + '{:13.3f}' * 2 + '{}' + '{:13.3f}' * 5
142191
143192 else :
144193 Cv_val = ' N/A '
145- Cfg_val = prob [ e_name + '. Cfg'][ 0 ]
194+ Cfg_val = get_val ( prob , point , element , ' Cfg')
146195 line_tmpl = '{:<14}| ' + '{:13.3f}' * 1 + '{}' + '{:13.3f}' * 6
147196
148- print (line_tmpl .format (e_name , prob [e_name + '.PR' ][0 ], Cv_val , Cfg_val ,
149- prob [e_name + '.Throat:stat:area' ][0 ], prob [e_name + '.Throat:stat:MN' ][0 ],
150- prob [e_name + '.Fl_O:stat:MN' ][0 ],
151- prob [e_name + '.Fl_O:stat:V' ][0 ], prob [e_name + '.Fg' ][0 ]),
197+ PR = get_val (prob , point , element , 'PR' )
198+ area = get_val (prob , point , element , 'Throat:stat:area' )
199+ throat_MN = get_val (prob , point , element , 'Throat:stat:MN' )
200+ MN = get_val (prob , point , element , 'Fl_O:stat:MN' )
201+ V = get_val (prob , point , element , 'Fl_O:stat:V' )
202+ Fg = get_val (prob , point , element , 'Fg' )
203+
204+ print (line_tmpl .format (e_name , PR , Cv_val , Cfg_val ,
205+ area , throat_MN , MN , V , Fg ),
152206 file = file , flush = True )
153207
154208
@@ -287,7 +341,7 @@ def plot_compressor_maps(prob, element_names, eff_vals=np.array([0,0.5,0.55,0.6,
287341 plt .ylabel ('PR' )
288342 plt .title (e_name )
289343 # plt.show()
290- plt .savefig (e_name + '.pdf' )
344+ plt .savefig (e_name + '.pdf' )
291345
292346
293347def plot_turbine_maps (prob , element_names , eff_vals = np .array ([0 ,0.5 ,0.55 ,0.6 ,0.65 ,0.7 ,0.75 ,0.8 ,0.85 ,0.9 ,0.95 ,1.0 ]),alphas = [0 ]):
@@ -321,5 +375,5 @@ def plot_turbine_maps(prob, element_names, eff_vals=np.array([0,0.5,0.55,0.6,0.6
321375 plt .ylabel ('PR' )
322376 plt .title (e_name )
323377 # plt.show()
324- plt .savefig (e_name + '.pdf' )
378+ plt .savefig (e_name + '.pdf' )
325379
0 commit comments