2525import com .powsybl .iidm .network .StaticVarCompensator .RegulationMode ;
2626import com .powsybl .loadflow .validation .io .ValidationWriter ;
2727
28+ import static com .powsybl .loadflow .validation .ValidationUtils .isOutsideTolerance ;
29+ import static com .powsybl .loadflow .validation .ValidationUtils .isUndefinedOrZero ;
30+
2831/**
2932 *
3033 * @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
@@ -164,7 +167,8 @@ public boolean checkSVCs(String id, double p, double q, double vControlled, doub
164167
165168 private static boolean checkSVCsNaNValues (String id , double p , double q , double reactivePowerSetpoint ) {
166169 // a validation error should be detected if there is a setpoint but no p or q
167- if (!Double .isNaN (reactivePowerSetpoint ) && reactivePowerSetpoint != 0 ) {
170+ // Rule2: reactivePowerSetpoint must be undefined or equal to 0 when no p or q
171+ if (!isUndefinedOrZero (reactivePowerSetpoint , 0.0 )) {
168172 LOGGER .warn ("{} {}: {}: P={} Q={} reactivePowerSetpoint={}" , ValidationType .SVCS , ValidationUtils .VALIDATION_ERROR , id , p , q , reactivePowerSetpoint );
169173 return false ;
170174 }
@@ -175,8 +179,9 @@ private static boolean checkSVCsValues(String id, double p, double q, double vCo
175179 double nominalVcontroller , double reactivePowerSetpoint , double voltageSetpoint ,
176180 RegulationMode regulationMode , boolean regulating , double bMin , double bMax , ValidationConfig config ) {
177181 boolean validated = true ;
182+ double threshold = config .getThreshold ();
178183 // Rule1: active power should be equal to 0
179- if (Math . abs ( p ) > config . getThreshold ( )) {
184+ if (isOutsideTolerance ( p , 0.0 , threshold )) {
180185 LOGGER .warn ("{} {}: {}: P={}" , ValidationType .SVCS , ValidationUtils .VALIDATION_ERROR , id , p );
181186 validated = false ;
182187 }
0 commit comments