Browse Source

Bugfixes in StEL

rparedis 2 years ago
parent
commit
e7938b50fd

+ 5 - 4
examples/scripts/BouncingBall/hybrid.py

@@ -92,7 +92,7 @@ class Model(CoupledDEVS):
 			"v0": 0.0, "y0": 100
 		}, False, {
 			"height": ">0"
-		}, hybrid.CrossingDetection.linear))
+		}, hybrid.CrossingDetection.ITP))
 		self.coll = self.addSubModel(Collector())
 		self.bounce = self.addSubModel(Bouncer())
 
@@ -115,17 +115,17 @@ def bounce(e, t, model):
 if __name__ == '__main__':
 	from pyCBD.simulator import Simulator as CBDsim
 	from pyCBD.state_events import StateEvent, Direction
-	from pyCBD.state_events.locators import ITPStateEventLocator
+	from pyCBD.state_events.locators import LinearStateEventLocator
 	import matplotlib.pyplot as plt
 
 	plt.plot([0, 10], [0, 0], 'k--', zorder=0, lw=0.5)
 
 	cbd = BouncingBall()
 	csim = CBDsim(cbd)
-	csim.setStateEventLocator(ITPStateEventLocator())
+	csim.setStateEventLocator(LinearStateEventLocator())
 	csim.registerStateEvent(StateEvent("height", direction=Direction.FROM_ABOVE, event=bounce))
 	csim.setDeltaT(0.1)
-	csim.run(10)
+	csim.run(10.1)
 	CBD_POINTS.extend(cbd.getSignalHistory("height"))
 	ct, cy = [x[0] for x in CBD_POINTS], [x[1] for x in CBD_POINTS]
 	plt.plot(ct, cy, '-o', label="CBD", zorder=1)
@@ -143,5 +143,6 @@ if __name__ == '__main__':
 	t, y = [x[0] for x in ty], [x[1] for x in ty]
 	plt.plot(t, y, '.', label="atomic DEVS", zorder=2)
 
+	plt.tight_layout()
 	plt.legend()
 	plt.show()

+ 2 - 0
src/pyCBD/converters/hybrid.py

@@ -164,6 +164,7 @@ class CrossingDetection:
 
 		return (a + b) / 2
 
+
 from pyCBD.converters.CBDDraw import gvDraw
 class CBDRunner(AtomicDEVS):
 	"""
@@ -445,6 +446,7 @@ class CBDRunner(AtomicDEVS):
 		self.state["request_output"] = False
 		self.state["stopped"] = False
 		self.state["curIt"] = 0
+		self.state["delta_t"] = 0.0
 		return self.state
 
 	def __del__(self):

+ 1 - 0
src/pyCBD/simulator.py

@@ -583,6 +583,7 @@ class Simulator:
 			# reset to allow for new IC computation
 			self.model.clearSignals()
 			self.model.getClock().setStartTime(lcc)
+			self.model.getClock().reset()
 			self.__sim_data[0] = None
 			self.__sim_data[2] = 0
 		post = time.time()

+ 3 - 3
src/pyCBD/state_events/locators.py

@@ -102,7 +102,7 @@ class StateEventLocator:
 		assert time >= self.t_lower
 
 		h = self.sim.getDeltaT()
-		self.sim._rewind()
+		# self.sim._rewind()
 		self.setDeltaT(time - self.t_lower)
 		self.sim._lcc_compute()
 		s = self.sim.model.getSignalHistory(output_name)[-1].value - level
@@ -110,8 +110,8 @@ class StateEventLocator:
 		if noop:
 			self.sim._rewind()
 		self.setDeltaT(h)
-		if noop:
-			self.sim._lcc_compute()
+		# if noop:
+		# 	self.sim._lcc_compute()
 		return s
 
 	def setDeltaT(self, dt):