cocosim_python/modele/cocosim.py

53 lines
1.4 KiB
Python

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()