void FUNC_GEN_COST_analyze_step(Func* f, Branch* br, int t) { // Local variables Bus* buses[2]; Bus* bus; Gen* gen; int bus_index_t[2]; int* Hphi_nnz; char* bus_counted; Mat* H; int k; int T; // Num periods T = BRANCH_get_num_periods(br); // Constr data H = FUNC_get_Hphi(f); Hphi_nnz = FUNC_get_Hphi_nnz_ptr(f); bus_counted = FUNC_get_bus_counted(f); // Check pointers if (!Hphi_nnz || !bus_counted) return; // Check outage if (BRANCH_is_on_outage(br)) return; // Bus data buses[0] = BRANCH_get_bus_k(br); buses[1] = BRANCH_get_bus_m(br); for (k = 0; k < 2; k++) bus_index_t[k] = BUS_get_index(buses[k])*T+t; // Buses for (k = 0; k < 2; k++) { bus = buses[k]; if (!bus_counted[bus_index_t[k]]) { for (gen = BUS_get_gen(bus); gen != NULL; gen = GEN_get_next(gen)) { if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_P)) { MAT_set_i(H,*Hphi_nnz,GEN_get_index_P(gen,t)); MAT_set_j(H,*Hphi_nnz,GEN_get_index_P(gen,t)); MAT_set_d(H,*Hphi_nnz,2.*GEN_get_cost_coeff_Q2(gen)); (*Hphi_nnz)++; } } } // Update counted flag bus_counted[bus_index_t[k]] = TRUE; } }
void FUNC_REG_PQ_analyze_step(Func* f, Branch* br, int t) { // Local variables Bus* bus[2]; Gen* gen; int bus_index_t[2]; int* Hcounter; char* bus_counted; Mat* H; int k; REAL dv; int T; // Num periods T = BRANCH_get_num_periods(br); // Constr data H = FUNC_get_Hphi(f); Hcounter = FUNC_get_Hcounter_ptr(f); bus_counted = FUNC_get_bus_counted(f); // Check pointers if (!Hcounter || !bus_counted) return; // Check outage if (BRANCH_is_on_outage(br)) return; // Bus data bus[0] = BRANCH_get_bus_from(br); bus[1] = BRANCH_get_bus_to(br); for (k = 0; k < 2; k++) bus_index_t[k] = BUS_get_index(bus[k])*T+t; // Buses for (k = 0; k < 2; k++) { if (!bus_counted[bus_index_t[k]]) { // Generators for (gen = BUS_get_gen(bus[k]); gen != NULL; gen = GEN_get_next(gen)) { if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_Q)) { // Q var dv = GEN_get_Q_max(gen)-GEN_get_Q_min(gen); // p.u. if (dv < FUNC_REG_PQ_PARAM) dv = FUNC_REG_PQ_PARAM; MAT_set_i(H,*Hcounter,GEN_get_index_Q(gen,t)); MAT_set_j(H,*Hcounter,GEN_get_index_Q(gen,t)); MAT_set_d(H,*Hcounter,1./(dv*dv)); (*Hcounter)++; } if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_P)) { // P var dv = GEN_get_P_max(gen)-GEN_get_P_min(gen); // p.u. if (dv < FUNC_REG_PQ_PARAM) dv = FUNC_REG_PQ_PARAM; MAT_set_i(H,*Hcounter,GEN_get_index_P(gen,t)); MAT_set_j(H,*Hcounter,GEN_get_index_P(gen,t)); MAT_set_d(H,*Hcounter,1./(dv*dv)); (*Hcounter)++; } } } // Update counted flag bus_counted[bus_index_t[k]] = TRUE; } }