makePTDF.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # -*- coding: utf-8 -*-
  2. # =============================================================================
  3. # Copyright (C) 2018 Mercados Electricos de Centroamérica. All rights reserved
  4. # =============================================================================
  5. """Construye las matrices PTDF (Matriz H) para el cálculo de flujos DC
  6. """
  7. from numpy import zeros
  8. from numpy.linalg import solve
  9. from simsdt.red.makeBdc import makeBdc
  10. def makePTDF(bus, branch):
  11. """Construye la matriz PTDF DC
  12. Toma como nodo slack el primer nodo.
  13. La matriz es de dimensiones C{nbr x nb}, en donde C{nbr} es el numero de
  14. lineas y C{nb} es el numero de buses o nodos. El nodo slack siempre es el
  15. primer nodo.
  16. @author: Oscar A. Leiva (MERELEC)
  17. """
  18. # constantes
  19. nb = bus.shape[0]
  20. nbr = branch.shape[0]
  21. Bbus, Bf, _ = makeBdc(bus, branch)
  22. Bbus, Bf = Bbus.todense(), Bf.todense()
  23. H = zeros((nbr, nb))
  24. H[:, 1:] = solve(Bbus[1:, 1:].T, Bf[:, 1:].T).T
  25. # = Bf[:,1:] * inv(Bbus[1:,1:])
  26. return H