def test_basic_implicit_conn(self): """Test units with all implicit connections.""" prob = om.Problem() prob.model.add_subsystem('px1', om.IndepVarComp('x1', 100.0), promotes_outputs=['x1']) prob.model.add_subsystem('src', SrcComp(), promotes_inputs=['x1'], promotes_outputs=['x2']) prob.model.add_subsystem('tgtF', TgtCompF(), promotes_inputs=['x2']) prob.model.add_subsystem('tgtC', TgtCompC(), promotes_inputs=['x2']) prob.model.add_subsystem('tgtK', TgtCompK(), promotes_inputs=['x2']) # Check the outputs after running to test the unit conversions prob.setup() prob.run_model() assert_near_equal(prob['x2'], 100.0, 1e-6) assert_near_equal(prob['tgtF.x3'], 212.0, 1e-6) assert_near_equal(prob['tgtC.x3'], 100.0, 1e-6) assert_near_equal(prob['tgtK.x3'], 373.15, 1e-6) # Check the total derivatives in forward mode wrt = ['x1'] of = ['tgtF.x3', 'tgtC.x3', 'tgtK.x3'] J = prob.compute_totals(of=of, wrt=wrt, return_format='flat_dict') assert_near_equal(J['tgtF.x3', 'x1'][0][0], 1.8, 1e-6) assert_near_equal(J['tgtC.x3', 'x1'][0][0], 1.0, 1e-6) assert_near_equal(J['tgtK.x3', 'x1'][0][0], 1.0, 1e-6) # Check the total derivatives in reverse mode prob.setup(check=False, mode='rev') prob.run_model() J = prob.compute_totals(of=of, wrt=wrt, return_format='flat_dict') assert_near_equal(J['tgtF.x3', 'x1'][0][0], 1.8, 1e-6) assert_near_equal(J['tgtC.x3', 'x1'][0][0], 1.0, 1e-6) assert_near_equal(J['tgtK.x3', 'x1'][0][0], 1.0, 1e-6)
def test_unit_conv_group(self, vec_class): if not vec_class: raise unittest.SkipTest("PETSc is not installed") prob = self.prob prob.model = Group() prob.model.add_subsystem('px1', IndepVarComp('x1', 100.0), promotes=['x1']) sub1 = prob.model.add_subsystem('sub1', Group()) sub2 = prob.model.add_subsystem('sub2', Group()) sub1.add_subsystem('src', SrcComp()) sub2.add_subsystem('tgtF', TgtCompF()) sub2.add_subsystem('tgtC', TgtCompC()) sub2.add_subsystem('tgtK', TgtCompK()) prob.model.connect('x1', 'sub1.src.x1') prob.model.connect('sub1.src.x2', 'sub2.tgtF.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtC.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtK.x2') sub2.approx_totals(method='cs') prob.setup(check=False, vector_class=vec_class) prob.run_model() assert_rel_error(self, prob['sub1.src.x2'], 100.0, 1e-6) assert_rel_error(self, prob['sub2.tgtF.x3'], 212.0, 1e-6) assert_rel_error(self, prob['sub2.tgtC.x3'], 100.0, 1e-6) assert_rel_error(self, prob['sub2.tgtK.x3'], 373.15, 1e-6) wrt = ['x1'] of = ['sub2.tgtF.x3', 'sub2.tgtC.x3', 'sub2.tgtK.x3'] J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_rel_error(self, J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_rel_error(self, J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_rel_error(self, J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6) # Check the total derivatives in reverse mode prob.setup(check=False, vector_class=vec_class, mode='rev') prob.run_model() J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_rel_error(self, J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_rel_error(self, J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_rel_error(self, J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6)
def test_unit_conv_group(self): prob = Problem() prob.model = Group() prob.model.add_subsystem('px1', IndepVarComp('x1', 100.0), promotes=['x1']) sub1 = prob.model.add_subsystem('sub1', Group()) sub2 = prob.model.add_subsystem('sub2', Group()) sub1.add_subsystem('src', SrcComp()) sub2.add_subsystem('tgtF', TgtCompF()) sub2.add_subsystem('tgtC', TgtCompC()) sub2.add_subsystem('tgtK', TgtCompK()) prob.model.connect('x1', 'sub1.src.x1') prob.model.connect('sub1.src.x2', 'sub2.tgtF.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtC.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtK.x2') sub2.approx_totals(method='fd') prob.setup(check=False) prob.run_model() assert_rel_error(self, prob['sub1.src.x2'], 100.0, 1e-6) assert_rel_error(self, prob['sub2.tgtF.x3'], 212.0, 1e-6) assert_rel_error(self, prob['sub2.tgtC.x3'], 100.0, 1e-6) assert_rel_error(self, prob['sub2.tgtK.x3'], 373.15, 1e-6) wrt = ['x1'] of = ['sub2.tgtF.x3', 'sub2.tgtC.x3', 'sub2.tgtK.x3'] J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_rel_error(self, J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_rel_error(self, J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_rel_error(self, J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6) # Check the total derivatives in reverse mode prob.setup(check=False, mode='rev') prob.run_model() J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_rel_error(self, J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_rel_error(self, J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_rel_error(self, J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6)
def test_basic_grouped(self): prob = om.Problem() prob.model.add_subsystem('px1', om.IndepVarComp('x1', 100.0), promotes=['x1']) sub1 = prob.model.add_subsystem('sub1', om.Group()) sub2 = prob.model.add_subsystem('sub2', om.Group()) sub1.add_subsystem('src', SrcComp()) sub2.add_subsystem('tgtF', TgtCompF()) sub2.add_subsystem('tgtC', TgtCompC()) sub2.add_subsystem('tgtK', TgtCompK()) prob.model.connect('x1', 'sub1.src.x1') prob.model.connect('sub1.src.x2', 'sub2.tgtF.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtC.x2') prob.model.connect('sub1.src.x2', 'sub2.tgtK.x2') prob.setup() prob.run_model() assert_near_equal(prob['sub1.src.x2'], 100.0, 1e-6) assert_near_equal(prob['sub2.tgtF.x3'], 212.0, 1e-6) assert_near_equal(prob['sub2.tgtC.x3'], 100.0, 1e-6) assert_near_equal(prob['sub2.tgtK.x3'], 373.15, 1e-6) wrt = ['x1'] of = ['sub2.tgtF.x3', 'sub2.tgtC.x3', 'sub2.tgtK.x3'] J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_near_equal(J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_near_equal(J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_near_equal(J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6) # Check the total derivatives in reverse mode prob.setup(check=False, mode='rev') prob.run_model() J = prob.compute_totals(of=of, wrt=wrt, return_format='dict') assert_near_equal(J['sub2.tgtF.x3']['x1'][0][0], 1.8, 1e-6) assert_near_equal(J['sub2.tgtC.x3']['x1'][0][0], 1.0, 1e-6) assert_near_equal(J['sub2.tgtK.x3']['x1'][0][0], 1.0, 1e-6)
def test_units(self): prob = om.Problem() # Input units in degF prob.model.add_subsystem('tgtF', TgtCompF(), promotes_inputs=['x2']) # Input units in degC prob.model.add_subsystem('tgtC', TgtCompC(), promotes_inputs=['x2']) # Input units in degK prob.model.add_subsystem('tgtK', TgtCompK(), promotes_inputs=['x2']) prob.model.set_input_defaults('x2', 100.0, units='degC') prob.setup() prob.run_model() assert_near_equal(prob.get_val('x2', 'degF'), 212.0)