HolegGateway.java 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package holeg;
  2. import classes.AbstractCanvasObject;
  3. import classes.HolonObject;
  4. import classes.Node;
  5. import holeg.model.Grid;
  6. import holeg.model.GridEdge;
  7. import holeg.model.GridNode;
  8. import holeg.model.NodeType;
  9. import holeg.power_flow.ComplexNumber;
  10. import holeg.simple_grid.SimpleGridBuilder;
  11. import holeg.simple_grid.SimpleGridEdge;
  12. import holeg.simple_grid.SimpleGridNode;
  13. import holeg.ui.PowerFlowAnalysisMenu;
  14. import holeg.ui.SolveResultMessageBox;
  15. import ui.controller.FlexManager;
  16. import ui.model.*;
  17. import java.util.HashMap;
  18. public class HolegGateway {
  19. private static Grid convert(MinimumNetwork network, int iteration, FlexManager flexManager) {
  20. SimpleGridBuilder gridBuilder = new SimpleGridBuilder();
  21. HashMap<AbstractCanvasObject, SimpleGridNode> canvasToGrid = new HashMap<>();
  22. for (HolonObject object : network.getHolonObjectList()) {
  23. double power = object.getEnergyAtTimeStep(iteration);
  24. SimpleGridNode node;
  25. if (power <= 0)
  26. node = gridBuilder.addHouse(new ComplexNumber(-power, 0));
  27. else
  28. node = gridBuilder.addGenerator(new ComplexNumber(power, 0));
  29. node.tag = object;
  30. if (object.getElements().stream().anyMatch(e -> e.getEleName().equalsIgnoreCase("SLACK")))
  31. node.setType(NodeType.Slack);
  32. else if (object.getElements().stream().anyMatch(e -> e.getEleName().equalsIgnoreCase("TRANSFORMER")))
  33. node.setType(NodeType.Transformer);
  34. else
  35. node.setType(NodeType.Bus);
  36. canvasToGrid.put(object, node);
  37. }
  38. for (AbstractCanvasObject object : network.getNodeAndSwitches()) {
  39. SimpleGridNode node = gridBuilder.addHouse(new ComplexNumber(0, 0));
  40. node.tag = object;
  41. canvasToGrid.put(object, node);
  42. }
  43. for (IntermediateCableWithState cable : network.getEdgeList()) {
  44. SimpleGridNode a = canvasToGrid.get(cable.getModel().getA());
  45. SimpleGridNode b = canvasToGrid.get(cable.getModel().getB());
  46. if (a == null || b == null)
  47. continue;
  48. SimpleGridEdge edge = gridBuilder.connect(a, b, cable.getModel().getRealLength());
  49. edge.tag = cable;
  50. }
  51. return gridBuilder.getGrid();
  52. }
  53. private static void decorateNetwork(MinimumNetwork network, int iteration, FlexManager flexManager, DecoratedNetwork decoratedNetwork, Grid grid) {
  54. for (GridNode node : grid.getNodes()) {
  55. SimpleGridNode simpleNode = (SimpleGridNode) node;
  56. if (node.getPowerGeneration().lenSquared() > 0)
  57. decoratedNetwork.getSupplierList().add(new Supplier((HolonObject) simpleNode.tag, (float) node.getPowerGeneration().real, 0, simpleNode.voltage, simpleNode.phaseDegrees, simpleNode.type == NodeType.Slack));
  58. else if (node.getPowerConsumption().lenSquared() > 0)
  59. decoratedNetwork.getConsumerList().add(new Consumer((HolonObject) simpleNode.tag, (float) node.getPowerConsumption().real, simpleNode.voltage, simpleNode.phaseDegrees, Math.cos(simpleNode.getPowerConsumption().angle()), simpleNode.type == NodeType.Slack));
  60. else if (simpleNode.tag instanceof HolonObject)
  61. decoratedNetwork.getPassivNoEnergyList().add(new Passiv((HolonObject) simpleNode.tag));
  62. }
  63. for (GridEdge edge : grid.getEdges()) {
  64. SimpleGridEdge simpleGridEdge = (SimpleGridEdge) edge;
  65. decoratedNetwork.getDecoratedCableList().add(
  66. new DecoratedCable(
  67. ((IntermediateCableWithState)simpleGridEdge.tag).getModel(),
  68. DecoratedCable.CableState.Working,
  69. (float)simpleGridEdge.power.real,
  70. (float)simpleGridEdge.loss.real));
  71. }
  72. }
  73. public static void solve(MinimumNetwork minimumNetwork, int iteration, FlexManager flexManager, DecoratedNetwork network) {
  74. Grid grid = convert(minimumNetwork, iteration, flexManager);
  75. HolegPowerFlow powerFlow = new HolegPowerFlow();
  76. GridSolverResult result = powerFlow.solve(grid, PowerFlowSettings.getDefault());
  77. decorateNetwork(minimumNetwork, iteration, flexManager, network, grid);
  78. if (PowerFlowAnalysisMenu.getInstance().shouldShowResult())
  79. SolveResultMessageBox.show(result);
  80. }
  81. }