Skip to content

Commit

Permalink
Merge pull request #606 from ie3-institute/to/#601-temperature-depend…
Browse files Browse the repository at this point in the history
…ant-profile

Add temperature dependant load profile
  • Loading branch information
t-ober authored Jun 3, 2022
2 parents d07118c + 99f0f8a commit 006baa4
Show file tree
Hide file tree
Showing 25 changed files with 391 additions and 247 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- SQL time series have a different structure than CSV counterparts [#545](https://github.com/ie3-institute/PowerSystemDataModel/issues/545)
- Graph with impedance weighted edges including facilities to create it [#440](https://github.com/ie3-institute/PowerSystemDataModel/issues/440)
- `TimeSeriesTypeSource` providing a source for the mapping of time series uuids to column schemes (previously provided by `TimeSeriesMappingSource`) [#515](https://github.com/ie3-institute/PowerSystemDataModel/issues/515)
- `TemperatureDependantLoadProfile`s for depiction of profile behavior of night storage heating and heat pumps [#601](https://github.com/ie3-institute/PowerSystemDataModel/issues/601)

### Fixed
- Reduced code smells [#492](https://github.com/ie3-institute/PowerSystemDataModel/issues/492)
Expand Down Expand Up @@ -48,6 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `"datum"` to `"time"`
- Force user to provide time stamp pattern to `CouchbaseWeatherSource` to ensure harmonized querying
- BREAKING: Updating PowerSystemUtils dependency to 2.0-SNAPSHOT [#595](https://github.com/ie3-institute/PowerSystemDataModel/issues/595)
- BREAKING: Generified the `LoadInput` attribute `standardLoadProfile` to `loadProfile` as it should also address the newly added `TemperatureDependantLoadProfile`s [#601](https://github.com/ie3-institute/PowerSystemDataModel/issues/601)

## [2.1.0] - 2022-01-05

Expand Down
20 changes: 13 additions & 7 deletions docs/readthedocs/models/input/participant/load.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Attributes, Units and Remarks
+---------------------+---------+--------------------------------------------------------------------------------------+
| qCharacteristics | -- | :ref:`Reactive power characteristic<participant_general_q_characteristic>` to follow |
+---------------------+---------+--------------------------------------------------------------------------------------+
| standardLoadProfile | -- | :ref:`Standard load profile<load_slp>` as model behaviour |
| loadProfile | -- | :ref:`Load profile<load_lp>` as model behaviour |
+---------------------+---------+--------------------------------------------------------------------------------------+
| dsm | -- | Whether the load is able to follow demand side management signals |
+---------------------+---------+--------------------------------------------------------------------------------------+
Expand All @@ -38,17 +38,23 @@ Caveats
Nothing - at least not known.
If you found something, please contact us!

.. _load_slp:
.. _load_lp:

Standard Load Profiles
Load Profiles
^^^^^^^^^^^^^^^^^^^^^^
The :code:`StandardLoadProfile` is an interface, that forces it's implementing classes to have a :code:`String` *key*
and being able to parse a :code:`String` to an :code:`StandardLoadProfile`.
Its only purpose is to give note, which standard load profile has to be used by the simulation.
The :code:`LoadProfile` is an interface, that forces it's implementing classes to have a :code:`String` *key*
and being able to parse a :code:`String` to a :code:`LoadProfile`.
Its only purpose is to give note, which load profile has to be used by the simulation.
The actual profile has to be provided by the simulation itself.
If no matching standard load profile is known, :code:`StandardLoadProfile#NO_STANDARD_LOAD_PROFILE` can be used.
If no matching standard load profile is known, :code:`LoadProfile#NO_LOAD_PROFILE` can be used.

To assist the user in marking the desired load profile, the enum :code:`BdewLoadProfile` provides a collection of
commonly known German standard electricity load profiles, defined by the bdew (Bundesverband der Energie- und
Wasserwirtschaft; engl. Federal Association of the Energy and Water Industry). For more details see
`the corresponding website (German only) <https://www.bdew.de/energie/standardlastprofile-strom/>`_.

Furthermore there are :code:`TemperatureDependantLoadProfiles` which can be used to note usage of load profiles for night heating storages or heat pumps for example.
The profiles rely on the VDN description for interruptable loads.
For more details see `here (German only) <https://www.bdew.de/media/documents/LPuVe-Praxisleitfaden.pdf/>`_.
:code:`NbwTemperatureDependantLoadProfiles` provides sample temperature dependant load profiles that can be used.
The `NbwTemperatureDependantLoadProfiles` consists of load profiles "ep1" for heat pumps and "ez2" for night storage heating.
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
import edu.ie3.datamodel.exceptions.ParsingException;
import edu.ie3.datamodel.io.factory.input.NodeAssetInputEntityData;
import edu.ie3.datamodel.models.OperationTime;
import edu.ie3.datamodel.models.StandardLoadProfile;
import edu.ie3.datamodel.models.StandardUnits;
import edu.ie3.datamodel.models.input.NodeInput;
import edu.ie3.datamodel.models.input.OperatorInput;
import edu.ie3.datamodel.models.input.system.LoadInput;
import edu.ie3.datamodel.models.input.system.characteristic.ReactivePowerCharacteristic;
import edu.ie3.datamodel.models.profile.LoadProfile;
import javax.measure.quantity.Energy;
import javax.measure.quantity.Power;
import org.slf4j.Logger;
Expand All @@ -24,7 +24,7 @@ public class LoadInputFactory
extends SystemParticipantInputEntityFactory<LoadInput, NodeAssetInputEntityData> {
private static final Logger logger = LoggerFactory.getLogger(LoadInputFactory.class);

private static final String SLP = "standardloadprofile";
private static final String LOAD_PROFILE = "loadprofile";
private static final String DSM = "dsm";
private static final String E_CONS_ANNUAL = "econsannual";
private static final String S_RATED = "srated";
Expand All @@ -36,7 +36,7 @@ public LoadInputFactory() {

@Override
protected String[] getAdditionalFields() {
return new String[] {SLP, DSM, E_CONS_ANNUAL, S_RATED, COS_PHI};
return new String[] {LOAD_PROFILE, DSM, E_CONS_ANNUAL, S_RATED, COS_PHI};
}

@Override
Expand All @@ -48,15 +48,15 @@ protected LoadInput buildModel(
ReactivePowerCharacteristic qCharacteristics,
OperatorInput operator,
OperationTime operationTime) {
StandardLoadProfile slp;
LoadProfile loadProfile;
try {
slp = StandardLoadProfile.parse(data.getField(SLP));
loadProfile = LoadProfile.parse(data.getField(LOAD_PROFILE));
} catch (ParsingException e) {
logger.warn(
"Cannot parse the standard load profile \"{}\" of load \"{}\". Assign no load profile instead.",
data.getField(SLP),
data.getField(LOAD_PROFILE),
id);
slp = StandardLoadProfile.DefaultLoadProfiles.NO_STANDARD_LOAD_PROFILE;
loadProfile = LoadProfile.DefaultLoadProfiles.NO_LOAD_PROFILE;
}
final boolean dsm = data.getBoolean(DSM);
final ComparableQuantity<Energy> eConsAnnual =
Expand All @@ -71,7 +71,7 @@ protected LoadInput buildModel(
operationTime,
node,
qCharacteristics,
slp,
loadProfile,
dsm,
eConsAnnual,
sRated,
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/edu/ie3/datamodel/io/processor/Processor.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
import edu.ie3.datamodel.io.factory.input.NodeInputFactory;
import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor;
import edu.ie3.datamodel.models.OperationTime;
import edu.ie3.datamodel.models.StandardLoadProfile;
import edu.ie3.datamodel.models.StandardUnits;
import edu.ie3.datamodel.models.UniqueEntity;
import edu.ie3.datamodel.models.input.OperatorInput;
import edu.ie3.datamodel.models.input.connector.SwitchInput;
import edu.ie3.datamodel.models.input.system.characteristic.CharacteristicInput;
import edu.ie3.datamodel.models.profile.LoadProfile;
import edu.ie3.datamodel.models.voltagelevels.VoltageLevel;
import java.beans.Introspector;
import java.lang.reflect.InvocationTargetException;
Expand Down Expand Up @@ -241,8 +241,7 @@ protected String processMethodResult(Object methodReturnObject, Method method, S
processVoltageLevel((VoltageLevel) methodReturnObject, fieldName));
case "Point", "LineString" -> resultStringBuilder.append(
geoJsonWriter.write((Geometry) methodReturnObject));
case "StandardLoadProfile" -> resultStringBuilder.append(
((StandardLoadProfile) methodReturnObject).getKey());
case "LoadProfile" -> resultStringBuilder.append(((LoadProfile) methodReturnObject).getKey());
case "AssetTypeInput",
"BmTypeInput",
"ChpTypeInput",
Expand Down
54 changes: 0 additions & 54 deletions src/main/java/edu/ie3/datamodel/models/StandardLoadProfile.java

This file was deleted.

Loading

0 comments on commit 006baa4

Please sign in to comment.