def test_time_event(self): f = lambda t,y,yd: y-yd global tnext global nevent tnext = 0.0 nevent = 0 def time_events(t,y,yd,sw): global tnext,nevent events = [1.0, 2.0, 2.5, 3.0] for ev in events: if t < ev: tnext = ev break else: tnext = None nevent += 1 return tnext def handle_event(solver, event_info): solver.y+= 1.0 global tnext nose.tools.assert_almost_equal(solver.t, tnext) assert event_info[0] == [] assert event_info[1] == True exp_mod = Implicit_Problem(f,0.0,0.0) exp_mod.time_events = time_events exp_mod.handle_event = handle_event #CVode exp_sim = IDA(exp_mod) exp_sim(5.,100) assert nevent == 5
def test_time_event(self): f = lambda t, y, yd: y - yd global tnext global nevent tnext = 0.0 nevent = 0 def time_events(t, y, yd, sw): global tnext, nevent events = [1.0, 2.0, 2.5, 3.0] for ev in events: if t < ev: tnext = ev break else: tnext = None nevent += 1 return tnext def handle_event(solver, event_info): solver.y += 1.0 global tnext nose.tools.assert_almost_equal(solver.t, tnext) assert event_info[0] == [] assert event_info[1] == True exp_mod = Implicit_Problem(f, 0.0, 0.0) exp_mod.time_events = time_events exp_mod.handle_event = handle_event #CVode exp_sim = IDA(exp_mod) exp_sim(5., 100) assert nevent == 5
def simulate(self, Tend, nIntervals, gridWidth): problem = Implicit_Problem(self.rhs, self.y0, self.yd0) problem.name = 'IDA' # solver.rhs = self.right_hand_side problem.handle_result = self.handle_result problem.state_events = self.state_events problem.handle_event = self.handle_event problem.time_events = self.time_events problem.finalize = self.finalize # Create IDA object and set additional parameters simulation = IDA(problem) simulation.atol = self.atol simulation.rtol = self.rtol simulation.verbosity = self.verbosity if hasattr(simulation, 'continuous_output'): simulation.continuous_output = False # default 0, if one step approach should be used elif hasattr(simulation, 'report_continuously'): simulation.report_continuously = False # default 0, if one step approach should be used simulation.tout1 = self.tout1 simulation.lsoff = self.lsoff # Calculate nOutputIntervals: if gridWidth <> None: nOutputIntervals = int((Tend - self.t0) / gridWidth) else: nOutputIntervals = nIntervals # Check for feasible input parameters if nOutputIntervals == 0: print 'Error: gridWidth too high or nIntervals set to 0! Continue with nIntervals=1' nOutputIntervals = 1 # Perform simulation simulation.simulate(Tend, nOutputIntervals) # to get the values: t_new, y_new, yd_new = simulation.simulate
def test_time_event(self): """ This tests the functionality of the time event function. """ f = lambda t, x, xd, sw: xd - x def time_events(t, y, yd, sw): if sw[0]: return 1.0 if sw[1]: return 3.0 return None def handle_event(solver, event_info): if event_info[1]: solver.y = N.array([1.0]) solver.yd = N.array([1.0]) if not solver.sw[0]: solver.sw[1] = False if solver.sw[0]: solver.sw[0] = False mod = Implicit_Problem(f, [1.0], [1.0]) mod.time_events = time_events mod.handle_event = handle_event mod.switches0 = [True, True] sim = IDA(mod) sim.simulate(5.0) nose.tools.assert_almost_equal(sim.y_sol[38], 1.0000000, 5) nose.tools.assert_almost_equal(sim.y_sol[87], 1.0000000, 5) sim = IDA(mod, [1.0], [1.0]) sim.simulate(2.0) nose.tools.assert_almost_equal(sim.t_sol[-1], 2.0000000, 5)
def test_time_event(self): """ This tests the functionality of the time event function. """ f = lambda t,x,xd,sw: xd-x def time_events(t, y, yd, sw): if sw[0]: return 1.0 if sw[1]: return 3.0 return None def handle_event(solver, event_info): if event_info[1]: solver.y = N.array([1.0]) solver.yd = N.array([1.0]) if not solver.sw[0]: solver.sw[1] = False if solver.sw[0]: solver.sw[0] = False mod = Implicit_Problem(f,[1.0],[1.0]) mod.time_events = time_events mod.handle_event = handle_event mod.switches0 = [True, True] sim = IDA(mod) sim.simulate(5.0) nose.tools.assert_almost_equal(sim.y_sol[38], 1.0000000, 5) nose.tools.assert_almost_equal(sim.y_sol[87], 1.0000000, 5) sim = IDA(mod, [1.0],[1.0]) sim.simulate(2.0) nose.tools.assert_almost_equal(sim.t_sol[-1], 2.0000000, 5)
def test_clear_event_log(self): """ This tests the functionality of the time event function. """ f = lambda t, x, xd, sw: xd - x def time_events(t, y, yd, sw): if sw[0]: return 1.0 if sw[1]: return 3.0 return None def handle_event(solver, event_info): if event_info[1]: solver.y = N.array([1.0]) solver.yd = N.array([1.0]) if not solver.sw[0]: solver.sw[1] = False if solver.sw[0]: solver.sw[0] = False mod = Implicit_Problem(f, [1.0], [1.0], sw0=[True, True]) mod.time_events = time_events mod.handle_event = handle_event sim = IDA(mod) sim.verbosity = 10 assert len(sim.event_data) == 0 sim.simulate(5.0) assert len(sim.event_data) > 0 sim.reset() assert len(sim.event_data) == 0 sim.simulate(5.0) assert len(sim.event_data) > 0