diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ab797092..2f775f950 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Create JavaDoc with java 17 instead of java 8 - Let JavDoc pass, if there are warnings **ATTENTION:** Should be removed, when JavaDoc is fixed! (cf. Issue [#494](https://github.com/ie3-institute/PowerSystemDataModel/issues/494)) +### Changed +- BREAKING: Transformer's no load susceptance needs to be zero or negative to pass model validation [#378](https://github.com/ie3-institute/PowerSystemDataModel/issues/378) + - All input data sets for version < 3.0.0 need to be altered! + ## [2.1.0] - 2022-01-05 ### Added diff --git a/gradle/scripts/tests.gradle b/gradle/scripts/tests.gradle index 44f17c2e0..78732aa55 100644 --- a/gradle/scripts/tests.gradle +++ b/gradle/scripts/tests.gradle @@ -1,7 +1,11 @@ test { useJUnitPlatform() testLogging { - events "skipped", "failed", "passed" + events "skipped", "failed" + } + + testLogging { + exceptionFormat "Full" } } diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java index 0a924a365..4a0c35379 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ConnectorValidationUtils.java @@ -124,7 +124,7 @@ private static void checkTransformer2W(Transformer2WInput transformer2W) { * - rSc is greater 0 (short circuit resistance)
* - xSc is greater 0 (short circuit impedance)
* - gM is greater/equal to 0 (no load conductance)
- * - bM is greater/equal to 0 (no load susceptance)
+ * - bM is less/equal to 0 (no load susceptance)
* - sRated is greater 0 (rated apparent power)
* - vRatedA is greater 0 (rated voltage at higher voltage terminal)
* - vRatedB is greater 0 (rated voltage at lower voltage terminal)
@@ -139,10 +139,7 @@ protected static void checkTransformer2WType(Transformer2WTypeInput transformer2 checkNonNull(transformer2WType, "a two winding transformer type"); detectNegativeQuantities( new Quantity[] { - transformer2WType.getgM(), - transformer2WType.getbM(), - transformer2WType.getdPhi(), - transformer2WType.getrSc() + transformer2WType.getgM(), transformer2WType.getdPhi(), transformer2WType.getrSc() }, transformer2WType); detectZeroOrNegativeQuantities( @@ -153,6 +150,7 @@ protected static void checkTransformer2WType(Transformer2WTypeInput transformer2 transformer2WType.getxSc() }, transformer2WType); + detectPositiveQuantities(new Quantity[] {transformer2WType.getbM()}, transformer2WType); checkVoltageMagnitudeChangePerTapPosition(transformer2WType); checkMinimumTapPositionIsLowerThanMaximumTapPosition(transformer2WType); checkNeutralTapPositionLiesBetweenMinAndMaxTapPosition(transformer2WType); @@ -193,7 +191,7 @@ private static void checkTransformer3W(Transformer3WInput transformer3W) { * - rScA, rScB, rScC are greater 0 (short circuit resistance in branches A,B,C)
* - xScA, xScB, xScC are greater 0 (short circuit impedance in branches A,B,C)
* - gM is greater/equal to 0 (no load conductance)
- * - bM is greater/equal to 0 (no load susceptance)
+ * - bM is less/equal to 0 (no load susceptance)
* - sRatedA, sRatedB, sRatedC are greater 0 (rated apparent power in branches A,B,C)
* - vRatedA, vRatedB, vRatedC are greater 0 (rated voltage at higher node A,B,C)
* - dV is between 0% and 100% (voltage magnitude increase per tap position
@@ -206,9 +204,7 @@ private static void checkTransformer3W(Transformer3WInput transformer3W) { protected static void checkTransformer3WType(Transformer3WTypeInput transformer3WType) { checkNonNull(transformer3WType, "a three winding transformer type"); detectNegativeQuantities( - new Quantity[] { - transformer3WType.getgM(), transformer3WType.getbM(), transformer3WType.getdPhi() - }, + new Quantity[] {transformer3WType.getgM(), transformer3WType.getdPhi()}, transformer3WType); detectZeroOrNegativeQuantities( new Quantity[] { @@ -220,6 +216,7 @@ protected static void checkTransformer3WType(Transformer3WTypeInput transformer3 transformer3WType.getxScA(), transformer3WType.getxScB(), transformer3WType.getxScC() }, transformer3WType); + detectPositiveQuantities(new Quantity[] {transformer3WType.getbM()}, transformer3WType); checkVoltageMagnitudeChangePerTapPosition(transformer3WType); checkMinimumTapPositionIsLowerThanMaximumTapPosition(transformer3WType); checkNeutralTapPositionLiesBetweenMinAndMaxTapPosition(transformer3WType); diff --git a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java index e59cf8265..a0fbe3848 100644 --- a/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/validation/ValidationUtils.java @@ -186,6 +186,17 @@ protected static void detectZeroOrNegativeQuantities( detectMalformedQuantities( quantities, entity, predicate, "The following quantities have to be positive"); } + /** + * Goes through the provided quantities and reports those, that have positive value via + * + * @param quantities Array of quantities to check + * @param entity Unique entity holding the malformed quantities + */ + protected static void detectPositiveQuantities(Quantity[] quantities, UniqueEntity entity) { + Predicate> predicate = quantity -> quantity.getValue().doubleValue() > 0d; + detectMalformedQuantities( + quantities, entity, predicate, "The following quantities have to be negative"); + } /** * Goes through the provided quantities and reports those, that do fulfill the given predicate via diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index b553f6477..e439fe380 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -472,7 +472,7 @@ class InputEntityProcessorTest extends Specification { "xScB" : "0.08", "xScC" : "0.003", "gM" : "40000.0", - "bM" : "1000.0", + "bM" : "-1000.0", "dV" : "1.5", "dPhi" : "0.0", "tapNeutr": "0", diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index f784a7719..ebaa42ba6 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -134,7 +134,7 @@ class GridTestData { Quantities.getQuantity(0.08d, IMPEDANCE), Quantities.getQuantity(0.003d, IMPEDANCE), Quantities.getQuantity(40000d, ADMITTANCE), - Quantities.getQuantity(1000d, ADMITTANCE), + Quantities.getQuantity(-1000d, ADMITTANCE), Quantities.getQuantity(1.5d, DV_TAP), Quantities.getQuantity(0d, DPHI_TAP), 0, diff --git a/src/test/resources/testGridFiles/types/transformer_3_w_type_input.csv b/src/test/resources/testGridFiles/types/transformer_3_w_type_input.csv index bb078edac..86d1e5fb3 100644 --- a/src/test/resources/testGridFiles/types/transformer_3_w_type_input.csv +++ b/src/test/resources/testGridFiles/types/transformer_3_w_type_input.csv @@ -1,2 +1,2 @@ uuid,b_m,d_phi,d_v,g_m,id,r_sc_a,r_sc_b,r_sc_c,s_rated_a,s_rated_b,s_rated_c,tap_max,tap_min,tap_neutr,v_rated_a,v_rated_b,v_rated_c,x_sc_a,x_sc_b,x_sc_c -5b0ee546-21fb-4a7f-a801-5dbd3d7bb356,1000.0,0.0,1.5,40000.0,HöS-HS-MS_1,0.3,0.025,8.0E-4,120000.0,60000.0,40000.0,10,-10,0,380.0,110.0,20.0,1.0,0.08,0.003 +5b0ee546-21fb-4a7f-a801-5dbd3d7bb356,-1000.0,0.0,1.5,40000.0,HöS-HS-MS_1,0.3,0.025,8.0E-4,120000.0,60000.0,40000.0,10,-10,0,380.0,110.0,20.0,1.0,0.08,0.003