roseau LOAD FLOW
roseau LOAD FLOW
Un solveur de flux de puissance simple et puissant, via une API Python
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
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]
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
- Roseau Load Flow est une API Python synthétique et bien documentée !
- 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]
>>> abs(line.res_currents[0])
# [45.06, 45.06, 45.06, 0. ]
# 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
- 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.