PowerFlowProblem.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package holeg.power_flow;
  2. public class PowerFlowProblem {
  3. public final Bus[] buses;
  4. public final Line[] lines;
  5. public final double scaleVoltage;
  6. public final double scalePower;
  7. public PowerFlowProblem(Bus[] buses, Line[] lines, double scaleVoltage, double scalePower) {
  8. if (buses == null)
  9. throw new IllegalArgumentException("buses is null");
  10. if (lines == null)
  11. throw new IllegalArgumentException("lines is null");
  12. this.buses = buses;
  13. this.lines = lines;
  14. this.scaleVoltage = scaleVoltage;
  15. this.scalePower = scalePower;
  16. }
  17. public boolean checkForValidData() {
  18. // Check per unit scale
  19. if (scaleVoltage <= 0)
  20. return false;
  21. if (scalePower <= 0)
  22. return false;
  23. // Check buses
  24. boolean slackBusFound = false;
  25. for (int i = 0; i < buses.length; i++) {
  26. Bus bus = buses[i];
  27. if (bus == null)
  28. return false;
  29. // Invalid voltage
  30. if (bus.voltage <= 0)
  31. return false;
  32. // Check for multiple slack buses
  33. if (bus.type == BusType.Slack) {
  34. if (slackBusFound)
  35. return false;
  36. slackBusFound = true;
  37. }
  38. }
  39. // No slack bus
  40. if (!slackBusFound)
  41. return false;
  42. // Check lines
  43. for (int i = 0; i < lines.length; i++) {
  44. Line line = lines[i];
  45. if (line == null)
  46. return false;
  47. // Invalid index of to/from
  48. if (line.to < 0 || line.to >= buses.length)
  49. return false;
  50. if (line.from < 0 || line.from >= buses.length)
  51. return false;
  52. // Invalid values for R and X
  53. if (line.R < 0 || line.X < 0)
  54. return false;
  55. }
  56. return true;
  57. }
  58. }