|
23 | 23 | N_el_aero = 7 |
24 | 24 |
|
25 | 25 | class AerostructParallel(MultipointParallel): |
26 | | - def __init__(self, aero_builder=None, struct_builder=None, xfer_builder=None, geometry_builder=None, scenario_names=None): |
27 | | - super().__init__() |
28 | | - self.aero_builder = aero_builder |
29 | | - self.struct_builder = struct_builder |
30 | | - self.xfer_builder = xfer_builder |
31 | | - self.geometry_builder = geometry_builder |
32 | | - self.scenario_names = scenario_names |
| 26 | + |
| 27 | + def initialize(self): |
| 28 | + self.options.declare('aero_builder') |
| 29 | + self.options.declare('struct_builder') |
| 30 | + self.options.declare('xfer_builder') |
| 31 | + self.options.declare('geometry_builder') |
| 32 | + self.options.declare('scenario_names') |
33 | 33 |
|
34 | 34 | def setup(self): |
35 | | - for i in range(len(self.scenario_names)): |
| 35 | + |
| 36 | + for scenario_name in self.options['scenario_names']: |
36 | 37 | nonlinear_solver = om.NonlinearBlockGS(maxiter=100, iprint=2, use_aitken=True, aitken_initial_factor=0.5) |
37 | 38 | linear_solver = om.LinearBlockGS(maxiter=40, iprint=2, use_aitken=True, aitken_initial_factor=0.5) |
38 | | - self.mphys_add_scenario(self.scenario_names[i], |
| 39 | + self.mphys_add_scenario(scenario_name, |
39 | 40 | ScenarioAeroStructural( |
40 | | - aero_builder=self.aero_builder, |
41 | | - struct_builder=self.struct_builder, |
42 | | - ldxfer_builder=self.xfer_builder, |
43 | | - geometry_builder=self.geometry_builder, |
| 41 | + aero_builder=self.options['aero_builder'], |
| 42 | + struct_builder=self.options['struct_builder'], |
| 43 | + ldxfer_builder=self.options['xfer_builder'], |
| 44 | + geometry_builder=self.options['geometry_builder'], |
44 | 45 | in_MultipointParallel=True), |
45 | 46 | coupling_nonlinear_solver=nonlinear_solver, |
46 | 47 | coupling_linear_solver=linear_solver) |
47 | 48 |
|
48 | 49 | # OM group |
49 | 50 | class Model(om.Group): |
| 51 | + def initialize(self): |
| 52 | + self.options.declare('scenario_names', default=['aerostructural1','aerostructural2']) |
| 53 | + |
50 | 54 | def setup(self): |
| 55 | + self.scenario_names = self.options['scenario_names'] |
51 | 56 |
|
52 | 57 | # ivc |
53 | 58 | self.add_subsystem('ivc', om.IndepVarComp(), promotes=['*']) |
@@ -76,38 +81,34 @@ def setup(self): |
76 | 81 | aero_builder = AeroBuilder(aero_setup) |
77 | 82 |
|
78 | 83 | # xfer builder |
79 | | - xfer_builder = XferBuilder( |
80 | | - aero_builder=aero_builder, |
81 | | - struct_builder=struct_builder |
82 | | - ) |
| 84 | + xfer_builder = XferBuilder(aero_builder=aero_builder, struct_builder=struct_builder) |
83 | 85 |
|
84 | 86 | # geometry |
85 | 87 | builders = {'struct': struct_builder, 'aero': aero_builder} |
86 | 88 | geometry_builder = GeometryBuilder(builders) |
87 | 89 |
|
88 | | - # list of scenario names |
89 | | - scenario_names = ['aerostructural1','aerostructural2'] |
90 | | - |
91 | 90 | # add parallel multipoint group |
92 | | - self.add_subsystem('multipoint',AerostructParallel( |
93 | | - aero_builder=aero_builder, |
94 | | - struct_builder=struct_builder, |
95 | | - xfer_builder=xfer_builder, |
96 | | - geometry_builder=geometry_builder, |
97 | | - scenario_names=scenario_names)) |
| 91 | + self.add_subsystem('multipoint', |
| 92 | + AerostructParallel( |
| 93 | + aero_builder=aero_builder, |
| 94 | + struct_builder=struct_builder, |
| 95 | + xfer_builder=xfer_builder, |
| 96 | + geometry_builder=geometry_builder, |
| 97 | + scenario_names=self.scenario_names) |
| 98 | + ) |
98 | 99 |
|
99 | | - for i in range(len(scenario_names)): |
| 100 | + for i in range(len(self.scenario_names)): |
100 | 101 |
|
101 | 102 | # connect scalar inputs to the scenario |
102 | 103 | for var in ['modulus', 'yield_stress', 'density', 'dv_struct']: |
103 | | - self.connect(var, 'multipoint.'+scenario_names[i]+'.'+var) |
| 104 | + self.connect(var, 'multipoint.'+self.scenario_names[i]+'.'+var) |
104 | 105 |
|
105 | 106 | # connect vector inputs |
106 | 107 | for var in ['mach', 'qdyn', 'aoa']: |
107 | | - self.connect(var, 'multipoint.'+scenario_names[i]+'.'+var, src_indices=[i]) |
| 108 | + self.connect(var, 'multipoint.'+self.scenario_names[i]+'.'+var, src_indices=[i]) |
108 | 109 |
|
109 | 110 | # connect top-level geom parameter |
110 | | - self.connect('geometry_morph_param', 'multipoint.'+scenario_names[i]+'.geometry.geometry_morph_param') |
| 111 | + self.connect('geometry_morph_param', 'multipoint.'+self.scenario_names[i]+'.geometry.geometry_morph_param') |
111 | 112 |
|
112 | 113 | # run model and check derivatives |
113 | 114 | if __name__ == "__main__": |
|
0 commit comments