resistanceCalculator.java 5.1 KB

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