roseau LOAD FLOW

roseau LOAD FLOW

Un solveur de flux de puissance simple et puissant, via une API Python

Services d'analyses des données par Roseau Technologies
				
					# Create two buses
source_bus = Bus(id="sb", phases="abcn")
load_bus = Bus(id="lb", phases="abcn")

# Define the reference of potentials to be the neutral of the source bus
ground = Ground(id="gnd")
pref = PotentialRef(id="pref", element=ground)  # Fix the potential of the ground at 0 V
ground.connect(source_bus, phase="n")

# Create a LV source at the first bus
un = 400 / np.sqrt(3)  # Volts (phase-to-neutral because the source is connected to the neutral)
source_voltages = Q_([un, un * np.exp(-2j * np.pi / 3), un * np.exp(2j * np.pi / 3)], "V")
vs = VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=source_voltages)

# Add a load at the second bus
load = PowerLoad(id="load", bus=load_bus, phases="abcn", powers=Q_([10 + 0j, 10 + 0j, 10 + 0j], "kVA"))

# Add a LV line between the source bus and the load bus
lp = LineParameters("lp", z_line=Q_((0.1 + 0.0j) * np.eye(4, dtype=complex), "ohm/km"))  # R = 0.1 Ohm/km, X = 0
line = Line(id="line", bus1=source_bus, bus2=load_bus, phases="abcn", parameters=lp, length=Q_(2.0, "km"))

# Create the electrical network
en = ElectricalNetwork.from_element(source_bus)
# >>> <ElectricalNetwork: 2 buses, 1 branch, 1 load, 1 source, 1 ground, 1 potential ref>

# Solve the load flow
en.solve_load_flow(auth=(username, password))
# >>> 2 iterations
				
			

Vous cherchez un solveur polyvalent et robuste ? On vous propose le nôtre.

Pour nos besoins internes, nous avons passé des années à développer un solveur aussi puissant que pratique. Nous sommes très fiers du résultat, et depuis février 2023,  nous vous proposons de vous y donner accès !

Analyse statique des réseaux électriques

Calculs d'écoulement de charge standards mais aussi des calculs plus poussés tels que les courants de défaut

Réseaux maillés, phases multiples, déséquilibres...

  • Modèles de lignes polyphasées et de transformateurs

  • Charges et défauts déséquilibrés

Roseau Load Flow is accessible via a Python API

Accessible via une API Python

  • Une modélisation orientée objet particulièrement lisible
  • Des scripts pour faciliter l'automatisation des processus
  • Une intégration simplifiée avec votre écosystème IT

				
					# Let's use a pq(u) control injecting reactive power 
# before reducing active power

fp = FlexibleParameter.pq_u_production(
    up_up=Q_(240, "V"), 
    up_max=250, # Volt by default
    uq_min=Q_(200, "V"), 
    uq_down=Q_(210, "V"), 
    uq_up=Q_(235, "V"), 
    uq_max=Q_(240, "V"), 
    s_max=Q_(4, "kVA")
)

flexible_load = PowerLoad(
    id="load",
    bus=load_bus,
    phases="abcn",
    powers=Q_([-3.5, 0, 0], "kVA"),
    flexible_params=[
        fp, 
        FlexibleParameter.constant(), 
        FlexibleParameter.constant()
    ],
)

# Solve the load flow
en.solve_load_flow(auth=auth)
# >>> 2 iterations

# Get the results
abs(load_bus.res_voltages)
# >>> [242.72 232.62 233.68] <Units('volt')>

				
			

Modélisation générique des charges et des installations de production

  • Une bibliothèque de charges standards (charges actives/réactives constantes, charges d’impédance…) est incluse ;
  • Les charges flexibles peuvent être finement modélisées avec des courbes P(U) et/ou Q(U) et des limites de puissance apparente.
  • La structure générique des charges permet d’ajouter facilement tout nouveau type d’objet dépendant de la tension.

Simplicité et ergonomie

  • Utilisez des modèles mathématiques simples et transparents : pas de transformation du modèle naturel, comme l’élimination du fil neutre (réduction de Kron) ou le changement des unités en “p.u.”.
  • Prise en charge des unités physiques pour éviter les erreurs (par exemple, confondre W et kW) et permettre à chacun de travailler avec ses unités préférées (métriques / impériales).
				
					# Results per object
abs(load_bus.res_voltages).to("kV")
# >>> [0.22193 0.22193 0.22193] <Unit('kilovolt')>

abs(line.res_currents[0])
# >>> [45.06, 45.06, 45.06,  0.  ] <Unit('ampere')>

# Global Results (data frame)
en.res_buses_voltages.transform([np.abs, np.angle]) # in V
# >>>                         voltage              
# >>>                absolute         angle
# >>> bus_id phase                          
# >>> sb     an     230.940108  6.671617e-37
# >>>        bn     230.940108 -2.094395e+00
# >>>        cn     230.940108  2.094395e+00
# >>> lb     an     221.928183  2.599590e-22
# >>>        bn     221.928183 -2.094395e+00
# >>>        cn     221.928183  2.094395e+00

en.res_loads # in A, VA and V
# >>>                 current         power       potential
# >>> load_id phase
# >>> load	a	  45.06+0.00j   10000.00-0.00j  221.93-0.00j
# >>>       b    -22.53-39.02j  10000.00-0.00j -110.96-192.20j
# >>>       c    -22.53+39.02j  10000.00+0.00j -110.96+192.20j
# >>>       n	 -0.00+0.00j	 -0.00+0.00j      0.00-0.00j

en.res_line_losses # in VA
# >>>               series_losses shunt_losses	total_losses
# >>> line_id phase	 	 	 
# >>> line	   a	406.07+0.00j  0.00+0.00j	406.07+0.00j
# >>>          b	406.07+0.00j  0.00+0.00j	406.07+0.00j
# >>>          c    406.07+0.00j  0.00+0.00j	406.07+0.00j
# >>>          n      0.00+0.00j  0.00+0.00j    0.00+0.00j






				
			

Des données de réseau incluses !

An example of a MV feeder included in the Python API

Installation et usage

Vous êtes étudiant ou enseignant ? Nous sommes heureux de vous compter parmi nous ! Renseignez votre adresse email académique et vous recevrez vos identifiants gratuitement.

Pour les autres cas, contactez-nous !