Exemplo n.º 1
0
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;
  }
}
Exemplo n.º 2
0
void FUNC_REG_PQ_count_step(Func* f, Branch* br, int t) {

  // Local variables
  Bus* bus[2];
  Gen* gen;
  int bus_index_t[2];
  int* Hcounter;
  char* bus_counted;
  int k;
  int T;
 
  // Num periods
  T = BRANCH_get_num_periods(br);

  // Constr data
  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
	  (*Hcounter)++;

	if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_P)) // P var
	  (*Hcounter)++;
      }
    }
    
    // Update counted flag
    bus_counted[bus_index_t[k]] = TRUE;
  }
}
Exemplo n.º 3
0
void FUNC_REG_PQ_eval_step(Func* f, Branch* br, int t, Vec* var_values) {

  // Local variables
  Bus* bus[2];
  Gen* gen;
  int bus_index_t[2];
  char* bus_counted;
  REAL* phi;
  REAL* gphi;
  REAL Qmid;
  REAL Pmid;
  REAL P;
  REAL Q;
  REAL dP;
  REAL dQ;
  int k;
  int T;
 
  // Num periods
  T = BRANCH_get_num_periods(br);

  // Constr data
  phi = FUNC_get_phi_ptr(f);
  gphi = VEC_get_data(FUNC_get_gphi(f));
  bus_counted = FUNC_get_bus_counted(f);

  // Check pointers
  if (!phi || !gphi || !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)) {

	// Mid value
	Qmid = (GEN_get_Q_max(gen)+GEN_get_Q_min(gen))/2.; // p.u.
	Pmid = (GEN_get_P_max(gen)+GEN_get_P_min(gen))/2.; // p.u.

	// Normalization factor
	dQ = GEN_get_Q_max(gen)-GEN_get_Q_min(gen); // p.u.
	if (dQ < FUNC_REG_PQ_PARAM)
	  dQ = FUNC_REG_PQ_PARAM;
	dP = GEN_get_P_max(gen)-GEN_get_P_min(gen); // p.u.
	if (dP < FUNC_REG_PQ_PARAM)
	  dP = FUNC_REG_PQ_PARAM;
	
	if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_Q)) { // Q var
	  
	  // Value
	  Q = VEC_get(var_values,GEN_get_index_Q(gen,t));

	  // phi
	  (*phi) += 0.5*pow((Q-Qmid)/dQ,2.);
	  
	  // gphi
	  gphi[GEN_get_index_Q(gen,t)] = (Q-Qmid)/(dQ*dQ);
	}
	else {
	  
	  // Value
	  Q = GEN_get_Q(gen,t);

	  // phi
	  (*phi) += 0.5*pow((Q-Qmid)/dQ,2.); 
	}

	if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_P)) { // P var
	  	
	  // Value
	  P = VEC_get(var_values,GEN_get_index_P(gen,t));

	  // phi
	  (*phi) += 0.5*pow((P-Pmid)/dP,2.);

	  // gphi
	  gphi[GEN_get_index_P(gen,t)] = (P-Pmid)/(dP*dP);
	}
	else {

	  // Value
	  P = GEN_get_P(gen,t);

	  // phi
	  (*phi) += 0.5*pow((P-Pmid)/dP,2.);
	}
      }
    }
    
    // Update counted flag
    bus_counted[bus_index_t[k]] = TRUE;
  }
}
Exemplo n.º 4
0
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;
  }  
}
Exemplo n.º 5
0
void FUNC_GEN_COST_eval_step(Func* f, Branch* br, int t, Vec* var_values) {

  // Local variables
  Bus* buses[2];
  Bus* bus;
  Gen* gen;
  int bus_index_t[2];
  char* bus_counted;
  REAL* phi;
  REAL* gphi;
  int index_P;
  REAL P;
  REAL Q0;
  REAL Q1;
  REAL Q2;
  int k;
  int T;

  // Num periods
  T = BRANCH_get_num_periods(br);

  // Constr data
  phi = FUNC_get_phi_ptr(f);
  gphi = VEC_get_data(FUNC_get_gphi(f));
  bus_counted = FUNC_get_bus_counted(f);

  // Check pointers
  if (!phi || !gphi || !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)) {

	Q0 = GEN_get_cost_coeff_Q0(gen);
	Q1 = GEN_get_cost_coeff_Q1(gen);
	Q2 = GEN_get_cost_coeff_Q2(gen);

	// Variable
	if (GEN_has_flags(gen,FLAG_VARS,GEN_VAR_P)) {

	  // Index
	  index_P = GEN_get_index_P(gen,t);

	  // P
	  P = VEC_get(var_values,index_P);

	  // phi
	  (*phi) += Q0 + Q1*P + Q2*pow(P,2.);

	  // gphi
	  gphi[index_P] = Q1 + 2.*Q2*P;
	}

	// Constant
	else {

	  // P
	  P = GEN_get_P(gen,t);

	  // phi
	  (*phi) += Q0 + Q1*P + Q2*pow(P,2.);
	}
      }
    }

    // Update counted flag
    bus_counted[bus_index_t[k]] = TRUE;
  }
}