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
				
					import numpy as np
import roseau.load_flow as rlf

# Define optional quantities
un = rlf.Q_(400.0, "V")  # Nominal voltage
u_min = rlf.Q_(90, "%")  # Minimum voltage level
u_max = rlf.Q_(110, "%")  # Maximum
ampacity = rlf.Q_(500, "A")  # Ampacity

# Create two buses
source_bus = rlf.Bus(
    id="sb", phases="abcn", nominal_voltage=un, min_voltage_level=u_min, max_voltage_level=u_max
)
load_bus = rlf.Bus(
    id="lb", phases="abcn", nominal_voltage=un, min_voltage_level=u_min, max_voltage_level=u_max
)

# Define the reference of potentials to be the neutral of the source bus
ground = rlf.Ground(id="gnd")
pref = rlf.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: 230V phase-to-neutral
vs = rlf.VoltageSource(id="vs", bus=source_bus, phases="abcn", voltages=rlf.Q_(230, "V"))

# Add a load at the second bus: 10kW per phase
load = rlf.PowerLoad(id="load", bus=load_bus, phases="abcn", powers=rlf.Q_(10 + 0j, "kVA"))

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

# Create the electrical network
en = rlf.ElectricalNetwork.from_element(source_bus)
en
				
			

<ElectricalNetwork: 2 buses, 1 branch, 1 load, 1 source, 1 ground, 1 potential ref>

				
					# Solve the load flow
en.solve_load_flow()

				
			

(2, 1.9682139651422403e-07)

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()
# prints: 2 iterations

# Get the results
abs(load_bus.res_voltages)
# prints: [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
#                 type    current         power       potential
# load_id phase        
# load    a      power  45.06+0.00j   10000.00-0.00j  221.93-0.00j
#         b      power -22.53-39.02j  10000.00-0.00j -110.96-192.20j
#         c      power -22.53+39.02j  10000.00+0.00j -110.96+192.20j
#         n      power -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
  • Lancez-vous sans difficulté grâce aux 20 départs Basse Tension et aux 20 départs Moyenne Tension inclus dans Roseau Load Flow. Besoin d’aller plus loin ? Nous pouvons mettre à votre disposition le modèle électrique du réseau de distribution français, soit des dizaines de milliers de départs HTA et BT déjà modélisés.
  • Chaque départ est fourni avec ses deux points de charge dimensionnants.
  • Visitez le dépot Github officiel ou contactez-nous pour plus d’informations

Licences, installation et usage

Une clef de licence gratuite et publique est disponible, pour réaliser des calculs sur des réseaux comportant jusqu’à dix nœuds. Vous souhaitez aller plus loin ? Contactez-nous pour obtenir votre clef de licence personnelle.

Étudiants et enseignants : renseignez votre adresse email académique ci-dessous et vous recevrez votre clef de licence gratuite.