def _create_J_with_numba(Ybus, V, pvpq, pq, createJ, pvpq_lookup, npv, npq, Ibus=None): Ibus = zeros(len(V), dtype=complex128) if Ibus is None else -Ibus # create Jacobian from fast calc of dS_dV dVm_x, dVa_x = dSbus_dV_numba_sparse(Ybus.data, Ybus.indptr, Ybus.indices, V, V / abs(V), Ibus) # data in J, space preallocated is bigger than acutal Jx -> will be reduced later on Jx = empty(len(dVm_x) * 4, dtype=float64) # row pointer, dimension = pvpq.shape[0] + pq.shape[0] + 1 Jp = zeros(pvpq.shape[0] + pq.shape[0] + 1, dtype=int32) # indices, same with the preallocated space (see Jx) Jj = empty(len(dVm_x) * 4, dtype=int32) # fill Jx, Jj and Jp createJ(dVm_x, dVa_x, Ybus.indptr, Ybus.indices, pvpq_lookup, pvpq, pq, Jx, Jj, Jp) # resize before generating the scipy sparse matrix Jx.resize(Jp[-1], refcheck=False) Jj.resize(Jp[-1], refcheck=False) # generate scipy sparse matrix dimJ = npv + npq + npq J = sparse((Jx, Jj, Jp), shape=(dimJ, dimJ)) return J
def _create_J_with_numba(Ybus, V, refpvpq, pvpq, pq, createJ, pvpq_lookup, nref, npv, npq, slack_weights, dist_slack): Ibus = zeros(len(V), dtype=complex128) # create Jacobian from fast calc of dS_dV dVm_x, dVa_x = dSbus_dV_numba_sparse(Ybus.data, Ybus.indptr, Ybus.indices, V, V / abs(V), Ibus) # data in J, space preallocated is bigger than acutal Jx -> will be reduced later on Jx = empty(len(dVm_x) * 4, dtype=float64) # row pointer, dimension = pvpq.shape[0] + pq.shape[0] + 1 if dist_slack: Jp = zeros(refpvpq.shape[0] + pq.shape[0] + 1, dtype=int32) else: Jp = zeros(pvpq.shape[0] + pq.shape[0] + 1, dtype=int32) # indices, same with the preallocated space (see Jx) Jj = empty(len(dVm_x) * 4, dtype=int32) # fill Jx, Jj and Jp createJ(dVm_x, dVa_x, Ybus.indptr, Ybus.indices, pvpq_lookup, refpvpq, pvpq, pq, Jx, Jj, Jp, slack_weights) # resize before generating the scipy sparse matrix Jx.resize(Jp[-1], refcheck=False) Jj.resize(Jp[-1], refcheck=False) # todo: why not replace npv by pv.shape[0] etc.? # generate scipy sparse matrix if dist_slack: dimJ = nref + npv + npq + npq else: dimJ = npv + npq + npq J = sparse((Jx, Jj, Jp), shape=(dimJ, dimJ)) return J