GridCal.Engine.Simulations.Dynamics package¶
Submodules¶
GridCal.Engine.Simulations.Dynamics.dynamic_modules module¶
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.DiffEqSolver¶ Bases:
enum.EnumAn enumeration.
-
EULER= (1,)¶
-
RUNGE_KUTTA= 2¶
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.DoubleCageAsynchronousMotor(H, Rr, Xr, Rs, Xs, a, Xm, Rr2, Xr2, MVA_Rating, Sbase, bus_idx, fn=50)¶ Bases:
objectDouble Cage Asynchronous Machine Model
Model equations based on section 15.2.5 of: Milano, F., “Power System Modelling and Scripting”, Springer-Verlag, 2010
-
calc_currents(vt)¶ Calculate machine current injections (in network reference frame)
-
calc_tmech(s)¶ Calculate mechanical load torque (with a quadratic load model)
-
check_diffs()¶ Check if differential equations are zero (on initialisation)
-
get_yg()¶ Get the generator admittance :return: shunt admittance
-
initialise(vt0, S0)¶ Initialise machine signals and states based on load flow voltage and complex power injection NOTE: currently only initialised at standstill
-
solve_step(Edp, Eqp, Edpp, Eqpp)¶ Solve machine differential equations for the next stage in the integration step
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.DynamicModels¶ Bases:
enum.EnumAn enumeration.
-
AsynchronousDoubleCageMotor= 6¶
-
AsynchronousSingleCageMotor= (5,)¶
-
ExternalGrid= (4,)¶
-
NoModel= (0,)¶
-
SynchronousGeneratorOrder4= (1,)¶
-
SynchronousGeneratorOrder6= (2,)¶
-
VoltageSourceConverter= (3,)¶
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.ExternalGrid(Xdp, H, fn, bus_idx)¶ Bases:
objectExternal Grid Model Class Grid is modelled as a constant voltage behind a transient reactance and two differential equations representing the swing equations.
-
calc_currents(vt)¶ Solve grid current injections (in network reference frame)
-
function(Eqp, Edp, omega)¶ Solve machine differential equations for the next stage in the integration step
-
get_yg()¶ Return the shunt admittance Returns:
-
initialise(vt0, S0)¶ Initialise grid emf based on load flow voltage and grid current injection
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.SingleCageAsynchronousMotor(H, Rr, Xr, Rs, Xs, a, Xm, MVA_Rating, Sbase, bus_idx, fn=50)¶ Bases:
objectSingle Cage Asynchronous Motor Model
Model equations based on section 15.2.4 of: Milano, F., “Power System Modelling and Scripting”, Springer-Verlag, 2010
-
calc_currents(vt)¶ Calculate machine current injections (in network reference frame)
-
calc_tmech(s)¶ Calculate mechanical load torque (with a quadratic load model) :param s: slip :return:
-
check_diffs()¶ Check if differential equations are zero (on initialisation)
-
function(Edp, Eqp)¶ Solve machine differential equations for the next stage in the integration step
-
get_yg()¶ Get the generator admittance :return: shunt admittance
-
initialise(vt0, S0)¶ Initialise machine signals and states based on load flow voltage and complex power injection NOTE: currently only initialised at standstill
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.SynchronousMachineOrder4(H, Ra, Xd, Xdp, Xdpp, Xq, Xqp, Xqpp, Td0p, Tq0p, base_mva, Sbase, bus_idx, fn=50, speed_volt=False, solver=<DiffEqSolver.RUNGE_KUTTA: 2>)¶ Bases:
object4th Order Synchronous Machine Model https://wiki.openelectrical.org/index.php?title=Synchronous_Machine_Models#4th_Order_.28Two-Axis.29_Model Copyright (C) 2014-2015 Julius Susanto. All rights reserved.
typical values: Ra = 0.0 Xa = 0.0 Xd = 1.68 Xq = 1.61 Xdp = 0.32 Xqp = 0.32 Xdpp = 0.2 Xqpp = 0.2 Td0p = 5.5 Tq0p = 4.60375 Td0pp = 0.0575 Tq0pp = 0.0575 H = 2
-
calc_currents(Vbus, Ibus)¶ Calculate machine current injections (in network reference frame) :param vt: complex initial voltage :return:
-
check_diffs()¶ Check if differential equations are zero (on initialisation)
-
function(h, Eqp, Edp, omega)¶ Compute the magnitude’s derivatives :param Eqp: :param Edp: :param omega: :return:
-
get_yg()¶ Get the generator admittance :return: shunt admittance
-
initialise(vt0, S0)¶ Initialise machine signals and states based on load flow voltage and complex power injection :param vt0: complex initial voltage :param S0: complex initial power :return:
-
solve(h)¶ Solve using Runge-Kutta Args:
h: step sizeReturns: self.Eqp, self.Edp, self.omega, self.delta
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.SynchronousMachineOrder6SauerPai(H, Ra, Xa, Xd, Xdp, Xdpp, Xq, Xqp, Xqpp, Td0p, Tq0p, Td0pp, Tq0pp, base_mva, Sbase, bus_idx, fn=50, speed_volt=False)¶ Bases:
objectPYPOWER-Dynamics 6th Order Synchronous Machine Model Based on Sauer-Pai model Sauer, P.W., Pai, M. A., “Power System Dynamics and Stability”, Stipes Publishing, 2006
-
calc_currents(vt)¶ Calculate machine current injections (in network reference frame)
-
check_diffs()¶ Check if differential equations are zero (on initialisation)
-
function(Eqp, Edp, omega)¶ Solve machine differential equations for the next stage in the integration step :param Eqp: :param Edp: :param omega: :return:
-
get_yg()¶ Get the generator admittance :return: shunt admittance
-
initialise(vt0, S0)¶ Initialise machine signals and states based on load flow voltage and complex power injection
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.TransientStabilityEvents¶ Bases:
object-
add(t, evt_type, obj, param)¶ Add elements :param t: time in seconds :param evt_type: event type :param obj: object selected :param param: extra parameters
-
remove_at(i)¶ Remove the elements at a position :param i: index
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.TransientStabilityResults¶ Bases:
object-
plot(result_type, ax=None, indices=None, names=None, LINEWIDTH=2)¶ Plot the results :param result_type: :param ax: :param indices: :param names: :return:
-
-
class
GridCal.Engine.Simulations.Dynamics.dynamic_modules.VoltageSourceConverterAverage(Rl, Xl, fn, bus_idx)¶ Bases:
objectVoltage Source Converter Model Class Average model of a VSC in voltage-control mode (i.e. controlled voltage source behind an impedance). Copyright (C) 2014-2015 Julius Susanto. All rights reserved.
-
calc_currents(vt)¶ Solve grid current injections (in network reference frame) :param vt: complex voltage :return:
-
function(h, d)¶ Solve machine differential equations for the next stage in the integration step :param h: solve step in seconds
-
get_yg()¶ Get the generator admittance :return: shunt admittance
-
initialise(vt0, S0)¶ Initialise converter emf based on load flow voltage and grid current injection :param vt0: complex voltage :param S0: complex power
-
-
GridCal.Engine.Simulations.Dynamics.dynamic_modules.dynamic_simulation(n, Vbus, Sbus, Ybus, Sbase, fBase, t_sim, h, dynamic_devices=[], bus_indices=[], callback=None)¶ Dynamic transient simulation of a power system Args:
n: number of nodes Vbus: Ybus: Sbase: fBase: base frequency i.e. 50Hz t_sim: h: dynamic_devices: objects of each machine bus_indices:Returns:
GridCal.Engine.Simulations.Dynamics.transient_stability_driver module¶
-
class
GridCal.Engine.Simulations.Dynamics.transient_stability_driver.TransientStability(grid: GridCal.Engine.Core.multi_circuit.MultiCircuit, options: GridCal.Engine.Simulations.Dynamics.transient_stability_driver.TransientStabilityOptions, pf_res: GridCal.Engine.Simulations.PowerFlow.power_flow_results.PowerFlowResults)¶ Bases:
PySide2.QtCore.QThread-
done_signal= <PySide2.QtCore.Signal object>¶
-
get_steps()¶ Get time steps list of strings
-
progress_signal= <PySide2.QtCore.Signal object>¶
-
progress_text= <PySide2.QtCore.Signal object>¶
-
run()¶ Run transient stability
-
staticMetaObject= <PySide2.QtCore.QMetaObject object>¶
-
status(txt, progress)¶ Emit status :param txt: text to display :param progress: progress 0-100
-
-
class
GridCal.Engine.Simulations.Dynamics.transient_stability_driver.TransientStabilityOptions(h=0.001, t_sim=15, max_err=0.0001, max_iter=25)¶ Bases:
object