Skip to content

Commit 80d4660

Browse files
Merge pull request #1132 from ie3-institute/df/#1131-psdm-update-for-tap-water-demand
Introduce a storage model for domestic hot water
2 parents 557ee8c + ca892b6 commit 80d4660

File tree

40 files changed

+1259
-282
lines changed

40 files changed

+1259
-282
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
- Added `BdewLoadProfileTimeSeries` [#1230](https://github.com/ie3-institute/PowerSystemDataModel/issues/1230)
1717
- Added `RandomLoadProfileTimeSeries` [#1232](https://github.com/ie3-institute/PowerSystemDataModel/issues/1232)
1818
- Attribute `pThermalRated` for `ThermalStorage`s [#679](https://github.com/ie3-institute/PowerSystemDataModel/issues/679)
19-
- Attributes `housingType` and `numberInhabitants` for `ThermalHouse`s [#1253](https://github.com/ie3-institute/PowerSystemDataModel/issues/1253)
19+
- Attributes `housingType` and `numberInhabitants` for `ThermalHouse`s [#1253](https://github.com/ie3-institute/PowerSystemDataModel/issues/1253)
20+
- Added domestic hot water storage model [#1257](https://github.com/ie3-institute/PowerSystemDataModel/issues/1257)
2021

2122
### Fixed
2223
- Removing opened `SwitchInput` during connectivity check [#1221](https://github.com/ie3-institute/PowerSystemDataModel/issues/1221)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
(domestichotwaterstorage-model)=
2+
3+
# Domestic Hot Water Storage
4+
5+
Model of a domestic hot water storage using a fluid to store thermal energy.
6+
7+
## Attributes, Units and Remarks
8+
9+
```{eval-rst}
10+
.. list-table::
11+
:widths: 33 33 33
12+
:header-rows: 1
13+
14+
15+
* - Attribute
16+
- Unit
17+
- Remarks
18+
19+
* - uuid
20+
- --
21+
-
22+
23+
* - id
24+
- --
25+
- Human readable identifier
26+
27+
* - operator
28+
- --
29+
-
30+
31+
* - operationTime
32+
- --
33+
- Timely restriction of operation
34+
35+
* - thermalBus
36+
- --
37+
- Connection point to the thermal system
38+
39+
* - storageVolumeLvl
40+
- m³
41+
- Overall available storage volume
42+
43+
* - inletTemp
44+
- °C
45+
- Temperature of the inlet
46+
47+
* - returnTemp
48+
- °C
49+
- Temperature of the outlet
50+
51+
* - c
52+
- kWh / (K :math:`\cdot` m³)
53+
- Specific heat capacity of the storage medium
54+
55+
* - pThermalMax
56+
- kW
57+
- Maximum permissible thermal power of the storage
58+
59+
```
60+
61+
## Caveats
62+
63+
Nothing - at least not known.
64+
If you found something, please contact us!

docs/readthedocs/models/models.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ maxdepth: 1
129129
input/thermal/thermalbus
130130
input/thermal/thermalhouse
131131
input/thermal/cylindricalstorage
132+
input/thermal/domestichotwaterstorage
132133
```
133134

134135
### Participant Related Models
@@ -209,6 +210,7 @@ result/participant/thermalstorage
209210
result/participant/thermalunit
210211
result/participant/thermalhouse
211212
result/participant/cylindricalstorage
213+
result/participant/domestichotwaterstorage
212214
result/participant/systemparticipant
213215
result/participant/flexoption
214216
result/participant/em
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
(domestichotwaterstorage-result)=
2+
3+
# Domestic Hot Water Storage
4+
5+
Result of a domestic hot water storage using a fluid to store thermal energy.
6+
7+
## Attributes, Units and Remarks
8+
9+
```{eval-rst}
10+
.. list-table::
11+
:widths: 33 33 33
12+
:header-rows: 1
13+
14+
15+
* - Attribute
16+
- Unit
17+
- Remarks
18+
19+
* - time
20+
- --
21+
- date and time for the produced result
22+
23+
* - inputModel
24+
- --
25+
- uuid for the associated input model
26+
27+
* - energy
28+
- MWh
29+
-
30+
31+
* - qDot
32+
- MW
33+
- heat demand of the sink
34+
35+
* - fillLevel
36+
- --
37+
-
38+
39+
```
40+
41+
## Caveats
42+
43+
Nothing - at least not known.
44+
If you found something, please contact us!

docs/uml/main/EntitySourceClassDiagram.puml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class ResultEntitySource {
130130
+ Set<EvResult> getEvResults() throws SourceException
131131
+ Set<HpResult> getHpResults() throws SourceException
132132
+ Set<CylindricalStorageResult> getCylindricalStorageResult() throws SourceException
133+
+ Set<DomesticHotStorageResult> getDomesticHotWaterStorageResult() throws SourceException
133134
+ Set<ThermalHouseResult> getThermalHouseResults() throws SourceException
134135
+ Set<EmResult> getEmResults() throws SourceException
135136
+ Set<CongestionResult> getCongestionResults() throws SourceException
@@ -179,6 +180,7 @@ class ThermalSource {
179180
- TypeSource typeSource
180181
- ThermalBusInputFactory thermalBusInputFactory
181182
- CylindricalStorageInputFactory cylindricalStorageInputFactory
183+
- DomesticHotWaterStorageInputFactory domesticHotWaterStorageInputFactory
182184
- ThermalHouseInputFactory thermalHouseInputFactory
183185
+ ThermalSource(TypeSource, DataSource)
184186
+ Map<UUID, ThermalBusInput> getThermalBuses() throws SourceException
@@ -187,8 +189,10 @@ class ThermalSource {
187189
+ Map<UUID, ThermalStorageInput> getThermalStorages(Map<UUID, OperatorInput>, Map<UUID, ThermalBusInput>) throws SourceException
188190
+ Map<UUID, ThermalHouseInput> getThermalHouses() throws SourceException
189191
+ Map<UUID, ThermalHouseInput> getThermalHouses(Map<UUID, OperatorInput>, Map<UUID, ThermalBusInput>) throws SourceException
190-
+ Set<CylindricalStorageInput> getCylindricStorages() throws SourceException
191-
+ Set<CylindricalStorageInput> getCylindricStorages(Map<UUID, OperatorInput>, Map<UUID, ThermalBusInput>) throws SourceException
192+
+ Set<CylindricalStorageInput> getCylindricalStorages() throws SourceException
193+
+ Set<CylindricalStorageInput> getCylindricalStorages(Map<UUID, OperatorInput>, Map<UUID, ThermalBusInput>) throws SourceException
194+
+ Set<DomesticHotWaterStorageInput> getDomesticHotWaterStorages() throws SourceException
195+
+ Set<DomesticHotWaterStorageInput> getDomesticHotWaterStorages(Map<UUID, OperatorInput>, Map<UUID, ThermalBusInput>) throws SourceException
192196
}
193197

194198
abstract class TimeSeriesMappingSource {

docs/uml/main/OutputDatamodelConcept.puml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,16 @@ package models {
130130
}
131131
ThermalUnitResult <|-- ThermalStorageResult
132132

133-
class CylindricalStorageResult {
133+
Abstract class AbstractThermalStorageResult {
134134
- fillLevel: ComparableQuantity<Dimensionless> [%]
135135
}
136-
ThermalStorageResult <|-- CylindricalStorageResult
136+
ThermalStorageResult <|-- AbstractThermalStorageResult
137+
138+
class CylindricalStorageResult {}
139+
AbstractThermalStorageResult <|-- CylindricalStorageResult
140+
141+
class DomesticHotWaterStorageResult {}
142+
AbstractThermalStorageResult <|-- DomesticHotWaterStorageResult
137143
}
138144
}
139145
}

docs/uml/main/input/DefaultInputDirectoryHierarchy.puml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ package <gridname>(.tar.gz) {
99
label "line_input.csv\n//measurement_unit_input.csv//\nnode_input.csv\n//switch_input.csv//\ntransformer_2_w_input.csv\n//transformer_3_w_input.csv//"
1010
}
1111
package "//thermal//" as th {
12-
label "//cylindrical_storage_input.csv//\n//thermal_bus_input.csv//\n//thermal_house_input.csv//"
12+
label "//cylindrical_storage_input.csv//\n//domestic_hot_water_storage_input.csv//\n//thermal_bus_input.csv//\n//thermal_house_input.csv//"
1313
}
1414
package participants {
1515
label "//bm_input.csv//\n//chp_input.csv//\n//ev_input.csv//\n//evcs_input.csv//\n//fixed_feed_in_input.csv//\n//hp_input.csv//\n//load_input.csv//\n//pv_input.csv//\n//storage_input.csv//\n//wec_input.csv//"

docs/uml/main/input/DefaultResultDirectoryHierarchy.puml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package <gridname>(.tar.gz) {
66
label "//line_result.csv//\n//node_result.csv//\n//switch_result.csv//\n//transformer_2_w_result.csv//\n//transformer_3_w_result.csv//"
77
}
88
package "//thermal//" {
9-
label "//cylindrical_storage_result.csv//\n//thermal_bus_result.csv//\n//thermal_house_result.csv//"
9+
label "//cylindrical_storage_result.csv//\n//domestic_hot_water_storage_result.csv//\n//thermal_bus_result.csv//\n//thermal_house_result.csv//"
1010
}
1111
package "//participants//" {
1212
label "//bm_result.csv//\n//chp_result.csv//\n//ev_result.csv//\n//evcs_result.csv//\n//fixed_feed_in_result.csv//\n//hp_result.csv//\n//load_result.csv//\n//pv_result.csv//\n//storage_result.csv//\n//wec_result.csv//"

docs/uml/main/input/ThermalDatamodelConcept.puml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,26 @@ package models {
115115
abstract class ThermalStorageInput
116116
ThermalStorageInput --|> ThermalUnitInput
117117

118+
abstract class AbstractStorageInput
119+
AbstractStorageInput --|> ThermalStorageInput
120+
118121
class CylindricalStorageInput {
119122
- storageVolumeLvl: ComparableQuantity<Volume> [m³]
120123
- inletTemp: ComparableQuantity<Temperature> [°C]
121124
- returnTemp: ComparableQuantity<Temperature> [°C]
122125
- c: ComparableQuantity<SpecificHeatCapacity> [kWh/(K*m³)]
123126
- pThermalMax: ComparableQuantity<Power> [kW]
124127
}
125-
CylindricalStorageInput --|> ThermalStorageInput
128+
CylindricalStorageInput --|> AbstractStorageInput
129+
130+
class DomesticHotWaterStorageInput {
131+
- storageVolumeLvl: ComparableQuantity<Volume> [m³]
132+
- inletTemp: ComparableQuantity<Temperature> [°C]
133+
- returnTemp: ComparableQuantity<Temperature> [°C]
134+
- c: ComparableQuantity<SpecificHeatCapacity> [kWh/(K*m³)]
135+
- pThermalMax: ComparableQuantity<Power> [kW]
136+
}
137+
DomesticHotWaterStorageInput --|> AbstractStorageInput
126138
}
127139
}
128140
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* © 2024. 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.factory.input;
7+
8+
import edu.ie3.datamodel.models.StandardUnits;
9+
import edu.ie3.datamodel.models.input.AssetInput;
10+
import edu.ie3.util.quantities.interfaces.SpecificHeatCapacity;
11+
import javax.measure.quantity.Power;
12+
import javax.measure.quantity.Temperature;
13+
import javax.measure.quantity.Volume;
14+
import tech.units.indriya.ComparableQuantity;
15+
16+
public abstract class AbstractThermalStorageInputFactory<T extends AssetInput>
17+
extends AssetInputEntityFactory<T, ThermalUnitInputEntityData> {
18+
19+
private static final String STORAGE_VOLUME_LVL = "storageVolumeLvl";
20+
private static final String INLET_TEMP = "inletTemp";
21+
private static final String RETURN_TEMP = "returnTemp";
22+
private static final String C = "c";
23+
private static final String P_THERMAL_MAX = "pThermalMax";
24+
25+
public AbstractThermalStorageInputFactory(Class<T> clazz) {
26+
super(clazz);
27+
}
28+
29+
@Override
30+
protected String[] getAdditionalFields() {
31+
return new String[] {STORAGE_VOLUME_LVL, INLET_TEMP, RETURN_TEMP, C, P_THERMAL_MAX};
32+
}
33+
34+
protected ComparableQuantity<Volume> getStorageVolumeLvl(ThermalUnitInputEntityData data) {
35+
return data.getQuantity(STORAGE_VOLUME_LVL, StandardUnits.VOLUME);
36+
}
37+
38+
protected ComparableQuantity<Temperature> getInletTemp(ThermalUnitInputEntityData data) {
39+
return data.getQuantity(INLET_TEMP, StandardUnits.TEMPERATURE);
40+
}
41+
42+
protected ComparableQuantity<Temperature> getReturnTemp(ThermalUnitInputEntityData data) {
43+
return data.getQuantity(RETURN_TEMP, StandardUnits.TEMPERATURE);
44+
}
45+
46+
protected ComparableQuantity<SpecificHeatCapacity> getSpecificHeatCapacity(
47+
ThermalUnitInputEntityData data) {
48+
return data.getQuantity(C, StandardUnits.SPECIFIC_HEAT_CAPACITY);
49+
}
50+
51+
protected ComparableQuantity<Power> getMaxThermalPower(ThermalUnitInputEntityData data) {
52+
return data.getQuantity(P_THERMAL_MAX, StandardUnits.ACTIVE_POWER_IN);
53+
}
54+
}

0 commit comments

Comments
 (0)