resistanceCalculator.java 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package blackstart;
  2. import classes.*;
  3. import com.google.gson.annotations.Expose;
  4. import ui.model.Model;
  5. public class resistanceCalculator {
  6. @Expose
  7. private int voltage;
  8. @Expose
  9. private int diameter;
  10. @Expose
  11. private double specificMaterialResistance;
  12. public resistanceCalculator(int voltage, int diameter, double specificMaterialResistance){
  13. this.voltage = voltage;
  14. this.diameter = diameter;
  15. this.specificMaterialResistance = specificMaterialResistance;
  16. }
  17. void setDistancesToCalcResistance(HolonObject powerPlant) {
  18. if (powerPlant != null) {
  19. // travers
  20. if (powerPlant.getConnectedTo().size() > 0) {
  21. for (CpsEdge edge : powerPlant.getConnectedTo()) {
  22. if (powerPlant.getId() == edge.getA().getId()) {
  23. traversEdges(edge.getB(), powerPlant, calcEdgeLength(edge));
  24. } else {
  25. traversEdges(edge.getA(), powerPlant, calcEdgeLength(edge));
  26. }
  27. }
  28. } else {
  29. System.out.println("Nothing connected to powerplant");
  30. }
  31. } else {
  32. System.out.println("No powerplant connected");
  33. }
  34. }
  35. private void traversEdges(AbstractCpsObject currentObject, AbstractCpsObject last, double distance) {
  36. if (currentObject.getConnectedTo().size() > 1) { // recursive call for all edges
  37. for (CpsEdge edge : currentObject.getConnectedTo()) {
  38. if (currentObject.getId() == edge.getA().getId()) { // look at which way the edge points
  39. if (last.getId() != edge.getB().getId()) {
  40. traversEdges(edge.getB(), currentObject, distance + calcEdgeLength(edge));
  41. }
  42. } else {
  43. if (last.getId() != edge.getA().getId()) {
  44. traversEdges(edge.getA(), currentObject, distance + calcEdgeLength(edge));
  45. }
  46. }
  47. }
  48. } else { // at leaf
  49. for (HolonElement ele : ((HolonObject) currentObject).getElements()) {
  50. ele.setDistance(distance);
  51. }
  52. }
  53. }
  54. private double calcEdgeLength(CpsEdge edge) {
  55. Position aPos = edge.getA().getPosition();
  56. Position bPos = edge.getB().getPosition();
  57. double xDiff = Math.abs(aPos.x - bPos.x);
  58. double yDiff = Math.abs(aPos.y - bPos.y);
  59. return Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
  60. }
  61. public float calcEnergyAfterResistance(float currentEnergy, double distance, float energyRequiredForPowerplantBlackstart){
  62. double blackstartResistance = blackstartResistance(voltage, energyRequiredForPowerplantBlackstart);
  63. double cableResistance = cableResistance(specificMaterialResistance, distance, diameter);
  64. return (float) (1 - (cableResistance / (cableResistance + blackstartResistance))) * currentEnergy;
  65. }
  66. private double blackstartResistance(int voltage, float energyRequiredForPowerplantBlackstart){
  67. return Math.pow(voltage, 2) / energyRequiredForPowerplantBlackstart;
  68. }
  69. private double cableResistance(double specificMaterialResistance, double distance, int diameter){
  70. return specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
  71. }
  72. public float calcEnergyNeededForCertainEnergyAfterResistance(float energyWanted, double distance, float energyRequiredForPowerplantBlackstart){
  73. double blackstartResistance = blackstartResistance(voltage, energyRequiredForPowerplantBlackstart);
  74. double cableResistance = cableResistance(specificMaterialResistance, distance, diameter);
  75. return (float) (energyWanted / (1 - (cableResistance / (cableResistance + blackstartResistance))));
  76. }
  77. }