Skip to content

Commit 7670ca7

Browse files
Merge pull request #709 from ie3-institute/vb/#586-grid-io-it
Vb/#586 grid io it
2 parents d1a8c22 + 8549389 commit 7670ca7

25 files changed

+2499
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1818
- `EmResult` and `FlexOptionsResult` for Energy Management Systems [#651](https://github.com/ie3-institute/PowerSystemDataModel/issues/651)
1919
- `EvcsInput` now has a parameter for enabling and disabling vehicle to grid support [#681](https://github.com/ie3-institute/PowerSystemDataModel/issues/681)
2020
- Added Dependabot updates to sphinx/readthedocs dependencies [#735](https://github.com/ie3-institute/PowerSystemDataModel/issues/735)
21+
- Created convenience function for JointGridContainer from CSV [#502](https://github.com/ie3-institute/PowerSystemDataModel/issues/502)
22+
- Added CSV grid IO integration test [#586](https://github.com/ie3-institute/PowerSystemDataModel/issues/586)
2123

2224
### Fixed
2325
- Reduced code smells [#492](https://github.com/ie3-institute/PowerSystemDataModel/issues/492)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* © 2022. TU Dortmund University,
3+
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
4+
* Research group Distribution grid planning and operation
5+
*/
6+
package edu.ie3.datamodel.io.source.csv;
7+
8+
import edu.ie3.datamodel.exceptions.SourceException;
9+
import edu.ie3.datamodel.io.naming.FileNamingStrategy;
10+
import edu.ie3.datamodel.io.source.*;
11+
import edu.ie3.datamodel.models.input.container.GraphicElements;
12+
import edu.ie3.datamodel.models.input.container.JointGridContainer;
13+
import edu.ie3.datamodel.models.input.container.RawGridElements;
14+
import edu.ie3.datamodel.models.input.container.SystemParticipants;
15+
16+
/** Convenience class for cases where all used data comes from CSV sources */
17+
public class CsvJointGridContainerSource {
18+
private CsvJointGridContainerSource() {}
19+
20+
public static JointGridContainer read(String gridName, String csvSep, String directoryPath)
21+
throws SourceException {
22+
23+
/* Parameterization */
24+
25+
FileNamingStrategy namingStrategy = new FileNamingStrategy(); // Default naming strategy
26+
27+
/* Instantiating sources */
28+
TypeSource typeSource = new CsvTypeSource(csvSep, directoryPath, namingStrategy);
29+
RawGridSource rawGridSource =
30+
new CsvRawGridSource(csvSep, directoryPath, namingStrategy, typeSource);
31+
ThermalSource thermalSource =
32+
new CsvThermalSource(csvSep, directoryPath, namingStrategy, typeSource);
33+
SystemParticipantSource systemParticipantSource =
34+
new CsvSystemParticipantSource(
35+
csvSep, directoryPath, namingStrategy, typeSource, thermalSource, rawGridSource);
36+
GraphicSource graphicsSource =
37+
new CsvGraphicSource(csvSep, directoryPath, namingStrategy, typeSource, rawGridSource);
38+
39+
/* Loading models */
40+
RawGridElements rawGridElements =
41+
rawGridSource
42+
.getGridData()
43+
.orElseThrow(() -> new SourceException("Error during reading of raw grid data."));
44+
SystemParticipants systemParticipants =
45+
systemParticipantSource
46+
.getSystemParticipants()
47+
.orElseThrow(
48+
() -> new SourceException("Error during reading of system participant data."));
49+
GraphicElements graphicElements =
50+
graphicsSource
51+
.getGraphicElements()
52+
.orElseThrow(() -> new SourceException("Error during reading of graphic elements."));
53+
54+
return new JointGridContainer(gridName, rawGridElements, systemParticipants, graphicElements);
55+
}
56+
}

src/test/groovy/edu/ie3/datamodel/io/connectors/CsvFileConnectorTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ class CsvFileConnectorTest extends Specification {
6262
}
6363

6464
def cleanupSpec() {
65-
FileIOUtils.deleteRecursively(tmpDirectory)
6665
cfc.shutdown()
66+
FileIOUtils.deleteRecursively(tmpDirectory)
6767
}
6868

6969
def "The csv file connector is able to provide correct paths to time series files"() {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* © 2022. TU Dortmund University,
3+
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
4+
* Research group Distribution grid planning and operation
5+
*/
6+
package edu.ie3.datamodel.io.csv
7+
8+
import edu.ie3.datamodel.io.sink.CsvFileSink
9+
import edu.ie3.datamodel.io.source.csv.CsvJointGridContainerSource
10+
import edu.ie3.datamodel.io.source.csv.CsvTestDataMeta
11+
import edu.ie3.util.io.FileIOUtils
12+
import spock.lang.Shared
13+
import spock.lang.Specification
14+
15+
import java.nio.file.Files
16+
import java.nio.file.Path
17+
18+
/**
19+
* Testing whether PSDM CSV grids are equal when serialized and deserialized sequentially.
20+
* Grid data should <strong>not</strong> change when written out or parsed.
21+
*/
22+
class GridIoIT extends Specification implements CsvTestDataMeta {
23+
24+
@Shared
25+
Path tempDirectory
26+
27+
@Shared
28+
CsvFileSink sink
29+
30+
def setupSpec() {
31+
tempDirectory = Files.createTempDirectory("GridIoIT")
32+
sink = new CsvFileSink(tempDirectory.toAbsolutePath().toString())
33+
}
34+
35+
def cleanupSpec() {
36+
sink.shutdown()
37+
FileIOUtils.deleteRecursively(tempDirectory)
38+
}
39+
40+
def "Input JointGridContainer equals Output JointGridContainer."() {
41+
42+
given:
43+
// create joint grid container
44+
def gridName = "vn_simona"
45+
def separator = ","
46+
def firstGridContainer = CsvJointGridContainerSource.read(gridName, separator, jointGridFolderPath)
47+
48+
when:
49+
// write files from joint grid container in output directory
50+
sink.persistJointGrid(firstGridContainer)
51+
52+
// create second grid container from output folder
53+
def secondGridContainer = CsvJointGridContainerSource.read(gridName, separator, tempDirectory.toAbsolutePath().toString())
54+
55+
then:
56+
// compare input and output joint grid container
57+
firstGridContainer == secondGridContainer
58+
59+
}
60+
}

src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTestDataMeta.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ trait CsvTestDataMeta {
2424
static String coordinatesCosmoFolderPath = getResourceAbs("_coordinates/cosmo")
2525
static String weatherCosmoFolderPath = getResourceAbs("_weather/cosmo")
2626
static String weatherIconFolderPath = getResourceAbs("_weather/icon")
27+
static String jointGridFolderPath = getResourceAbs("_joint_grid")
2728

2829
static String gridDefaultFolderPath = getResourceAbs("_grid/default")
2930
static String gridMalformedFolderPath = getResourceAbs("_grid/malformed")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"uuid","cost_controlled","feed_in_tariff","id","market_reaction","node","operates_from","operates_until","operator","q_characteristics","type"
2+
a3b7576b-cac7-4350-90ff-06316cdca192,true,51.0,BM_Test,true,f5839ade-5968-4879-a824-90b5fb3552cd,,,,cosPhiFixed:{(0.00,1.00)},2fdca5f1-c11b-4169-a695-4c98f0e0a84a
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"uuid","active_power_gradient","capex","cos_phi_rated","eta_conv","id","opex","s_rated"
2+
2fdca5f1-c11b-4169-a695-4c98f0e0a84a,5.0,0.0,1.0,1.0,typ_01,0.05,190.0
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
"uuid","cos_phi_rated","id","node","operates_from","operates_until","operator","q_characteristics","chargingpoints","type","location_type","v2gSupport"
2+
06a14909-366e-4e94-a593-1016e1455b30,0.9,test_evcs_1,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,cosPhiFixed:{(0.00,1.0)},4,ChargingStationType1,HOME,false
3+
104acdaa-5dc5-4197-aed2-2fddb3c4f237,0.9,test_evcs_2,ed4697fd-016c-40c2-a66b-e793878dadea,,,,cosPhiFixed:{(0.00,1.0)},4,ChargingStationType1,HOME,false
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"uuid","cos_phi_rated","id","node","operates_from","operates_until","operator","q_characteristics","s_rated"
2+
9abe950d-362e-4efe-b686-500f84d8f368,0.9,test_feed_in,5f1c776c-6935-40f7-ba9e-60646e08992b,,,,cosPhiFixed:{(0.00,0.95)},200.0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"uuid","p","q","time"
2+
4df88950-dc48-4905-b41f-63d0757eae03,3.999998968803,0.0,2011-01-01T00:00:00Z

0 commit comments

Comments
 (0)