GridCal.Engine.Simulations.Dynamics package

Submodules

GridCal.Engine.Simulations.Dynamics.dynamic_modules module

class GridCal.Engine.Simulations.Dynamics.dynamic_modules.DiffEqSolver

Bases: enum.Enum

An 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: object

Double 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.Enum

An 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: object

External 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: object

Single 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: object

4th 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 size

Returns: 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: object

PYPOWER-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: object

Voltage 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