def test_sim_initialization_multi_index(self): m = self.m m.w1 = Var(m.t, m.s) m.dw1 = DerivativeVar(m.w1) m.w2 = Var(m.s, m.t) m.dw2 = DerivativeVar(m.w2) m.w3 = Var([0, 1], m.t, m.s) m.dw3 = DerivativeVar(m.w3) t = IndexTemplate(m.t) def _deq1(m, t, s): return m.dw1[t, s] == m.w1[t, s] m.deq1 = Constraint(m.t, m.s, rule=_deq1) def _deq2(m, s, t): return m.dw2[s, t] == m.w2[s, t] m.deq2 = Constraint(m.s, m.t, rule=_deq2) def _deq3(m, i, t, s): return m.dw3[i, t, s] == m.w1[t, s] + m.w2[i + 1, t] m.deq3 = Constraint([0, 1], m.t, m.s, rule=_deq3) mysim = Simulator(m) self.assertIs(mysim._contset, m.t) self.assertEqual(len(mysim._diffvars), 12) self.assertTrue(_GetItemIndexer(m.w1[t, 1]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w1[t, 3]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w2[1, t]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w2[3, t]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w3[0, t, 1]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w3[1, t, 3]) in mysim._diffvars) self.assertEqual(len(mysim._derivlist), 12) self.assertTrue(_GetItemIndexer(m.dw1[t, 1]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw1[t, 3]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw2[1, t]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw2[3, t]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw3[0, t, 1]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw3[1, t, 3]) in mysim._derivlist) self.assertEqual(len(mysim._templatemap), 6) self.assertTrue(_GetItemIndexer(m.w1[t, 1]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w1[t, 3]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w2[1, t]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w2[3, t]) in mysim._templatemap) self.assertFalse(_GetItemIndexer(m.w3[0, t, 1]) in mysim._templatemap) self.assertFalse(_GetItemIndexer(m.w3[1, t, 3]) in mysim._templatemap) self.assertEqual(len(mysim._rhsdict), 12) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 1])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 3])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw2[1, t])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw2[3, t])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw3[0, t, 1])], EXPR.SumExpression)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw3[1, t, 3])], EXPR.SumExpression)) self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 1])].name, 'w1[{t},1]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 3])].name, 'w1[{t},3]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw2[1, t])].name, 'w2[1,{t}]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw2[3, t])].name, 'w2[3,{t}]') self.assertEqual(len(mysim._rhsfun(0, [0] * 12)), 12) self.assertIsNone(mysim._tsim) self.assertIsNone(mysim._simsolution) m.del_component('deq1') m.del_component('deq1_index') m.del_component('deq2') m.del_component('deq2_index') m.del_component('deq3') m.del_component('deq3_index')
def test_sim_initialization_multi_index2(self): m = self.m m.s2 = Set(initialize=[(1, 1), (2, 2)]) m.w1 = Var(m.t, m.s2) m.dw1 = DerivativeVar(m.w1) m.w2 = Var(m.s2, m.t) m.dw2 = DerivativeVar(m.w2) m.w3 = Var([0, 1], m.t, m.s2) m.dw3 = DerivativeVar(m.w3) t = IndexTemplate(m.t) def _deq1(m, t, i, j): return m.dw1[t, i, j] == m.w1[t, i, j] m.deq1 = Constraint(m.t, m.s2, rule=_deq1) def _deq2(m, *idx): return m.dw2[idx] == m.w2[idx] m.deq2 = Constraint(m.s2, m.t, rule=_deq2) def _deq3(m, i, t, j, k): return m.dw3[i, t, j, k] == m.w1[t, j, k] + m.w2[j, k, t] m.deq3 = Constraint([0, 1], m.t, m.s2, rule=_deq3) mysim = Simulator(m) self.assertIs(mysim._contset, m.t) self.assertEqual(len(mysim._diffvars), 8) self.assertTrue(_GetItemIndexer(m.w1[t, 1, 1]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w1[t, 2, 2]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w2[1, 1, t]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w2[2, 2, t]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w3[0, t, 1, 1]) in mysim._diffvars) self.assertTrue(_GetItemIndexer(m.w3[1, t, 2, 2]) in mysim._diffvars) self.assertEqual(len(mysim._derivlist), 8) self.assertTrue(_GetItemIndexer(m.dw1[t, 1, 1]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw1[t, 2, 2]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw2[1, 1, t]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw2[2, 2, t]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw3[0, t, 1, 1]) in mysim._derivlist) self.assertTrue(_GetItemIndexer(m.dw3[1, t, 2, 2]) in mysim._derivlist) self.assertEqual(len(mysim._templatemap), 4) self.assertTrue(_GetItemIndexer(m.w1[t, 1, 1]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w1[t, 2, 2]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w2[1, 1, t]) in mysim._templatemap) self.assertTrue(_GetItemIndexer(m.w2[2, 2, t]) in mysim._templatemap) self.assertFalse( _GetItemIndexer(m.w3[0, t, 1, 1]) in mysim._templatemap) self.assertFalse( _GetItemIndexer(m.w3[1, t, 2, 2]) in mysim._templatemap) self.assertEqual(len(mysim._rhsdict), 8) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 1, 1])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 2, 2])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw2[1, 1, t])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw2[2, 2, t])], Param)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw3[0, t, 1, 1])], EXPR.SumExpression)) self.assertTrue( isinstance(mysim._rhsdict[_GetItemIndexer(m.dw3[1, t, 2, 2])], EXPR.SumExpression)) self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 1, 1])].name, 'w1[{t},1,1]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw1[t, 2, 2])].name, 'w1[{t},2,2]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw2[1, 1, t])].name, 'w2[1,1,{t}]') self.assertEqual(mysim._rhsdict[_GetItemIndexer(m.dw2[2, 2, t])].name, 'w2[2,2,{t}]') self.assertEqual(len(mysim._rhsfun(0, [0] * 8)), 8) self.assertIsNone(mysim._tsim) self.assertIsNone(mysim._simsolution) m.del_component('deq1') m.del_component('deq1_index') m.del_component('deq2') m.del_component('deq2_index') m.del_component('deq3') m.del_component('deq3_index')
def test_separable_diffeq_case6(self): m = self.m m.w = Var(m.t, m.s) m.dw = DerivativeVar(m.w) m.p = Param(initialize=5) m.mp = Param(initialize=5, mutable=True) m.y = Var() t = IndexTemplate(m.t) def _deqv(m, i): return m.v[i]**2 + m.v[i] == m.dv[i] + m.y m.deqv = Constraint(m.t, rule=_deqv) def _deqw(m, i, j): return m.w[i, j]**2 + m.w[i, j] == m.y + m.dw[i, j] m.deqw = Constraint(m.t, m.s, rule=_deqw) mysim = Simulator(m) self.assertEqual(len(mysim._diffvars), 4) self.assertEqual(mysim._diffvars[0], _GetItemIndexer(m.v[t])) self.assertEqual(mysim._diffvars[1], _GetItemIndexer(m.w[t, 1])) self.assertEqual(mysim._diffvars[2], _GetItemIndexer(m.w[t, 2])) self.assertEqual(len(mysim._derivlist), 4) self.assertEqual(mysim._derivlist[0], _GetItemIndexer(m.dv[t])) self.assertEqual(mysim._derivlist[1], _GetItemIndexer(m.dw[t, 1])) self.assertEqual(mysim._derivlist[2], _GetItemIndexer(m.dw[t, 2])) self.assertEqual(len(mysim._rhsdict), 4) m.del_component('deqv') m.del_component('deqw') m.del_component('deqv_index') m.del_component('deqw_index') def _deqv(m, i): return m.v[i]**2 + m.v[i] == m.mp + m.dv[i] m.deqv = Constraint(m.t, rule=_deqv) def _deqw(m, i, j): return m.w[i, j]**2 + m.w[i, j] == m.dw[i, j] + m.p m.deqw = Constraint(m.t, m.s, rule=_deqw) mysim = Simulator(m) self.assertEqual(len(mysim._diffvars), 4) self.assertEqual(mysim._diffvars[0], _GetItemIndexer(m.v[t])) self.assertEqual(mysim._diffvars[1], _GetItemIndexer(m.w[t, 1])) self.assertEqual(mysim._diffvars[2], _GetItemIndexer(m.w[t, 2])) self.assertEqual(len(mysim._derivlist), 4) self.assertEqual(mysim._derivlist[0], _GetItemIndexer(m.dv[t])) self.assertEqual(mysim._derivlist[1], _GetItemIndexer(m.dw[t, 1])) self.assertEqual(mysim._derivlist[2], _GetItemIndexer(m.dw[t, 2])) self.assertEqual(len(mysim._rhsdict), 4) m.del_component('deqv') m.del_component('deqw') m.del_component('deqv_index') m.del_component('deqw_index') m.del_component('w') m.del_component('dw') m.del_component('p') m.del_component('mp') m.del_component('y')