diff --git a/CHANGELOG.md b/CHANGELOG.md index ffc5d60df..9e4e4599b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,12 +22,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - added coordinate distance sort method to GridAndGeoUtils - BREAKING: Harmonized field naming for time information - BREAKING: Properly applying snake case to result file names -- BREAKING: Change in dimension of `Irradiation` from Energy/Area to Power/Area led to adaptions in the `StandardUnits`. `StandardUnits.IRRADIATION` is now kW/m² instead of kW**h**/m² ### Fixed - InfluxDbConnector now keeps session instead of creating a new one each call (resolves [#247](https://github.com/ie3-institute/PowerSystemDataModel/issues/247) and [#248](https://github.com/ie3-institute/PowerSystemDataModel/issues/248)) +- BREAKING: fix invalid application of solar irradiance / irradiation ([#266](https://github.com/ie3-institute/PowerSystemDataModel/issues/266)) +- BREAKING: deleted `IrradiationValue` as it is invalid and no longer required ## [1.1.0] - 2020-09-15 diff --git a/docs/readthedocs/models/models.rst b/docs/readthedocs/models/models.rst index e8234260b..7b6fef0bb 100644 --- a/docs/readthedocs/models/models.rst +++ b/docs/readthedocs/models/models.rst @@ -189,26 +189,26 @@ Repetitive Time Series To be as flexible, as possible, the actual content of the time series is given as children of the :code:`Value` class. The following different values are available: -+--------------------------+------------------------------------------------------------------+ -| Value Class | Purpose | -+==========================+==================================================================+ -| :code:`PValue` | Electrical active power | -+--------------------------+------------------------------------------------------------------+ -| :code:`SValue` | Electrical active and reactive power | -+--------------------------+------------------------------------------------------------------+ -| :code:`HeatAndPValue` | | Combination of thermal power (e.g. in kW) | -| | | and electrical active power (e.g. in kW) | -+--------------------------+------------------------------------------------------------------+ -| :code:`HeatAndSValue` | | Combination of thermal power (e.g. in kW) | -| | | and electrical active and reactive power (e.g. in kW and kVAr) | -+--------------------------+------------------------------------------------------------------+ -| :code:`EnergyPriceValue` | Wholesale market price (e.g. in € / MWh) | -+--------------------------+------------------------------------------------------------------+ -| :code:`IrradiationValue` | Combination of diffuse and direct solar irradiation | -+--------------------------+------------------------------------------------------------------+ -| :code:`TemperatureValue` | Temperature information | -+--------------------------+------------------------------------------------------------------+ -| :code:`WindValue` | Combination of wind direction and wind velocity | -+--------------------------+------------------------------------------------------------------+ -| :code:`WeatherValue` | Combination of irradiation, temperature and wind information | -+--------------------------+------------------------------------------------------------------+ ++-------------------------------+------------------------------------------------------------------+ +| Value Class | Purpose | ++===============================+==================================================================+ +| :code:`PValue` | Electrical active power | ++-------------------------------+------------------------------------------------------------------+ +| :code:`SValue` | Electrical active and reactive power | ++-------------------------------+------------------------------------------------------------------+ +| :code:`HeatAndPValue` | | Combination of thermal power (e.g. in kW) | +| | | and electrical active power (e.g. in kW) | ++-------------------------------+------------------------------------------------------------------+ +| :code:`HeatAndSValue` | | Combination of thermal power (e.g. in kW) | +| | | and electrical active and reactive power (e.g. in kW and kVAr) | ++-------------------------------+------------------------------------------------------------------+ +| :code:`EnergyPriceValue` | Wholesale market price (e.g. in € / MWh) | ++-------------------------------+------------------------------------------------------------------+ +| :code:`SolarIrradianceValue` | Combination of diffuse and direct solar irradiance | ++-------------------------------+------------------------------------------------------------------+ +| :code:`TemperatureValue` | Temperature information | ++-------------------------------+------------------------------------------------------------------+ +| :code:`WindValue` | Combination of wind direction and wind velocity | ++-------------------------------+------------------------------------------------------------------+ +| :code:`WeatherValue` | Combination of irradiance, temperature and wind information | ++-------------------------------+------------------------------------------------------------------+ diff --git a/docs/uml/main/TimeSeriesDatamodelConcept.puml b/docs/uml/main/TimeSeriesDatamodelConcept.puml index 00dbd246a..370f3b2e8 100644 --- a/docs/uml/main/TimeSeriesDatamodelConcept.puml +++ b/docs/uml/main/TimeSeriesDatamodelConcept.puml @@ -67,11 +67,11 @@ package models { } HeatAndSValue --|> SValue - class IrradiationValue { - - directIrradiation: ComparableQuantity [kWh/m²] - - diffuseIrradiation: ComparableQuantity [kWh/m²] + class SolarIrradianceValue { + - directIrradiance: ComparableQuantity [W/m²] + - diffuseIrradiance: ComparableQuantity [W/m²] } - IrradiationValue ..|> Value + SolarIrradianceValue ..|> Value class TemperatureValue { - temperature: ComparableQuantity [°C] @@ -86,12 +86,12 @@ package models { class WeatherValue { - coordinate: Point - - irradiation: IrradiationValue + - solarIrradiance: SolarIrradianceValue - temperature: TemperatureValue - wind: WindValue } WeatherValue ..|> Value - WeatherValue *-- IrradiationValue + WeatherValue *-- SolarIrradianceValue WeatherValue *-- TemperatureValue WeatherValue *-- WindValue } diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java index 7217328af..fc82cca37 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactory.java @@ -10,7 +10,7 @@ import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.util.TimeUtil; import edu.ie3.util.quantities.PowerSystemUnits; -import edu.ie3.util.quantities.interfaces.Irradiation; +import edu.ie3.util.quantities.interfaces.Irradiance; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.*; @@ -31,8 +31,8 @@ public class IconTimeBasedWeatherValueFactory extends TimeBasedWeatherValueFacto /* Redefine the column names to meet the icon specifications */ private static final String COORDINATE = "coordinateId"; private static final String TIME = "datum"; - private static final String DIFFUSE_IRRADIATION = "aswdifdS"; - private static final String DIRECT_IRRADIATION = "aswdirS"; + private static final String DIFFUSE_IRRADIANCE = "aswdifdS"; + private static final String DIRECT_IRRADIANCE = "aswdirS"; private static final String TEMPERATURE = "t2m"; private static final String WIND_VELOCITY_U = "u131m"; private static final String WIND_VELOCITY_V = "v131m"; @@ -64,8 +64,8 @@ protected List> getFields(TimeBasedWeatherValueData data) { Set minConstructorParams = newSet( TIME, - DIFFUSE_IRRADIATION, - DIRECT_IRRADIATION, + DIFFUSE_IRRADIANCE, + DIRECT_IRRADIANCE, TEMPERATURE, WIND_VELOCITY_U, WIND_VELOCITY_V); @@ -74,9 +74,9 @@ protected List> getFields(TimeBasedWeatherValueData data) { newSet( "albRad", "asobS", - DIFFUSE_IRRADIATION, + DIFFUSE_IRRADIANCE, "aswdifuS", - DIRECT_IRRADIATION, + DIRECT_IRRADIANCE, TEMPERATURE, "tG", "u10m", @@ -110,12 +110,10 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data Point coordinate = data.getCoordinate(); java.util.UUID uuid = data.containsKey(UUID) ? data.getUUID(UUID) : java.util.UUID.randomUUID(); ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME)); - ComparableQuantity directIrradiation = - data.getQuantity(DIRECT_IRRADIATION, PowerSystemUnits.WATT_PER_SQUAREMETRE) - .to(StandardUnits.IRRADIATION); - ComparableQuantity diffuseIrradiation = - data.getQuantity(DIFFUSE_IRRADIATION, PowerSystemUnits.WATT_PER_SQUAREMETRE) - .to(StandardUnits.IRRADIATION); + ComparableQuantity directIrradiance = + data.getQuantity(DIRECT_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); + ComparableQuantity diffuseIrradiance = + data.getQuantity(DIFFUSE_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); ComparableQuantity temperature = data.getQuantity(TEMPERATURE, Units.KELVIN).to(StandardUnits.TEMPERATURE); ComparableQuantity windDirection = getWindDirection(data); @@ -123,8 +121,8 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data WeatherValue weatherValue = new WeatherValue( coordinate, - directIrradiation, - diffuseIrradiation, + directIrradiance, + diffuseIrradiance, temperature, windDirection, windVelocity); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactory.java index 3c991dfe9..99d100fa7 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactory.java @@ -11,7 +11,8 @@ import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue; import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.util.TimeUtil; -import edu.ie3.util.quantities.interfaces.Irradiation; +import edu.ie3.util.quantities.PowerSystemUnits; +import edu.ie3.util.quantities.interfaces.Irradiance; import java.time.ZonedDateTime; import java.util.Collections; import java.util.List; @@ -28,6 +29,11 @@ */ public class PsdmTimeBasedWeatherValueFactory extends TimeBasedWeatherValueFactory { private static final String COORDINATE = "coordinate"; + private static final String DIFFUSE_IRRADIANCE = "diffuseirradiation"; + private static final String DIRECT_IRRADIANCE = "directirradiation"; + private static final String TEMPERATURE = "temperature"; + private static final String WIND_DIRECTION = "winddirection"; + private static final String WIND_VELOCITY = "windvelocity"; public PsdmTimeBasedWeatherValueFactory(TimeUtil timeUtil) { super(timeUtil); @@ -57,8 +63,8 @@ protected List> getFields(TimeBasedWeatherValueData data) { newSet( UUID, TIME, - DIFFUSE_IRRADIATION, - DIRECT_IRRADIATION, + DIFFUSE_IRRADIANCE, + DIRECT_IRRADIANCE, TEMPERATURE, WIND_DIRECTION, WIND_VELOCITY); @@ -70,10 +76,10 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data Point coordinate = data.getCoordinate(); java.util.UUID uuid = data.getUUID(UUID); ZonedDateTime time = timeUtil.toZonedDateTime(data.getField(TIME)); - ComparableQuantity directIrradiation = - data.getQuantity(DIRECT_IRRADIATION, StandardUnits.IRRADIATION); - ComparableQuantity diffuseIrradiation = - data.getQuantity(DIFFUSE_IRRADIATION, StandardUnits.IRRADIATION); + ComparableQuantity directIrradiance = + data.getQuantity(DIRECT_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); + ComparableQuantity diffuseIrradiance = + data.getQuantity(DIFFUSE_IRRADIANCE, PowerSystemUnits.WATT_PER_SQUAREMETRE); ComparableQuantity temperature = data.getQuantity(TEMPERATURE, StandardUnits.TEMPERATURE); ComparableQuantity windDirection = @@ -83,8 +89,8 @@ protected TimeBasedValue buildModel(TimeBasedWeatherValueData data WeatherValue weatherValue = new WeatherValue( coordinate, - directIrradiation, - diffuseIrradiation, + directIrradiance, + diffuseIrradiance, temperature, windDirection, windVelocity); diff --git a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java index b867bc1d4..0cfc10bd2 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/timeseries/TimeBasedSimpleValueFactory.java @@ -26,12 +26,6 @@ public class TimeBasedSimpleValueFactory private static final String ACTIVE_POWER = "p"; private static final String REACTIVE_POWER = "q"; private static final String HEAT_DEMAND = "heatdemand"; - /* Weather */ - public static final String DIFFUSE_IRRADIATION = "diffuseirradiation"; - public static final String DIRECT_IRRADIATION = "directirradiation"; - public static final String TEMPERATURE = "temperature"; - public static final String WIND_DIRECTION = "winddirection"; - public static final String WIND_VELOCITY = "windvelocity"; private final TimeUtil timeUtil; diff --git a/src/main/java/edu/ie3/datamodel/io/processor/timeseries/FieldSourceToMethod.java b/src/main/java/edu/ie3/datamodel/io/processor/timeseries/FieldSourceToMethod.java index f5f08f742..8fbf42136 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/timeseries/FieldSourceToMethod.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/timeseries/FieldSourceToMethod.java @@ -52,7 +52,7 @@ public enum FieldSource { TIMESERIES, ENTRY, VALUE, - WEATHER_IRRADIATION, + WEATHER_IRRADIANCE, WEATHER_TEMPERATURE, WEATHER_WIND } diff --git a/src/main/java/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessor.java index 9dce6e53e..2450148cd 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessor.java @@ -38,7 +38,7 @@ public class TimeSeriesProcessor< new TimeSeriesProcessorKey( IndividualTimeSeries.class, TimeBasedValue.class, WindValue.class), new TimeSeriesProcessorKey( - IndividualTimeSeries.class, TimeBasedValue.class, IrradiationValue.class), + IndividualTimeSeries.class, TimeBasedValue.class, SolarIrradianceValue.class), new TimeSeriesProcessorKey( IndividualTimeSeries.class, TimeBasedValue.class, WeatherValue.class), new TimeSeriesProcessorKey( @@ -134,20 +134,21 @@ private SortedMap buildFieldToSource( Stream.concat( Stream.concat( mapFieldNameToGetter( - valueClass, Arrays.asList("irradiation", "temperature", "wind")) + valueClass, + Arrays.asList("solarIrradiance", "temperature", "wind")) .entrySet().stream() .map( entry -> new AbstractMap.SimpleEntry<>( entry.getKey(), new FieldSourceToMethod(VALUE, entry.getValue()))), - mapFieldNameToGetter(IrradiationValue.class).entrySet().stream() + mapFieldNameToGetter(SolarIrradianceValue.class).entrySet().stream() .map( entry -> new AbstractMap.SimpleEntry<>( entry.getKey(), new FieldSourceToMethod( - WEATHER_IRRADIATION, entry.getValue())))), + WEATHER_IRRADIANCE, entry.getValue())))), mapFieldNameToGetter(TemperatureValue.class).entrySet().stream() .map( entry -> @@ -235,8 +236,8 @@ private Map handleEntry(T timeSeries, E entry) { if (entry.getValue() instanceof WeatherValue) { WeatherValue weatherValue = (WeatherValue) entry.getValue(); - Map irradiationFieldToMethod = extractFieldToMethod(WEATHER_IRRADIATION); - valueResult.putAll(processObject(weatherValue.getIrradiation(), irradiationFieldToMethod)); + Map irradianceFieldToMethod = extractFieldToMethod(WEATHER_IRRADIANCE); + valueResult.putAll(processObject(weatherValue.getSolarIrradiance(), irradianceFieldToMethod)); Map temperatureFieldToMethod = extractFieldToMethod(WEATHER_TEMPERATURE); valueResult.putAll(processObject(weatherValue.getTemperature(), temperatureFieldToMethod)); diff --git a/src/main/java/edu/ie3/datamodel/models/StandardUnits.java b/src/main/java/edu/ie3/datamodel/models/StandardUnits.java index 7f79ee54e..23a95e158 100644 --- a/src/main/java/edu/ie3/datamodel/models/StandardUnits.java +++ b/src/main/java/edu/ie3/datamodel/models/StandardUnits.java @@ -94,15 +94,15 @@ public class StandardUnits { public static final Unit ROTOR_AREA = SQUARE_METRE; /** Height of the hub of an wind energy converter in metre */ public static final Unit HUB_HEIGHT = METRE; - /** Price per energy in euro_per_MWhour */ + /** Price per energy in euro per megawatt hour */ public static final Unit ENERGY_PRICE = EURO_PER_MEGAWATTHOUR; /** Orientation of a pv panel with regard to the north-south line in degree_geom */ public static final Unit AZIMUTH = DEGREE_GEOM; /** Elevation of a pv panel with regard to the plane in degree_geom */ public static final Unit SOLAR_HEIGHT = DEGREE_GEOM; - /** Direction of the wind in degree_geom */ + /** Direction of the wind in degree geom */ public static final Unit WIND_DIRECTION = DEGREE_GEOM; - /** Velocity of the wind in metre_per_second */ + /** Velocity of the wind in metre per second */ public static final Unit WIND_VELOCITY = METRE_PER_SECOND; /** Standard unit for the Betz' coefficient curve of wind energy converters in p.U. */ public static final Unit CP_CHARACTERISTIC = PU; @@ -112,14 +112,9 @@ public class StandardUnits { public static final Unit OLM_CHARACTERISTIC = PU; /** Standard unit for reactive power characteristics in p.U. */ public static final Unit Q_CHARACTERISTIC = PU; - /** Solar irradiation on a flat surface as Power per Area in kW/m² */ - public static final Unit IRRADIATION = KILOWATT_PER_SQUAREMETRE; - /** - * Energy per Area, used as an outdated dimension for {@link StandardUnits#IRRADIATION} in kWh/m² - * - * @deprecated Use {@link Irradiation} together with {@link StandardUnits#IRRADIATION} - */ - @Deprecated public static final Unit ENERGY_DENSITY = KILOWATTHOUR_PER_SQUAREMETRE; + /** Solar irradiance on a flat surface as power per area in W/m² */ + public static final Unit SOLAR_IRRADIANCE = WATT_PER_SQUAREMETRE; + /** Capex (capital expenditure) in € */ public static final Unit CAPEX = EURO; /** Length of a line in km */ diff --git a/src/main/java/edu/ie3/datamodel/models/value/IrradiationValue.java b/src/main/java/edu/ie3/datamodel/models/value/IrradiationValue.java deleted file mode 100644 index 32f942060..000000000 --- a/src/main/java/edu/ie3/datamodel/models/value/IrradiationValue.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * © 2020. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation -*/ -package edu.ie3.datamodel.models.value; - -import edu.ie3.datamodel.models.StandardUnits; -import edu.ie3.util.quantities.interfaces.Irradiation; -import java.util.Objects; -import java.util.Optional; -import tech.units.indriya.ComparableQuantity; - -/** Describes an irradiation value as a pair of diffuse and direct radiation */ -public class IrradiationValue implements Value { - /** Direct sun radiation (typically in kWh/m²) */ - private final ComparableQuantity directIrradiation; - /** Diffuse sun radiation (typically in kWh/m²) */ - private final ComparableQuantity diffuseIrradiation; - - /** - * @param directIrradiation Direct sun radiation (typically in kW/m²) - * @param diffuseIrradiation Diffuse sun radiation (typically in kW/m²) - */ - public IrradiationValue( - ComparableQuantity directIrradiation, - ComparableQuantity diffuseIrradiation) { - this.directIrradiation = - directIrradiation == null ? null : directIrradiation.to(StandardUnits.IRRADIATION); - this.diffuseIrradiation = - diffuseIrradiation == null ? null : diffuseIrradiation.to(StandardUnits.IRRADIATION); - } - - public Optional> getDiffuseIrradiation() { - return Optional.ofNullable(diffuseIrradiation); - } - - public Optional> getDirectIrradiation() { - return Optional.ofNullable(directIrradiation); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - IrradiationValue that = (IrradiationValue) o; - return Objects.equals(directIrradiation, that.directIrradiation) - && Objects.equals(diffuseIrradiation, that.diffuseIrradiation); - } - - @Override - public int hashCode() { - return Objects.hash(directIrradiation, diffuseIrradiation); - } - - @Override - public String toString() { - return "IrradiationValue{" - + "directIrradiation=" - + directIrradiation - + ", diffuseIrradiation=" - + diffuseIrradiation - + '}'; - } -} diff --git a/src/main/java/edu/ie3/datamodel/models/value/SolarIrradianceValue.java b/src/main/java/edu/ie3/datamodel/models/value/SolarIrradianceValue.java new file mode 100644 index 000000000..3eb75dba1 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/models/value/SolarIrradianceValue.java @@ -0,0 +1,65 @@ +/* + * © 2020. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.models.value; + +import edu.ie3.datamodel.models.StandardUnits; +import edu.ie3.util.quantities.interfaces.Irradiance; +import java.util.Objects; +import java.util.Optional; +import tech.units.indriya.ComparableQuantity; + +/** Describes an irradiance value as a pair of diffuse and direct irradiance */ +public class SolarIrradianceValue implements Value { + /** Direct sun irradiance (typically in W/m²) */ + private final ComparableQuantity directIrradiance; + /** Diffuse sun irradiance (typically in W/m²) */ + private final ComparableQuantity diffuseIrradiance; + + /** + * @param directIrradiance Direct sun radiation (typically in W/m²) + * @param diffuseIrradiance Diffuse sun radiation (typically in W/m²) + */ + public SolarIrradianceValue( + ComparableQuantity directIrradiance, + ComparableQuantity diffuseIrradiance) { + this.directIrradiance = + directIrradiance == null ? null : directIrradiance.to(StandardUnits.SOLAR_IRRADIANCE); + this.diffuseIrradiance = + diffuseIrradiance == null ? null : diffuseIrradiance.to(StandardUnits.SOLAR_IRRADIANCE); + } + + public Optional> getDiffuseIrradiance() { + return Optional.ofNullable(diffuseIrradiance); + } + + public Optional> getDirectIrradiance() { + return Optional.ofNullable(directIrradiance); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SolarIrradianceValue that = (SolarIrradianceValue) o; + return Objects.equals(directIrradiance, that.directIrradiance) + && Objects.equals(diffuseIrradiance, that.diffuseIrradiance); + } + + @Override + public int hashCode() { + return Objects.hash(directIrradiance, diffuseIrradiance); + } + + @Override + public String toString() { + return "SolarIrradianceValue{" + + "directIrradiance=" + + directIrradiance + + ", diffuseIrradiance=" + + diffuseIrradiance + + '}'; + } +} diff --git a/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java b/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java index 68ea3f0ba..5198a9718 100644 --- a/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java +++ b/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java @@ -5,7 +5,7 @@ */ package edu.ie3.datamodel.models.value; -import edu.ie3.util.quantities.interfaces.Irradiation; +import edu.ie3.util.quantities.interfaces.Irradiance; import java.util.Objects; import javax.measure.quantity.Angle; import javax.measure.quantity.Speed; @@ -13,12 +13,13 @@ import org.locationtech.jts.geom.Point; import tech.units.indriya.ComparableQuantity; -/** Describes weather as a combination of irradiation, temperature and wind values */ +/** Describes weather as a combination of solar irradiance, temperature and wind values */ public class WeatherValue implements Value { /** The coordinate of this weather value set */ private final Point coordinate; - /** irradiation values for this coordinate */ - private final IrradiationValue irradiation; + /** solar irradiance values for this coordinate */ + private final SolarIrradianceValue solarIrradiance; + /** Temperature value for this coordinate */ private final TemperatureValue temperature; /** Wind values for this coordinate */ @@ -26,25 +27,25 @@ public class WeatherValue implements Value { /** * @param coordinate of this weather value set - * @param irradiation values for this coordinate + * @param solarIrradiance values for this coordinate * @param temperature values for this coordinate * @param wind values for this coordinate */ public WeatherValue( Point coordinate, - IrradiationValue irradiation, + SolarIrradianceValue solarIrradiance, TemperatureValue temperature, WindValue wind) { this.coordinate = coordinate; - this.irradiation = irradiation; + this.solarIrradiance = solarIrradiance; this.temperature = temperature; this.wind = wind; } /** * @param coordinate of this weather value set - * @param directIrradiation Direct sun irradiation for this coordinate (typically in W/m²) - * @param diffuseIrradiation Diffuse sun irradiation for this coordinate (typically in W/m²) + * @param directSolarIrradiance Direct sun irradiance for this coordinate (typically in W/m²) + * @param diffuseSolarIrradiance Diffuse sun irradiance for this coordinate (typically in W/m²) * @param temperature for this coordinate (typically in K) * @param direction Direction, the wind comes from as an angle from north increasing clockwise * (typically in rad) @@ -52,14 +53,14 @@ public WeatherValue( */ public WeatherValue( Point coordinate, - ComparableQuantity directIrradiation, - ComparableQuantity diffuseIrradiation, + ComparableQuantity directSolarIrradiance, + ComparableQuantity diffuseSolarIrradiance, ComparableQuantity temperature, ComparableQuantity direction, ComparableQuantity velocity) { this( coordinate, - new IrradiationValue(directIrradiation, diffuseIrradiation), + new SolarIrradianceValue(directSolarIrradiance, diffuseSolarIrradiance), new TemperatureValue(temperature), new WindValue(direction, velocity)); } @@ -68,8 +69,8 @@ public Point getCoordinate() { return coordinate; } - public IrradiationValue getIrradiation() { - return irradiation; + public SolarIrradianceValue getSolarIrradiance() { + return solarIrradiance; } public TemperatureValue getTemperature() { @@ -86,14 +87,14 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; WeatherValue that = (WeatherValue) o; return coordinate.equals(that.coordinate) - && irradiation.equals(that.irradiation) + && solarIrradiance.equals(that.solarIrradiance) && temperature.equals(that.temperature) && wind.equals(that.wind); } @Override public int hashCode() { - return Objects.hash(coordinate, irradiation, temperature, wind); + return Objects.hash(coordinate, solarIrradiance, temperature, wind); } @Override @@ -101,8 +102,8 @@ public String toString() { return "WeatherValue{" + "coordinate=" + coordinate - + ", irradiation=" - + irradiation + + ", solarIrradiance=" + + solarIrradiance + ", temperature=" + temperature + ", wind=" diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactoryTest.groovy index 328776b5a..34aa29145 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/IconTimeBasedWeatherValueFactoryTest.groovy @@ -115,15 +115,15 @@ class IconTimeBasedWeatherValueFactoryTest extends Specification { actual.with { assert it.time == TimeUtil.withDefaults.toZonedDateTime("2019-08-01 01:00:00") assert it.value.coordinate == coordinate - assert it.value.irradiation.directIrradiation.isPresent() - assert it.value.irradiation.directIrradiation.get() == Quantities.getQuantity(0.002317613203124999, PowerSystemUnits.KILOWATT_PER_SQUAREMETRE) - assert it.value.irradiation.diffuseIrradiation.isPresent() - assert it.value.irradiation.diffuseIrradiation.get() == Quantities.getQuantity(0.0018088226191406245, PowerSystemUnits.KILOWATT_PER_SQUAREMETRE) - assert it.value.temperature.temperature.isPresent() + assert it.value.solarIrradiance.directIrradiance.present + assert it.value.solarIrradiance.directIrradiance.get() == Quantities.getQuantity(0.002317613203124999, PowerSystemUnits.KILOWATT_PER_SQUAREMETRE) + assert it.value.solarIrradiance.diffuseIrradiance.present + assert it.value.solarIrradiance.diffuseIrradiance.get() == Quantities.getQuantity(0.0018088226191406245, PowerSystemUnits.KILOWATT_PER_SQUAREMETRE) + assert it.value.temperature.temperature.present assert QuantityUtil.isEquivalentAbs(it.value.temperature.temperature.get(), Quantities.getQuantity(15.9679319051744, Units.CELSIUS)) - assert it.value.wind.direction.isPresent() + assert it.value.wind.direction.present assert QuantityUtil.isEquivalentAbs(it.value.wind.direction.get(), Quantities.getQuantity(214.16711674907722, PowerSystemUnits.DEGREE_GEOM)) - assert it.value.wind.velocity.isPresent() + assert it.value.wind.velocity.present assert QuantityUtil.isEquivalentAbs(it.value.wind.velocity.get(), Quantities.getQuantity(4.640010877529081, PowerSystemUnits.METRE_PER_SECOND)) } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactoryTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactoryTest.groovy index 341caf20e..7fc0ac696 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactoryTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/factory/timeseries/PsdmTimeBasedWeatherValueFactoryTest.groovy @@ -35,8 +35,8 @@ class PsdmTimeBasedWeatherValueFactoryTest extends Specification { def expectedResults = new TimeBasedValue(UUID.fromString("980f7714-8def-479f-baae-4deed6c8d6d1"), time, new WeatherValue(coordinate, - Quantities.getQuantity(286.872985839844d, StandardUnits.IRRADIATION), - Quantities.getQuantity(282.671997070312d, StandardUnits.IRRADIATION), + Quantities.getQuantity(286.872985839844d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(282.671997070312d, StandardUnits.SOLAR_IRRADIANCE), null, Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.66103506088257d, StandardUnits.WIND_VELOCITY))) @@ -68,8 +68,8 @@ class PsdmTimeBasedWeatherValueFactoryTest extends Specification { def expectedResults = new TimeBasedValue(UUID.fromString("980f7714-8def-479f-baae-4deed6c8d6d1"), time, new WeatherValue(coordinate, - Quantities.getQuantity(286.872985839844d, StandardUnits.IRRADIATION), - Quantities.getQuantity(282.671997070312d, StandardUnits.IRRADIATION), + Quantities.getQuantity(286.872985839844d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(282.671997070312d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(278.019012451172d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.66103506088257d, StandardUnits.WIND_VELOCITY))) diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy index 053b8b81a..4807cdf22 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -129,7 +129,7 @@ class ProcessorProviderTest extends Specification implements TimeSeriesTestData ProcessorProvider provider = new ProcessorProvider() Set expected = [ new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, EnergyPriceValue), - new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, IrradiationValue), + new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, SolarIrradianceValue), new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, TemperatureValue), new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, WindValue), new TimeSeriesProcessorKey(IndividualTimeSeries, TimeBasedValue, WeatherValue), diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessorTest.groovy index 57c7c6701..f89ed11bf 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/timeseries/TimeSeriesProcessorTest.groovy @@ -135,15 +135,15 @@ class TimeSeriesProcessorTest extends Specification implements TimeSeriesTestDat actual == individualWindTimeSeriesProcessed } - def "A TimeSeriesProcessors handles a complete time series with IrradiationValues correctly"() { + def "A TimeSeriesProcessors handles a complete time series with IrradianceValues correctly"() { given: - TimeSeriesProcessor processor = new TimeSeriesProcessor<>(IndividualTimeSeries, TimeBasedValue, IrradiationValue) + TimeSeriesProcessor processor = new TimeSeriesProcessor<>(IndividualTimeSeries, TimeBasedValue, SolarIrradianceValue) when: - Set> actual = processor.handleTimeSeries(individualIrradiationTimeSeries) + Set> actual = processor.handleTimeSeries(individualIrradianceTimeSeries) then: - actual == individualIrradiationTimeSeriesProcessed + actual == individualIrradianceTimeSeriesProcessed } def "A TimeSeriesProcessors handles a complete time series with WeatherValues correctly"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 9c1d37bb0..63c8be7fe 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -244,6 +244,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { new File(testBaseFolderPath + File.separator + "its_pqh_83b577cc-06b1-47a1-bfff-ad648a00784b.csv").exists() new File(testBaseFolderPath + File.separator + "its_c_a4bbcb77-b9d0-4b88-92be-b9a14a3e332b.csv").exists() new File(testBaseFolderPath + File.separator + "lpts_g2_b56853fe-b800-4c18-b324-db1878b22a28.csv").exists() + new File(testBaseFolderPath + File.separator + "its_weather_4fcbdfcd-4ff0-46dd-b0df-f3af7ae3ed98.csv").exists() } def "A valid CsvFileSink is able to persist an InputEntity without persisting the nested elements"() { diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy index 78b6c1ec5..d22f6f162 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvTimeSeriesSourceTest.groovy @@ -13,10 +13,6 @@ import edu.ie3.datamodel.io.source.IdCoordinateSource import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue import edu.ie3.datamodel.models.timeseries.mapping.TimeSeriesMapping import edu.ie3.datamodel.models.value.EnergyPriceValue -import edu.ie3.datamodel.models.value.IrradiationValue -import edu.ie3.datamodel.models.value.TemperatureValue -import edu.ie3.datamodel.models.value.WeatherValue -import edu.ie3.datamodel.models.value.WindValue import edu.ie3.util.TimeUtil import edu.ie3.util.geo.GeoUtils import org.locationtech.jts.geom.Coordinate diff --git a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourcePsdmTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourcePsdmTest.groovy index 7bf49ef25..e92ecbaec 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourcePsdmTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/source/csv/CsvWeatherSourcePsdmTest.groovy @@ -5,18 +5,17 @@ */ package edu.ie3.datamodel.io.source.csv -import edu.ie3.datamodel.io.factory.timeseries.PsdmTimeBasedWeatherValueFactory - -import static edu.ie3.datamodel.models.StandardUnits.IRRADIATION +import static edu.ie3.datamodel.models.StandardUnits.SOLAR_IRRADIANCE import static edu.ie3.datamodel.models.StandardUnits.TEMPERATURE import static edu.ie3.datamodel.models.StandardUnits.WIND_DIRECTION import static edu.ie3.datamodel.models.StandardUnits.WIND_VELOCITY +import edu.ie3.datamodel.io.factory.timeseries.PsdmTimeBasedWeatherValueFactory +import edu.ie3.datamodel.models.value.SolarIrradianceValue import edu.ie3.datamodel.io.csv.FileNamingStrategy import edu.ie3.datamodel.io.source.IdCoordinateSource import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue -import edu.ie3.datamodel.models.value.IrradiationValue import edu.ie3.datamodel.models.value.TemperatureValue import edu.ie3.datamodel.models.value.WeatherValue import edu.ie3.datamodel.models.value.WindValue @@ -125,9 +124,9 @@ class CsvWeatherSourcePsdmTest extends Specification implements CsvTestDataMeta, TimeUtil.withDefaults.toZonedDateTime("2020-10-16 12:40:42"), new WeatherValue( defaultCoordinate, - new IrradiationValue( - Quantities.getQuantity(1.234, IRRADIATION), - Quantities.getQuantity(5.678, IRRADIATION) + new SolarIrradianceValue( + Quantities.getQuantity(1.234, SOLAR_IRRADIANCE), + Quantities.getQuantity(5.678, SOLAR_IRRADIANCE) ), new TemperatureValue( Quantities.getQuantity(9.1011, TEMPERATURE) diff --git a/src/test/groovy/edu/ie3/datamodel/models/value/IrradiationValueTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/value/IrradiationValueTest.groovy deleted file mode 100644 index f2fb68a66..000000000 --- a/src/test/groovy/edu/ie3/datamodel/models/value/IrradiationValueTest.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * © 2020. TU Dortmund University, - * Institute of Energy Systems, Energy Efficiency and Energy Economics, - * Research group Distribution grid planning and operation - */ -package edu.ie3.datamodel.models.value - -import edu.ie3.datamodel.models.StandardUnits -import edu.ie3.util.quantities.PowerSystemUnits -import spock.lang.Specification -import tech.units.indriya.quantity.Quantities - - -class IrradiationValueTest extends Specification { - - def "An Irradiation's equal method should work as expected on null and provided quantities"() { - expect: - (iVal1 == iVal2) == res - - where: - iVal1 | iVal2 || res - new IrradiationValue(null, null) | new IrradiationValue(null, null) || true - new IrradiationValue(Quantities.getQuantity(10d, StandardUnits.IRRADIATION), null) | new IrradiationValue(Quantities.getQuantity(10d, StandardUnits.IRRADIATION), null) || true - new IrradiationValue(Quantities.getQuantity(10d, StandardUnits.IRRADIATION), null) | new IrradiationValue(null, null) || false - null | new IrradiationValue(null, null) || false - null | null || true - new IrradiationValue(Quantities.getQuantity(10.23d, StandardUnits.IRRADIATION), null) | new IrradiationValue(Quantities.getQuantity(10.23, StandardUnits.IRRADIATION), null) || false - new IrradiationValue(Quantities.getQuantity(10230, PowerSystemUnits.WATT_PER_SQUAREMETRE), null) | new IrradiationValue(Quantities.getQuantity(10.23, StandardUnits.IRRADIATION), null) || false - } -} diff --git a/src/test/groovy/edu/ie3/datamodel/models/value/SolarIrradianceValueTest.groovy b/src/test/groovy/edu/ie3/datamodel/models/value/SolarIrradianceValueTest.groovy new file mode 100644 index 000000000..8b3fe887e --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/models/value/SolarIrradianceValueTest.groovy @@ -0,0 +1,30 @@ +/* + * © 2020. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation + */ +package edu.ie3.datamodel.models.value + +import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.util.quantities.PowerSystemUnits +import spock.lang.Specification +import tech.units.indriya.quantity.Quantities + + +class SolarIrradianceValueTest extends Specification { + + def "An solar irradiance equals method should work as expected on null and provided quantities"() { + expect: + (iVal1 == iVal2) == res + + where: + iVal1 | iVal2 || res + new SolarIrradianceValue(null, null) | new SolarIrradianceValue(null, null) || true + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), null) | new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), null) || true + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), null) | new SolarIrradianceValue(null, null) || false + null | new SolarIrradianceValue(null, null) || false + null | null || true + new SolarIrradianceValue(Quantities.getQuantity(10.23d, StandardUnits.SOLAR_IRRADIANCE), null) | new SolarIrradianceValue(Quantities.getQuantity(10.23, StandardUnits.SOLAR_IRRADIANCE), null) || false + new SolarIrradianceValue(Quantities.getQuantity(10230, PowerSystemUnits.WATT_PER_SQUAREMETRE), null) | new SolarIrradianceValue(Quantities.getQuantity(10.23, StandardUnits.SOLAR_IRRADIANCE), null) || false + } +} diff --git a/src/test/groovy/edu/ie3/test/common/IconWeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/IconWeatherTestData.groovy index 3ba7b872c..758948162 100644 --- a/src/test/groovy/edu/ie3/test/common/IconWeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/IconWeatherTestData.groovy @@ -19,24 +19,24 @@ class IconWeatherTestData extends WeatherTestData { public static final WeatherValue WEATHER_VALUE_67775_15H = new WeatherValue( COORDINATE_67775, - Quantities.getQuantity(0.3562648859375, StandardUnits.IRRADIATION), - Quantities.getQuantity(0.228021339757131, StandardUnits.IRRADIATION), + Quantities.getQuantity(356.2648859375, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(228.021339757131, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(24.4741992659816, StandardUnits.TEMPERATURE), Quantities.getQuantity(270.45278309919627, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(3.76601470961371, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_67775_16H = new WeatherValue( COORDINATE_67775, - Quantities.getQuantity(0.20438963365625, StandardUnits.IRRADIATION), - Quantities.getQuantity(0.20046049098038043, StandardUnits.IRRADIATION), + Quantities.getQuantity(204.38963365625, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(200.46049098038043, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(24.1700023473353, StandardUnits.TEMPERATURE), Quantities.getQuantity(278.144331776102, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(4.05744164637287, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_67775_17H = new WeatherValue( COORDINATE_67775, - Quantities.getQuantity(0.175039569078125, StandardUnits.IRRADIATION), - Quantities.getQuantity(0.18073429610400223, StandardUnits.IRRADIATION), + Quantities.getQuantity(175.039569078125, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(180.73429610400223, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(23.6787403584074, StandardUnits.TEMPERATURE), Quantities.getQuantity(286.891007103442, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(3.81526300455393, StandardUnits.WIND_VELOCITY) @@ -44,16 +44,16 @@ class IconWeatherTestData extends WeatherTestData { public static final WeatherValue WEATHER_VALUE_67776_15H = new WeatherValue( COORDINATE_67776, - Quantities.getQuantity(0.3330547140625, StandardUnits.IRRADIATION), - Quantities.getQuantity(0.24524079037841295, StandardUnits.IRRADIATION), + Quantities.getQuantity(333.0547140625, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(245.24079037841295, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(22.365335568404, StandardUnits.TEMPERATURE), Quantities.getQuantity(245.604554131632, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(4.39390441381814, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_67776_16H = new WeatherValue( COORDINATE_67776, - Quantities.getQuantity(0.09170939132297, StandardUnits.IRRADIATION), - Quantities.getQuantity(0.241641483540946, StandardUnits.IRRADIATION), + Quantities.getQuantity(091.70939132297, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(241.641483540946, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(20.305111314491, StandardUnits.TEMPERATURE), Quantities.getQuantity(252.810224701109, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(3.44242472583919, StandardUnits.WIND_VELOCITY) diff --git a/src/test/groovy/edu/ie3/test/common/PsdmWeatherTestData.groovy b/src/test/groovy/edu/ie3/test/common/PsdmWeatherTestData.groovy index 95d53c2d4..3a733689a 100644 --- a/src/test/groovy/edu/ie3/test/common/PsdmWeatherTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/PsdmWeatherTestData.groovy @@ -21,24 +21,24 @@ class PsdmWeatherTestData extends WeatherTestData { public static final WeatherValue WEATHER_VALUE_193186_15H = new WeatherValue( COORDINATE_193186, - Quantities.getQuantity(282.671997070312d, StandardUnits.IRRADIATION), - Quantities.getQuantity(286.872985839844d, StandardUnits.IRRADIATION), + Quantities.getQuantity(282.671997070312d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(286.872985839844d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(278.019012451172d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.66103506088257d, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_193186_16H = new WeatherValue( COORDINATE_193186, - Quantities.getQuantity(282.672d, StandardUnits.IRRADIATION), - Quantities.getQuantity(286.872d, StandardUnits.IRRADIATION), + Quantities.getQuantity(282.672d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(286.872d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(278.012d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.662d, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_193186_17H = new WeatherValue( COORDINATE_193186, - Quantities.getQuantity(282.673d, StandardUnits.IRRADIATION), - Quantities.getQuantity(286.873d, StandardUnits.IRRADIATION), + Quantities.getQuantity(282.673d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(286.873d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(278.013d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.663d, StandardUnits.WIND_VELOCITY) @@ -46,16 +46,16 @@ class PsdmWeatherTestData extends WeatherTestData { public static final WeatherValue WEATHER_VALUE_193187_15H = new WeatherValue( COORDINATE_193187, - Quantities.getQuantity(283.671997070312d, StandardUnits.IRRADIATION), - Quantities.getQuantity(287.872985839844d, StandardUnits.IRRADIATION), + Quantities.getQuantity(283.671997070312d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(287.872985839844d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(279.019012451172d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.76103506088257d, StandardUnits.WIND_VELOCITY) ) public static final WeatherValue WEATHER_VALUE_193187_16H = new WeatherValue( COORDINATE_193187, - Quantities.getQuantity(283.672d, StandardUnits.IRRADIATION), - Quantities.getQuantity(287.872d, StandardUnits.IRRADIATION), + Quantities.getQuantity(283.672d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(287.872d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(279.012d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.762d, StandardUnits.WIND_VELOCITY) @@ -63,8 +63,8 @@ class PsdmWeatherTestData extends WeatherTestData { public static final WeatherValue WEATHER_VALUE_193188_15H = new WeatherValue( COORDINATE_193188, - Quantities.getQuantity(284.671997070312d, StandardUnits.IRRADIATION), - Quantities.getQuantity(288.872985839844d, StandardUnits.IRRADIATION), + Quantities.getQuantity(284.671997070312d, StandardUnits.SOLAR_IRRADIANCE), + Quantities.getQuantity(288.872985839844d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(280.019012451172d, StandardUnits.TEMPERATURE), Quantities.getQuantity(0d, StandardUnits.WIND_DIRECTION), Quantities.getQuantity(1.86103506088257d, StandardUnits.WIND_VELOCITY) diff --git a/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy b/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy index 88f022064..09a8fa039 100644 --- a/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TimeSeriesTestData.groovy @@ -6,6 +6,7 @@ package edu.ie3.test.common import edu.ie3.datamodel.models.BdewLoadProfile +import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.timeseries.IntValue import edu.ie3.datamodel.models.timeseries.TimeSeries import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries @@ -153,41 +154,41 @@ trait TimeSeriesTestData { ] as LinkedHashMap ] as Set - IndividualTimeSeries individualIrradiationTimeSeries = new IndividualTimeSeries<>( + IndividualTimeSeries individualIrradianceTimeSeries = new IndividualTimeSeries<>( UUID.fromString("fa7fd93b-3d83-4cf6-83d0-85eb1853dcfa"), [ new TimeBasedValue<>( UUID.fromString("e397cf20-43ae-4601-a6cd-0ee85c63cec3"), ZonedDateTime.of(2020, 4, 2, 10, 0, 0, 0, ZoneId.of("UTC")), - new IrradiationValue(Quantities.getQuantity(5d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(10d, KILOWATT_PER_SQUAREMETRE))), + new SolarIrradianceValue(Quantities.getQuantity(5d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE))), new TimeBasedValue<>( UUID.fromString("94400577-83ac-4dd5-818d-8d62edcd4ee2"), ZonedDateTime.of(2020, 4, 2, 10, 15, 0, 0, ZoneId.of("UTC")), - new IrradiationValue(Quantities.getQuantity(15d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(20d, KILOWATT_PER_SQUAREMETRE))), + new SolarIrradianceValue(Quantities.getQuantity(15d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(20d, StandardUnits.SOLAR_IRRADIANCE))), new TimeBasedValue<>( UUID.fromString("d7523ef9-f8d7-449f-834f-7b92bf51fd9e"), ZonedDateTime.of(2020, 4, 2, 10, 30, 0, 0, ZoneId.of("UTC")), - new IrradiationValue(Quantities.getQuantity(10d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(15d, KILOWATT_PER_SQUAREMETRE))), + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(15d, StandardUnits.SOLAR_IRRADIANCE))), ] as Set ) - Set> individualIrradiationTimeSeriesProcessed = [ + Set> individualIrradianceTimeSeriesProcessed = [ [ "uuid" : "e397cf20-43ae-4601-a6cd-0ee85c63cec3", - "directIrradiation" : "5.0", - "diffuseIrradiation" : "10.0", + "directIrradiance" : "5.0", + "diffuseIrradiance" : "10.0", "time" : "2020-04-02T10:00Z[UTC]" ] as LinkedHashMap, [ "uuid" : "94400577-83ac-4dd5-818d-8d62edcd4ee2", - "directIrradiation" : "15.0", - "diffuseIrradiation" : "20.0", + "directIrradiance" : "15.0", + "diffuseIrradiance" : "20.0", "time" : "2020-04-02T10:15Z[UTC]" ] as LinkedHashMap, [ "uuid" : "d7523ef9-f8d7-449f-834f-7b92bf51fd9e", - "directIrradiation" : "10.0", - "diffuseIrradiation" : "15.0", + "directIrradiance" : "10.0", + "diffuseIrradiance" : "15.0", "time" : "2020-04-02T10:30Z[UTC]" ] as LinkedHashMap ] as Set @@ -200,7 +201,7 @@ trait TimeSeriesTestData { ZonedDateTime.of(2020, 4, 2, 10, 0, 0, 0, ZoneId.of("UTC")), new WeatherValue( defaultLocation, - new IrradiationValue(Quantities.getQuantity(5d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(10d, KILOWATT_PER_SQUAREMETRE)), + new SolarIrradianceValue(Quantities.getQuantity(5d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE)), new TemperatureValue(Quantities.getQuantity(5d, CELSIUS)), new WindValue(Quantities.getQuantity(5d, DEGREE_GEOM), Quantities.getQuantity(10d, METRE_PER_SECOND)) ) @@ -210,7 +211,7 @@ trait TimeSeriesTestData { ZonedDateTime.of(2020, 4, 2, 10, 15, 0, 0, ZoneId.of("UTC")), new WeatherValue( defaultLocation, - new IrradiationValue(Quantities.getQuantity(15d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(20d, KILOWATT_PER_SQUAREMETRE)), + new SolarIrradianceValue(Quantities.getQuantity(15d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(20d, StandardUnits.SOLAR_IRRADIANCE)), new TemperatureValue(Quantities.getQuantity(15d, CELSIUS)), new WindValue(Quantities.getQuantity(15d, DEGREE_GEOM), Quantities.getQuantity(20d, METRE_PER_SECOND)) ) @@ -220,7 +221,7 @@ trait TimeSeriesTestData { ZonedDateTime.of(2020, 4, 2, 10, 30, 0, 0, ZoneId.of("UTC")), new WeatherValue( defaultLocation, - new IrradiationValue(Quantities.getQuantity(10d, KILOWATT_PER_SQUAREMETRE), Quantities.getQuantity(15d, KILOWATT_PER_SQUAREMETRE)), + new SolarIrradianceValue(Quantities.getQuantity(10d, StandardUnits.SOLAR_IRRADIANCE), Quantities.getQuantity(15d, StandardUnits.SOLAR_IRRADIANCE)), new TemperatureValue(Quantities.getQuantity(10d, CELSIUS)), new WindValue(Quantities.getQuantity(10d, DEGREE_GEOM), Quantities.getQuantity(15d, METRE_PER_SECOND)) ) @@ -232,8 +233,8 @@ trait TimeSeriesTestData { [ "uuid" : "edb872a0-7421-4283-b072-91b9a729dabf", "coordinate" : "{\"type\":\"Point\",\"coordinates\":[7.412152,51.492758],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", - "diffuseIrradiation" : "10.0", - "directIrradiation" : "5.0", + "diffuseIrradiance" : "10.0", + "directIrradiance" : "5.0", "direction" : "5.0", "temperature" : "5.0", "time" : "2020-04-02T10:00Z[UTC]", @@ -242,8 +243,8 @@ trait TimeSeriesTestData { [ "uuid" : "b264057c-bc38-4f49-ab27-c7dc5dd51b4c", "coordinate" : "{\"type\":\"Point\",\"coordinates\":[7.412152,51.492758],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", - "diffuseIrradiation" : "20.0", - "directIrradiation" : "15.0", + "diffuseIrradiance" : "20.0", + "directIrradiance" : "15.0", "direction" : "15.0", "temperature" : "15.0", "time" : "2020-04-02T10:15Z[UTC]", @@ -252,8 +253,8 @@ trait TimeSeriesTestData { [ "uuid" : "79eff66e-a910-4ba8-b2c6-ac622bef55b3", "coordinate" : "{\"type\":\"Point\",\"coordinates\":[7.412152,51.492758],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", - "diffuseIrradiation" : "15.0", - "directIrradiation" : "10.0", + "diffuseIrradiance" : "15.0", + "directIrradiance" : "10.0", "direction" : "10.0", "temperature" : "10.0", "time" : "2020-04-02T10:30Z[UTC]", diff --git a/src/test/groovy/edu/ie3/test/helper/WeatherSourceTestHelper.groovy b/src/test/groovy/edu/ie3/test/helper/WeatherSourceTestHelper.groovy index c4b247b4b..c76d1ee18 100644 --- a/src/test/groovy/edu/ie3/test/helper/WeatherSourceTestHelper.groovy +++ b/src/test/groovy/edu/ie3/test/helper/WeatherSourceTestHelper.groovy @@ -21,27 +21,24 @@ trait WeatherSourceTestHelper { static boolean equalsIgnoreUUID(Collection> c1, Collection> c2) { - if(c1 == null || c2 == null) return (c1 == null && c2 == null) - if(c1.size() != c2.size()) return false; - for(TimeBasedValue value1 : c1){ - if(!c2.stream().anyMatch({value2 -> equalsIgnoreUUID(value1, value2)})) return false; + if (c1 == null || c2 == null) return (c1 == null && c2 == null) + if (c1.size() != c2.size()) return false + for (TimeBasedValue value1 : c1) { + if (!c2.stream().anyMatch({ value2 -> equalsIgnoreUUID(value1, value2) })) return false } - return true; + return true } static boolean equalsIgnoreUUID(TimeBasedValue val1, TimeBasedValue val2) { - if(val1.time != val2.time) return false + if (val1.time != val2.time) return false def weatherValue1 = val1.value def weatherValue2 = val2.value - try { - return weatherValue1.irradiation.directIrradiation.isPresent() == weatherValue2.irradiation.directIrradiation.isPresent() && QuantityUtil.isEquivalentAbs(weatherValue1.irradiation.directIrradiation.get(), weatherValue2.irradiation.directIrradiation.get(), 1E-10) && - weatherValue1.irradiation.diffuseIrradiation.isPresent() == weatherValue2.irradiation.diffuseIrradiation.isPresent() && QuantityUtil.isEquivalentAbs(weatherValue1.irradiation.diffuseIrradiation.get(), weatherValue2.irradiation.diffuseIrradiation.get(), 1E-10) && - weatherValue1.temperature.temperature.isPresent() == weatherValue2.temperature.temperature.isPresent() && QuantityUtil.isEquivalentAbs(weatherValue1.temperature.temperature.get(), weatherValue2.temperature.temperature.get(), 1E-10) && - weatherValue1.wind.velocity.isPresent() == weatherValue2.wind.velocity.isPresent() && QuantityUtil.isEquivalentAbs(weatherValue1.wind.velocity.get(), weatherValue2.wind.velocity.get(), 1E-10) && - weatherValue1.wind.direction.isPresent() == weatherValue2.wind.direction.isPresent() && QuantityUtil.isEquivalentAbs(weatherValue1.wind.direction.get(), weatherValue2.wind.direction.get(), 1E-10) - } catch (NullPointerException npe) { - return false - } + + return weatherValue1.solarIrradiance.directIrradiance.present == weatherValue2.solarIrradiance.directIrradiance.present && QuantityUtil.isEquivalentAbs(weatherValue1.solarIrradiance.directIrradiance.get(), weatherValue2.solarIrradiance.directIrradiance.get(), 1E-10) && + weatherValue1.solarIrradiance.diffuseIrradiance.present == weatherValue2.solarIrradiance.diffuseIrradiance.present && QuantityUtil.isEquivalentAbs(weatherValue1.solarIrradiance.diffuseIrradiance.get(), weatherValue2.solarIrradiance.diffuseIrradiance.get(), 1E-10) && + weatherValue1.temperature.temperature.present == weatherValue2.temperature.temperature.present && QuantityUtil.isEquivalentAbs(weatherValue1.temperature.temperature.get(), weatherValue2.temperature.temperature.get(), 1E-10) && + weatherValue1.wind.velocity.present == weatherValue2.wind.velocity.present && QuantityUtil.isEquivalentAbs(weatherValue1.wind.velocity.get(), weatherValue2.wind.velocity.get(), 1E-10) && + weatherValue1.wind.direction.present == weatherValue2.wind.direction.present && QuantityUtil.isEquivalentAbs(weatherValue1.wind.direction.get(), weatherValue2.wind.direction.get(), 1E-10) } } diff --git a/src/test/resources/log4j2-test.xml b/src/test/resources/log4j2-test.xml index b8912e9d1..fd2d36637 100644 --- a/src/test/resources/log4j2-test.xml +++ b/src/test/resources/log4j2-test.xml @@ -12,7 +12,7 @@ - + @@ -25,7 +25,8 @@ - + +