from modele.matrice import Matrice class Cocosim(object): def __init__(self, conf, graphe, scenario, observateur): self.conf = conf self.graphe = graphe self.scenario = scenario if 'max' in self.scenario: self.max_cycles = self.scenario['max'] else: self.max_cycles = None self.n_cycle = 0 self.matrice = Matrice(self.graphe) self.observatoire = {} self.observateur = observateur for k,_,_ in self.observateur: self.observatoire[k] = [] def cycle(self): """ Un cycle se fait en deux passes plus la mise à jour des composants. """ if self.n_cycle in self.scenario: [f(self.graphe[x]) for x, f in self.scenario[self.n_cycle]] self.graphe.init_cycle() # Passe 1 self.matrice.init_mat() xvect = self.matrice.solve() self.graphe.passe_calcul(xvect) # Passe 2 (pour les diodes) self.matrice.init_mat() xvect = self.matrice.solve() self.graphe.passe_calcul(xvect) # Mise à jour des états self.graphe.update() self.graphe.coherence() for k, obj, fun in self.observateur: self.observatoire[k].append(fun(self.graphe[obj])) self.n_cycle += 1 def run(self): for cycle in range(self.max_cycles): self.cycle()