| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- # -*- coding: utf-8 -*-
- # =============================================================================
- # Copyright (C) 2018 Mercados Electricos de Centroamérica. All rights reserved
- # =============================================================================
- """
- Construye las matrices B para el cálculo de flujos DC
- """
- from numpy import ones, r_, zeros
- from scipy.sparse import csr_matrix as sparse
- from simsdt.utils.idx_brch import BUS_I, BUS_J, X
- def makeBdc(bus, branch):
- """Construye las matrices B para el cálculo de flujos DC.
- Se construye primer la matriz de incidencia Cft (o matriz A, como se denomina en la formulación de substas de
- Derechos Firmes) y se define como:
- El valor será uno (1) para las líneas ij donde su nodo inicial sea igual al nodo i y menos uno (-1) para las lineas
- ij cuyo nodo final sea igual al nodo j.
- La matriz de incidencias Cft tiene dimenciones C{nbr x nb}, en donde C{nbr}es el numero de líneas (branches) y
- C{nb} el número de buses.
- Luego se calcula la matriz Bf (ZZ) de dimensiones C{nbr x nb}, en donde C{nbr} es el numero de líneas (branches) y
- C{nb} el número de buses, igual que la Matriz de Incidencias.
- Contiene los mismos elementos nulos que la matriz Cft y cuyas componentes no nulas son:
- 1. Para la componente correspondiente a la fila de cada circuito br,y cuya columna corresponde al nodo de
- llegada del circuito b
- :math:`Bf[br,b] = 1/Xbr`
- 2. Para la componente correspondiente a la fila de cada circuito br, y cuya columna corresponde al nodo de
- salida del circuito b
- :math:`Bf[br,b] = -1/Xbr`
- La matriz Bbus se calcula como la transpuesta de la matriz de incidencias Cft por la matriz Bf
- :math:`Bbus = Cft.T * Bf`
- .. codeauthor:: Oscar A. Leiva (MERELEC)
- """
- # constantes
- nb = bus.shape[0]
- nbr = branch.shape[0]
- # construye la matriz de incidencia Cft
- f = branch[:, BUS_I].astype(float) # lista de buses de origen
- t = branch[:, BUS_J].astype(float) # lista de buses de destino
- i = r_[range(nbr), range(nbr)] # Set doble de indices de filas
- # Matriz de incidencia
- Cft = sparse((r_[ones(nbr), -ones(nbr)], (i, r_[f, t])), (nbr, nb))
- # calculo de las susceptancias en serie
- b = 1 / branch[:, X].astype(float) # Susceptancias en serie
- # construye Bf (ZZ en la formulación de Subastas de Derechos Firmes)
- Bf = sparse((r_[b, -b], (i, r_[f, t])), shape=(nbr, nb))
- # construye la matriz Bbus
- Bbus = Cft.T * Bf
- return Bbus, Bf, Cft
|