76 lines
2 KiB
Python
76 lines
2 KiB
Python
import random
|
|
import sys
|
|
sys.path.append("../../../src/")
|
|
sys.path.append("../../src/")
|
|
|
|
from DEVS import AtomicDEVS, CoupledDEVS
|
|
|
|
class Node(AtomicDEVS):
|
|
def __init__(self, nr, load):
|
|
AtomicDEVS.__init__(self, "Node" + str(nr))
|
|
self.state = None
|
|
self.load = load
|
|
|
|
def intTransition(self):
|
|
for _ in xrange(self.load):
|
|
pass
|
|
return self.state
|
|
|
|
def extTransition(self, inputs):
|
|
return self.state
|
|
|
|
def timeAdvance(self):
|
|
return 1.0
|
|
|
|
def outputFnc(self):
|
|
return {}
|
|
|
|
class ExchangeModel(AtomicDEVS):
|
|
def __init__(self):
|
|
AtomicDEVS.__init__(self, "Exchange")
|
|
self.state = None
|
|
self.inport = self.addInPort("in")
|
|
self.outport = self.addOutPort("out")
|
|
|
|
def intTransition(self):
|
|
return self.state
|
|
|
|
def extTransition(self, inputs):
|
|
return self.state
|
|
|
|
def timeAdvance(self):
|
|
return 1.0
|
|
|
|
def outputFnc(self):
|
|
return {self.outport: [None]}
|
|
|
|
class NodeGrid(CoupledDEVS):
|
|
def __init__(self, load):
|
|
CoupledDEVS.__init__(self, "Grid")
|
|
for i in range(800):
|
|
self.addSubModel(Node(i, load))
|
|
|
|
class DualGrid(CoupledDEVS):
|
|
def __init__(self, load):
|
|
CoupledDEVS.__init__(self, "Root")
|
|
grid1 = self.addSubModel(NodeGrid(load), 0)
|
|
grid2 = self.addSubModel(NodeGrid(load), 1)
|
|
grid1_node = self.addSubModel(ExchangeModel(), 0)
|
|
grid2_node = self.addSubModel(ExchangeModel(), 1)
|
|
self.connectPorts(grid1_node.outport, grid2_node.inport)
|
|
self.connectPorts(grid2_node.outport, grid1_node.inport)
|
|
|
|
if __name__ == "__main__":
|
|
random.seed(1)
|
|
from simulator import Simulator
|
|
model = DualGrid(int(sys.argv[1]))
|
|
sim = Simulator(model)
|
|
sim.setTerminationTime(100)
|
|
#sim.setVerbose(True)
|
|
sim.setMessageCopy('none')
|
|
sim.setStateSaving('assign')
|
|
sim.setGVTInterval(5)
|
|
memo = True if sys.argv[2] == "True" else False
|
|
sim.setMemoization(memo)
|
|
sim.setSchedulerSortedList()
|
|
sim.simulate()
|