HolegGateway.java 3.6 KB

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