ZipLoadModelAdderImpl.java
/**
* Copyright (c) 2023, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.iidm.network.impl;
import com.powsybl.iidm.network.ValidationException;
import com.powsybl.iidm.network.ZipLoadModelAdder;
import java.util.Objects;
import static com.powsybl.iidm.network.impl.ZipLoadModelImpl.checkCoefficient;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public class ZipLoadModelAdderImpl implements ZipLoadModelAdder {
private final LoadAdderImpl parentAdder;
private double c0p = 1;
private double c1p = 0;
private double c2p = 0;
private double c0q = 1;
private double c1q = 0;
private double c2q = 0;
public ZipLoadModelAdderImpl(LoadAdderImpl parentAdder) {
this.parentAdder = Objects.requireNonNull(parentAdder);
}
@Override
public ZipLoadModelAdderImpl setC0p(double c0p) {
this.c0p = checkCoefficient(parentAdder, c0p);
return this;
}
@Override
public ZipLoadModelAdderImpl setC1p(double c1p) {
this.c1p = checkCoefficient(parentAdder, c1p);
return this;
}
@Override
public ZipLoadModelAdderImpl setC2p(double c2p) {
this.c2p = checkCoefficient(parentAdder, c2p);
return this;
}
@Override
public ZipLoadModelAdderImpl setC0q(double c0q) {
this.c0q = checkCoefficient(parentAdder, c0q);
return this;
}
@Override
public ZipLoadModelAdderImpl setC1q(double c1q) {
this.c1q = checkCoefficient(parentAdder, c1q);
return this;
}
@Override
public ZipLoadModelAdderImpl setC2q(double c2q) {
this.c2q = checkCoefficient(parentAdder, c2q);
return this;
}
@Override
public LoadAdderImpl add() {
if (Math.abs(c0p + c1p + c2p - 1d) > SUM_EPSILON) {
throw new ValidationException(parentAdder, "Sum of c0p, c1p and c2p should be 1");
}
if (Math.abs(c0q + c1q + c2q - 1d) > SUM_EPSILON) {
throw new ValidationException(parentAdder, "Sum of c0q, c1q and c2q should be 1");
}
parentAdder.setModel(new ZipLoadModelImpl(c0p, c1p, c2p, c0q, c1q, c2q));
return parentAdder;
}
}