def setup(self): dv = self.add_subsystem('des_vars', IndepVarComp(), promotes=['*']) dv.add_output('x', 1.0) dv.add_output('z', np.array([5.0, 2.0])) self.add_subsystem('d1', SellarDis2(), promotes_inputs=['y1'], promotes_outputs=['foo']) self.add_subsystem('d2', SellarDis2())
def setup(self): indeps = self.add_subsystem('indeps', om.IndepVarComp(), promotes=['*']) indeps.add_output('x', 1.0) indeps.add_output('z', np.array([5.0, 2.0])) cycle = self.add_subsystem('cycle', om.ParallelGroup(), promotes=['*']) cycle.add_subsystem('d1', SellarDis1(), promotes_inputs=['x', 'z', 'y2'], promotes_outputs=['y1']) cycle.add_subsystem('d2', SellarDis2(), promotes_inputs=['z', 'y1'], promotes_outputs=['y2']) # Nonlinear Block Gauss Seidel is a gradient free solver cycle.nonlinear_solver = om.NonlinearBlockGS() self.add_subsystem('obj_cmp', om.ExecComp( 'obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0), promotes=['x', 'z', 'y1', 'y2', 'obj']) self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1'), promotes=['con1', 'y1']) self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'), promotes=['con2', 'y2'])
def test_res_ref(self): class ContrivedSellarDis1(SellarDis1): def setup(self): super(ContrivedSellarDis1, self).setup() self.add_output('highly_nonlinear', val=1.0, res_ref=1e-4) def compute(self, inputs, outputs): super(ContrivedSellarDis1, self).compute(inputs, outputs) outputs['highly_nonlinear'] = 10 * np.sin(10 * inputs['y2']) p = Problem() model = p.model model.add_subsystem('px', IndepVarComp('x', 1.0), promotes=['x']) model.add_subsystem('pz', IndepVarComp('z', np.array([5.0, 2.0])), promotes=['z']) model.add_subsystem('d1', ContrivedSellarDis1(), promotes=['x', 'z', 'y1', 'y2']) model.add_subsystem('d2', SellarDis2(), promotes=['z', 'y1', 'y2']) nlbgs = model.nonlinear_solver = NonlinearBlockGS() nlbgs.options['maxiter'] = 20 nlbgs.options['atol'] = 1e-6 nlbgs.options['rtol'] = 1e-100 p.setup() p.run_model() self.assertEqual(nlbgs._iter_count, 9, 'res_ref should make this take more iters.')
def setup(self): indeps = self.add_subsystem('indeps', IndepVarComp()) indeps.add_output('x', 1.0) indeps.add_output('z', np.array([5.0, 2.0])) cycle = self.add_subsystem('cycle', Group()) d1 = cycle.add_subsystem('d1', SellarDis1()) d2 = cycle.add_subsystem('d2', SellarDis2()) cycle.connect('d1.y1', 'd2.y1') ###################################### # This is a "forgotten" connection!! ###################################### #cycle.connect('d2.y2', 'd1.y2') # Nonlinear Block Gauss Seidel is a gradient free solver cycle.nonlinear_solver = NonlinearBlockGS() self.add_subsystem('obj_cmp', ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0)) self.add_subsystem('con_cmp1', ExecComp('con1 = 3.16 - y1')) self.add_subsystem('con_cmp2', ExecComp('con2 = y2 - 24.0')) self.connect('indeps.x', ['cycle.d1.x', 'obj_cmp.x']) self.connect('indeps.z', ['cycle.d1.z', 'cycle.d2.z', 'obj_cmp.z']) self.connect('cycle.d1.y1', ['obj_cmp.y1', 'con_cmp1.y1']) self.connect('cycle.d2.y2', ['obj_cmp.y2', 'con_cmp2.y2'])
def setup(self): cycle = self.add_subsystem('cycle', om.Group(), promotes=['*']) cycle.add_subsystem('d1', SellarDis1(), promotes_inputs=['x', 'z']) cycle.add_subsystem('d2', SellarDis2(), promotes_inputs=['z']) cycle.connect('d1.y1', 'd2.y1') cycle.connect('d2.y2', 'd1.y2') cycle.set_input_defaults('x', 1.0) cycle.set_input_defaults('z', np.array([5.0, 2.0])) # Nonlinear Block Gauss Seidel is a gradient free solver cycle.nonlinear_solver = om.NonlinearBlockGS() self.add_subsystem('obj_cmp', om.ExecComp( 'obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0), promotes_inputs=['x', 'z']) self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1')) self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0')) self.connect('d1.y1', ['con_cmp1.y1', 'obj_cmp.y1']) self.connect('d2.y2', ['con_cmp2.y2', 'obj_cmp.y2'])
def setup(self): # set up model hierarchy cycle = self.add_subsystem('cycle', om.Group()) cycle.add_subsystem('d1', SellarDis1()) cycle.add_subsystem('d2', SellarDis2()) cycle.nonlinear_solver = om.NonlinearBlockGS() self.add_subsystem( 'obj_cmp', om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0)) self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1')) self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))
def setup(self): cycle = self.add_subsystem('cycle', om.Group(), promotes_inputs=['x', 'z']) cycle.add_subsystem('d1', SellarDis1(), promotes_inputs=['x', 'z']) cycle.add_subsystem('d2', SellarDis2(), promotes_inputs=['z']) cycle.connect('d1.y1', 'd2.y1') cycle.nonlinear_solver = om.NonlinearBlockGS() self.add_subsystem('obj_cmp', om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0), promotes_inputs=['x', 'z']) self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1')) self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0')) self.connect('cycle.d1.y1', ['obj_cmp.y1', 'con_cmp1.y1']) self.connect('cycle.d2.y2', ['obj_cmp.y2', 'con_cmp2.y2'])
def setUp(self): self.prob = Problem() model = self.prob.model model.add_subsystem("px", IndepVarComp("x", 1.0), promotes=["x"]) model.add_subsystem("pz", IndepVarComp("z", np.array([5.0, 2.0])), promotes=["z"]) model.add_subsystem("d1", ContrivedSellarDis1(), promotes=["x", "z", "y1", "y2"]) model.add_subsystem("d2", SellarDis2(), promotes=["z", "y1", "y2"]) self.nlbgs = nlbgs = model.nonlinear_solver = RecklessNonlinearBlockGS( ) nlbgs.options["maxiter"] = 20 nlbgs.options["atol"] = 1e-6 nlbgs.options["rtol"] = 1e-6 nlbgs.options["iprint"] = 2
def setup(self): # set up model hierarchy indeps = self.add_subsystem('indeps', om.IndepVarComp(), promotes=['*']) indeps.add_output('x', 1.0) indeps.add_output('z', np.array([5.0, 2.0])) cycle = self.add_subsystem('cycle', om.Group()) cycle.add_subsystem('d1', SellarDis1()) cycle.add_subsystem('d2', SellarDis2()) cycle.nonlinear_solver = om.NonlinearBlockGS() self.add_subsystem( 'obj_cmp', om.ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)', z=np.array([0.0, 0.0]), x=0.0)) self.add_subsystem('con_cmp1', om.ExecComp('con1 = 3.16 - y1')) self.add_subsystem('con_cmp2', om.ExecComp('con2 = y2 - 24.0'))