1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package holeg.power_flow;
- import java.util.ArrayList;
- import java.util.List;
- public class PowerFlowProblem {
- public final Bus[] buses;
- public final Line[] lines;
- public final double scaleVoltage;
- public final double scalePower;
- public PowerFlowProblem(Bus[] buses, Line[] lines, double scaleVoltage, double scalePower) {
- if (buses == null)
- throw new IllegalArgumentException("buses is null");
- if (lines == null)
- throw new IllegalArgumentException("lines is null");
- this.buses = buses;
- this.lines = lines;
- this.scaleVoltage = scaleVoltage;
- this.scalePower = scalePower;
- }
- public List<Integer> getProducers() {
- List<Integer> producers = new ArrayList<>();
- for (int i = 0; i < buses.length; i++)
- if (buses[i].isProducer())
- producers.add(i);
- return producers;
- }
- public boolean checkForValidData() {
- // Check per unit scale
- if (scaleVoltage <= 0)
- return false;
- if (scalePower <= 0)
- return false;
- // Check buses
- for (int i = 0; i < buses.length; i++) {
- Bus bus = buses[i];
- if (bus == null)
- return false;
- // Invalid voltage
- if (bus.voltage <= 0)
- return false;
- // Check for multiple slack buses
- if (bus.type == BusType.Slack && i != 0)
- return false;
- if (bus.type != BusType.Slack && i == 0)
- return false;
- }
- // Check lines
- for (int i = 0; i < lines.length; i++) {
- Line line = lines[i];
- if (line == null)
- return false;
- // Invalid index of to/from
- if (line.to < 0 || line.to >= buses.length)
- return false;
- if (line.from < 0 || line.from >= buses.length)
- return false;
- if (line.from == line.to)
- return false;
- // Invalid values for R and X
- if (line.R < 0 || line.X < 0)
- return false;
- }
- return true;
- }
- }
|