1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package blackstart;
- import classes.*;
- import org.nd4j.linalg.api.ndarray.INDArray;
- import org.nd4j.linalg.factory.Nd4j;
- public class resistanceCalculator {
- void setDistanceToCalcResistance(HolonObject powerPlant) {
- if (powerPlant != null) {
- // println("Powerplant Energy @"+powerPlant.getEnergyAtTimeStep(1));
- // println("" + getPowerplantProduction());
- // travers
- if (powerPlant.getConnectedTo().size() > 0) {
- for (CpsEdge edge : powerPlant.getConnectedTo()) {
- // println(edge.toString());
- if (powerPlant.getId() == edge.getA().getId()) {
- traversEdges(edge.getB(), powerPlant, calcEdgeLength(edge));
- } else {
- traversEdges(edge.getA(), powerPlant, calcEdgeLength(edge));
- }
- }
- } else {
- // println("Nothing connected to powerplant");
- }
- } else {
- // println("No powerplant connected");
- }
- }
- private void traversEdges(AbstractCpsObject currentObject, AbstractCpsObject last, double distance) {
- if (currentObject.getConnectedTo().size() > 1) { // recursive call for all edges
- for (CpsEdge edge : currentObject.getConnectedTo()) {
- if (currentObject.getId() == edge.getA().getId()) { // look at which way the edge points
- if (last.getId() != edge.getB().getId()) {
- traversEdges(edge.getB(), currentObject, distance + calcEdgeLength(edge));
- }
- } else {
- if (last.getId() != edge.getA().getId()) {
- traversEdges(edge.getA(), currentObject, distance + calcEdgeLength(edge));
- }
- }
- }
- } else { // at leaf
- for (HolonElement ele : ((HolonObject) currentObject).getElements()) {
- ele.setDistance(distance);
- // if (ele.getEleName().equals("Solar Panels")) {// TODO: das wollen wir ja so nicht
- // ele.setEnergyPerElement(5000);
- // ele.setEnergyPerElement(calcEnergyAfterResistance(ele.getEnergyPerElement(), distance));
- // }
- }
- }
- }
- private void matrixtest(){
- INDArray nd = Nd4j.create(new float[]{1, 2, 3, 4}, new int[]{2, 2});
- }
- private double calcEdgeLength(CpsEdge edge) {
- Position aPos = edge.getA().getPosition();
- Position bPos = edge.getB().getPosition();
- double xDiff = Math.abs(aPos.x - bPos.x);
- double yDiff = Math.abs(aPos.y - bPos.y);
- return Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
- }
- private float calcEnergyAfterResistance(float currentEnergy, double distance, float powerPlantBlackstartResistance) {
- // 230v kupfer 30mm durchmesser
- int volatage = 230;
- int diameter = 30;
- // kupfer
- double specificMaterialResistance = 0.017;
- double blackstartResistance = Math.pow(volatage, 2) / powerPlantBlackstartResistance; //getPowerPlantBlackstartResistance() carefull look if positive or negative
- double cableResistance = specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
- return (float) (1 - (cableResistance / (cableResistance + blackstartResistance))) * currentEnergy;
- }
- }
|