def test_size_1_matmat(self): p = Problem() indeps = p.model.add_subsystem('indeps', IndepVarComp('x', np.ones(2))) indeps.add_output('y', 1.0) par = p.model.add_subsystem('par', ParallelGroup()) par.add_subsystem('C1', ExecComp('y=2*x', x=np.zeros(2), y=np.zeros(2))) par.add_subsystem('C2', ExecComp('y=3*x')) p.model.connect("indeps.x", "par.C1.x") p.model.connect("indeps.y", "par.C2.x") p.model.add_design_var('indeps.x', vectorize_derivs=True, parallel_deriv_color='foo') p.model.add_design_var('indeps.y', vectorize_derivs=True, parallel_deriv_color='foo') par.add_objective('C2.y') par.add_constraint('C1.y', lower=0.0) p.setup(vector_class=PETScVector, mode='fwd') p.run_model() # prior to bug fix, this would raise an exception J = p._compute_totals() np.testing.assert_array_equal(J['par.C1.y', 'indeps.x'], np.eye(2) * 2.) np.testing.assert_array_equal(J['par.C2.y', 'indeps.x'], np.zeros((1, 2))) np.testing.assert_array_equal(J['par.C1.y', 'indeps.y'], np.zeros((2, 1))) np.testing.assert_array_equal(J['par.C2.y', 'indeps.y'], np.array([[3.]]))
def test_size_1_matmat(self): p = Problem() indeps = p.model.add_subsystem('indeps', IndepVarComp('x', np.ones(2))) indeps.add_output('y', 1.0) par = p.model.add_subsystem('par', ParallelGroup()) par.add_subsystem('C1', ExecComp('y=2*x', x=np.zeros(2), y=np.zeros(2))) par.add_subsystem('C2', ExecComp('y=3*x')) p.model.connect("indeps.x", "par.C1.x") p.model.connect("indeps.y", "par.C2.x") p.model.add_design_var('indeps.x', vectorize_derivs=True, parallel_deriv_color='foo') p.model.add_design_var('indeps.y', vectorize_derivs=True, parallel_deriv_color='foo') par.add_objective('C2.y') par.add_constraint('C1.y', lower=0.0) p.setup(vector_class=PETScVector, mode='fwd') p.run_model() # prior to bug fix, this would raise an exception J = p._compute_totals() np.testing.assert_array_equal(J['par.C1.y', 'indeps.x'], np.eye(2)*2.) np.testing.assert_array_equal(J['par.C2.y', 'indeps.x'], np.zeros((1,2))) np.testing.assert_array_equal(J['par.C1.y', 'indeps.y'], np.zeros((2,1))) np.testing.assert_array_equal(J['par.C2.y', 'indeps.y'], np.array([[3.]]))