resistanceCalculator.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package blackstart;
  2. import classes.*;
  3. import org.nd4j.linalg.api.ndarray.INDArray;
  4. import org.nd4j.linalg.factory.Nd4j;
  5. public class resistanceCalculator {
  6. void setDistanceToCalcResistance(HolonObject powerPlant) {
  7. if (powerPlant != null) {
  8. // println("Powerplant Energy @"+powerPlant.getEnergyAtTimeStep(1));
  9. // println("" + getPowerplantProduction());
  10. // travers
  11. if (powerPlant.getConnectedTo().size() > 0) {
  12. for (CpsEdge edge : powerPlant.getConnectedTo()) {
  13. // println(edge.toString());
  14. if (powerPlant.getId() == edge.getA().getId()) {
  15. traversEdges(edge.getB(), powerPlant, calcEdgeLength(edge));
  16. } else {
  17. traversEdges(edge.getA(), powerPlant, calcEdgeLength(edge));
  18. }
  19. }
  20. } else {
  21. // println("Nothing connected to powerplant");
  22. }
  23. } else {
  24. // println("No powerplant connected");
  25. }
  26. }
  27. private void traversEdges(AbstractCpsObject currentObject, AbstractCpsObject last, double distance) {
  28. if (currentObject.getConnectedTo().size() > 1) { // recursive call for all edges
  29. for (CpsEdge edge : currentObject.getConnectedTo()) {
  30. if (currentObject.getId() == edge.getA().getId()) { // look at which way the edge points
  31. if (last.getId() != edge.getB().getId()) {
  32. traversEdges(edge.getB(), currentObject, distance + calcEdgeLength(edge));
  33. }
  34. } else {
  35. if (last.getId() != edge.getA().getId()) {
  36. traversEdges(edge.getA(), currentObject, distance + calcEdgeLength(edge));
  37. }
  38. }
  39. }
  40. } else { // at leaf
  41. for (HolonElement ele : ((HolonObject) currentObject).getElements()) {
  42. ele.setDistance(distance);
  43. // if (ele.getEleName().equals("Solar Panels")) {// TODO: das wollen wir ja so nicht
  44. // ele.setEnergyPerElement(5000);
  45. // ele.setEnergyPerElement(calcEnergyAfterResistance(ele.getEnergyPerElement(), distance));
  46. // }
  47. }
  48. }
  49. }
  50. private void matrixtest(){
  51. INDArray nd = Nd4j.create(new float[]{1, 2, 3, 4}, new int[]{2, 2});
  52. }
  53. private double calcEdgeLength(CpsEdge edge) {
  54. Position aPos = edge.getA().getPosition();
  55. Position bPos = edge.getB().getPosition();
  56. double xDiff = Math.abs(aPos.x - bPos.x);
  57. double yDiff = Math.abs(aPos.y - bPos.y);
  58. return Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
  59. }
  60. private float calcEnergyAfterResistance(float currentEnergy, double distance, float powerPlantBlackstartResistance) {
  61. // 230v kupfer 30mm durchmesser
  62. int volatage = 230;
  63. int diameter = 30;
  64. // kupfer
  65. double specificMaterialResistance = 0.017;
  66. double blackstartResistance = Math.pow(volatage, 2) / powerPlantBlackstartResistance; //getPowerPlantBlackstartResistance() carefull look if positive or negative
  67. double cableResistance = specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
  68. return (float) (1 - (cableResistance / (cableResistance + blackstartResistance))) * currentEnergy;
  69. }
  70. }