Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adapt geo position of nodes to meet electrical line length #9

Draft
wants to merge 13 commits into
base: master
Choose a base branch
from
Draft
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* © 2020. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/
package edu.ie3.netpad.exception;

public class GridManipulationException extends Exception {
public GridManipulationException(String message) {
super(message);
}

public GridManipulationException(String message, Throwable cause) {
super(message, cause);
}
}
569 changes: 563 additions & 6 deletions src/main/java/edu/ie3/netpad/grid/controller/GridController.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,10 @@ public static Dialog<FixLineLengthData> fixLineLengthDialog() {
ToggleButton electricalBtn = new RadioButton("Electrical → Geographical");
electricalBtn.setUserData(ELECTRICAL);
electricalBtn.setToggleGroup(tglGrp);
electricalBtn.setDisable(true);
ToggleButton geographicalBtn = new RadioButton("Geographical → Electrical");
geographicalBtn.setUserData(GEOGRAPHICAL);
geographicalBtn.setToggleGroup(tglGrp);
tglGrp.selectToggle(geographicalBtn);
tglGrp.selectToggle(electricalBtn);
gridPane.addRow(0, modeLbl, electricalBtn);
gridPane.add(geographicalBtn, 1, 1);

Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@
<AppenderRef ref="Console" level="info"/>
<AppenderRef ref="RF" level="debug"/>
</asyncRoot>
<logger name="edu.ie3.netpad" additivity="false">
<AppenderRef ref="Console" level="info"/>
<AppenderRef ref="RF" level="debug"/>
</logger>
<logger name="edu.ie3.datamodel" additivity="false">
<AppenderRef ref="Console" level="off"/>
<AppenderRef ref="RF-psdm" level="debug"/>
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
/*
* © 2020. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/
package edu.ie3.test.common.grids

import edu.ie3.datamodel.models.OperationTime
import edu.ie3.datamodel.models.input.NodeInput
import edu.ie3.datamodel.models.input.OperatorInput
import edu.ie3.datamodel.models.input.connector.LineInput
import edu.ie3.datamodel.models.input.connector.Transformer2WInput
import edu.ie3.datamodel.models.input.connector.type.LineTypeInput
import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput
import edu.ie3.datamodel.models.input.container.GraphicElements
import edu.ie3.datamodel.models.input.container.JointGridContainer
import edu.ie3.datamodel.models.input.container.RawGridElements
import edu.ie3.datamodel.models.input.container.SystemParticipants
import edu.ie3.datamodel.models.input.system.characteristic.OlmCharacteristicInput
import edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils
import edu.ie3.util.quantities.PowerSystemUnits
import org.locationtech.jts.geom.LineString
import org.locationtech.jts.geom.Point
import org.locationtech.jts.io.geojson.GeoJsonReader
import tech.units.indriya.quantity.Quantities
import tech.units.indriya.unit.Units

import javax.measure.MetricPrefix

import static tech.units.indriya.unit.Units.SIEMENS

/**
* This is a star-topology grid, that is at the first hand used to test the adaption of geo positions in order to meet
* the electrical line length
*/
trait LengthAdaptionTestGrid {
private static final GeoJsonReader geoJsonReader = new GeoJsonReader()

/* === Nodes === */
NodeInput nodeA = new NodeInput(
UUID.fromString("36514e92-e6d9-4a7e-85b1-175ec6e27216"),
"node_a",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
true,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.411931,51.493045],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.MV_20KV,
1
)
NodeInput nodeB = new NodeInput(
UUID.fromString("78beb137-45e2-43e3-8baa-1c25f0c91616"),
"node_b",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.411931,51.493045],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)
NodeInput nodeC = new NodeInput(
UUID.fromString("83586a39-8a55-4b10-a034-7ccfe6a451cb"),
"node_c",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.411728,51.493918],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)
NodeInput nodeD = new NodeInput(
UUID.fromString("a0746324-3c74-4a03-9e45-41ae2880ad8d"),
"node_d",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.411497,51.494553],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)
NodeInput nodeE = new NodeInput(
UUID.fromString("1e755e89-7bfb-4987-9bee-358ac1892313"),
"node_e",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.412838,51.494136],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)
NodeInput nodeF = new NodeInput(
UUID.fromString("7dc3d14b-3536-43b8-96f4-0f43b26854f8"),
"node_f",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.413761,51.494250],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)
NodeInput nodeG = new NodeInput(
UUID.fromString("292ea9b1-79f8-4615-bad5-c0d33b17527d"),
"node_g",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
Quantities.getQuantity(1d, PowerSystemUnits.PU),
false,
geoJsonReader.read("{\"type\":\"Point\",\"coordinates\":[7.413123,51.494791],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as Point,
GermanVoltageLevelUtils.LV,
2
)

/* === Transformers === */
def transformerType = new Transformer2WTypeInput(
UUID.fromString("08559390-d7c0-4427-a2dc-97ba312ae0ac"),
"MS-NS_1",
Quantities.getQuantity(10.078, Units.OHM),
Quantities.getQuantity(23.312, Units.OHM),
Quantities.getQuantity(630.0, PowerSystemUnits.KILOVOLTAMPERE),
Quantities.getQuantity(20.0, PowerSystemUnits.KILOVOLT),
Quantities.getQuantity(0.4, PowerSystemUnits.KILOVOLT),
Quantities.getQuantity(0.0, MetricPrefix.NANO(SIEMENS)),
Quantities.getQuantity(0.0, MetricPrefix.NANO(SIEMENS)),
Quantities.getQuantity(0.5, Units.PERCENT),
Quantities.getQuantity(0.0, PowerSystemUnits.DEGREE_GEOM),
false,
0,
-10,
10
)
Transformer2WInput transformer = new Transformer2WInput(
UUID.fromString("e691ebc3-fcd6-420d-8fc6-ecf45e88c86c"),
"transformer",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeA,
nodeB,
1,
transformerType,
0,
false
)

/* === Lines === */
def lineType = new LineTypeInput(
UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"),
"lineType",
Quantities.getQuantity(0.00322, PowerSystemUnits.MICRO_SIEMENS_PER_KILOMETRE),
Quantities.getQuantity(0d, PowerSystemUnits.MICRO_SIEMENS_PER_KILOMETRE),
Quantities.getQuantity(0.437, PowerSystemUnits.OHM_PER_KILOMETRE),
Quantities.getQuantity(0.356, PowerSystemUnits.OHM_PER_KILOMETRE),
Quantities.getQuantity(300d, Units.AMPERE),
Quantities.getQuantity(0.4, PowerSystemUnits.KILOVOLT)
)
LineInput lineBC = new LineInput(
UUID.fromString("57be16a6-e55a-4177-915c-d44b5dc7c78a"),
"b_c",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeB,
nodeC,
1,
lineType,
Quantities.getQuantity(2.5, PowerSystemUnits.KILOMETRE),
geoJsonReader.read("{\"type\":\"LineString\",\"coordinates\":[[7.411931,51.493045],[7.411728,51.493918]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as LineString,
OlmCharacteristicInput.CONSTANT_CHARACTERISTIC
)
LineInput lineCD = new LineInput(
UUID.fromString("f7c1d0f8-4464-4243-ab0b-bfb048e8b1a9"),
"c_d",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeC,
nodeD,
1,
lineType,
Quantities.getQuantity(2.5, PowerSystemUnits.KILOMETRE),
geoJsonReader.read("{\"type\":\"LineString\",\"coordinates\":[[7.411728,51.493918],[7.411497,51.494553]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as LineString,
OlmCharacteristicInput.CONSTANT_CHARACTERISTIC
)
LineInput lineCE = new LineInput(
UUID.fromString("959d901a-8403-4b24-a99f-ea07a7c924a4"),
"c_e",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeC,
nodeE,
1,
lineType,
Quantities.getQuantity(2.5, PowerSystemUnits.KILOMETRE),
geoJsonReader.read("{\"type\":\"LineString\",\"coordinates\":[[7.411728,51.493918],[7.412838,51.494136]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as LineString,
OlmCharacteristicInput.CONSTANT_CHARACTERISTIC
)
LineInput lineEF = new LineInput(
UUID.fromString("c709c1da-cab2-4ad3-8211-1fa765ec7c45"),
"e_f",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeE,
nodeF,
1,
lineType,
Quantities.getQuantity(2.5, PowerSystemUnits.KILOMETRE),
geoJsonReader.read("{\"type\":\"LineString\",\"coordinates\":[[7.412838,51.494136],[7.413761,51.494250]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as LineString,
OlmCharacteristicInput.CONSTANT_CHARACTERISTIC
)
LineInput lineEG = new LineInput(
UUID.fromString("2fefea62-53c7-4923-97a0-f4e23b14143f"),
"e_g",
OperatorInput.NO_OPERATOR_ASSIGNED,
OperationTime.notLimited(),
nodeE,
nodeG,
1,
lineType,
Quantities.getQuantity(2.5, PowerSystemUnits.KILOMETRE),
geoJsonReader.read("{\"type\":\"LineString\",\"coordinates\":[[7.412838,51.494136],[7.413123,51.494791]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") as LineString,
OlmCharacteristicInput.CONSTANT_CHARACTERISTIC
)

/* Put everything together */
JointGridContainer testGrid = new JointGridContainer(
"lengthAdaptionTestGrid",
new RawGridElements(
[
nodeA,
nodeB,
nodeC,
nodeD,
nodeE,
nodeF,
nodeG
] as Set,
[
lineBC,
lineCD,
lineCE,
lineEF,
lineEG
] as Set,
[transformer] as Set,
[] as Set,
[] as Set,
[] as Set
),
new SystemParticipants(
[] as Set
),
new GraphicElements(
[] as Set,
[] as Set,
)
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
uuid,geo_position,id,length,node_a,node_b,olm_characteristic,operates_from,operates_until,operator,parallel_devices,type
57be16a6-e55a-4177-915c-d44b5dc7c78a,"{""type"":""LineString"",""coordinates"":[[7.411931,51.493045],[7.411728,51.493918]],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",b_c,2.5,78beb137-45e2-43e3-8baa-1c25f0c91616,83586a39-8a55-4b10-a034-7ccfe6a451cb,olm:{(0.00,1.00)},,,,1,3bed3eb3-9790-4874-89b5-a5434d408088
f7c1d0f8-4464-4243-ab0b-bfb048e8b1a9,"{""type"":""LineString"",""coordinates"":[[7.411728,51.493918],[7.411497,51.494553]],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",c_d,2.5,83586a39-8a55-4b10-a034-7ccfe6a451cb,a0746324-3c74-4a03-9e45-41ae2880ad8d,olm:{(0.00,1.00)},,,,1,3bed3eb3-9790-4874-89b5-a5434d408088
959d901a-8403-4b24-a99f-ea07a7c924a4,"{""type"":""LineString"",""coordinates"":[[7.411728,51.493918],[7.412838,51.494136]],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",c_e,2.5,83586a39-8a55-4b10-a034-7ccfe6a451cb,1e755e89-7bfb-4987-9bee-358ac1892313,olm:{(0.00,1.00)},,,,1,3bed3eb3-9790-4874-89b5-a5434d408088
c709c1da-cab2-4ad3-8211-1fa765ec7c45,"{""type"":""LineString"",""coordinates"":[[7.412838,51.494136],[7.413761,51.494250]],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",e_f,2.5,1e755e89-7bfb-4987-9bee-358ac1892313,7dc3d14b-3536-43b8-96f4-0f43b26854f8,olm:{(0.00,1.00)},,,,1,3bed3eb3-9790-4874-89b5-a5434d408088
2fefea62-53c7-4923-97a0-f4e23b14143f,"{""type"":""LineString"",""coordinates"":[[7.412838,51.494136],[7.413123,51.494791]],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",e_g,2.5,1e755e89-7bfb-4987-9bee-358ac1892313,292ea9b1-79f8-4615-bad5-c0d33b17527d,olm:{(0.00,1.00)},,,,1,3bed3eb3-9790-4874-89b5-a5434d408088
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
uuid,b,g,i_max,id,r,v_rated,x
3bed3eb3-9790-4874-89b5-a5434d408088,0.00322,0.0,300.0,lineType,0.437,0.4,0.356
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
uuid,geo_position,id,operates_from,operates_until,operator,slack,subnet,v_rated,v_target,volt_lvl
36514e92-e6d9-4a7e-85b1-175ec6e27216,"{""type"":""Point"",""coordinates"":[7.411931,51.493045],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_a,"","","",true,1,20.0,1.0,MV
78beb137-45e2-43e3-8baa-1c25f0c91616,"{""type"":""Point"",""coordinates"":[7.411931,51.493045],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_b,"","","",false,2,0.4,1.0,LV
83586a39-8a55-4b10-a034-7ccfe6a451cb,"{""type"":""Point"",""coordinates"":[7.411728,51.493918],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_c,"","","",false,2,0.4,1.0,LV
a0746324-3c74-4a03-9e45-41ae2880ad8d,"{""type"":""Point"",""coordinates"":[7.411497,51.494553],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_d,"","","",false,2,0.4,1.0,LV
1e755e89-7bfb-4987-9bee-358ac1892313,"{""type"":""Point"",""coordinates"":[7.412838,51.494136],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_e,"","","",false,2,0.4,1.0,LV
7dc3d14b-3536-43b8-96f4-0f43b26854f8,"{""type"":""Point"",""coordinates"":[7.413761,51.494250],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_f,"","","",false,2,0.4,1.0,LV
292ea9b1-79f8-4615-bad5-c0d33b17527d,"{""type"":""Point"",""coordinates"":[7.413123,51.494791],""crs"":{""type"":""name"",""properties"":{""name"":""EPSG:4326""}}}",node_g,"","","",false,2,0.4,1.0,LV
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
uuid,auto_tap,id,node_a,node_b,operates_from,operates_until,operator,parallel_devices,tap_pos,type
e691ebc3-fcd6-420d-8fc6-ecf45e88c86c,false,transformer,36514e92-e6d9-4a7e-85b1-175ec6e27216,78beb137-45e2-43e3-8baa-1c25f0c91616,,,,1,0,08559390-d7c0-4427-a2dc-97ba312ae0ac
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
uuid,b_m,d_phi,d_v,g_m,id,r_sc,s_rated,tap_max,tap_min,tap_neutr,tap_side,v_rated_a,v_rated_b,x_sc
08559390-d7c0-4427-a2dc-97ba312ae0ac,0.0,0.0,0.5,0.0,MS-NS_1,10.078,630.0,10,-10,0,false,20.0,0.4,23.312