Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AC vectorized network #778

Open
wants to merge 52 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
400296f
AC equations vectorization
geofjamg Apr 27, 2023
abc78d1
Wip
geofjamg Apr 27, 2023
c915bae
Wip
geofjamg Apr 27, 2023
3257ef1
Wip
geofjamg Apr 27, 2023
759294c
Wip
geofjamg Apr 27, 2023
2177030
Wip
geofjamg Apr 27, 2023
0311565
Wip
geofjamg Apr 27, 2023
c463e66
Wip
geofjamg Apr 27, 2023
daa5d56
Wip
geofjamg Apr 27, 2023
7436aa9
Wip
geofjamg Apr 27, 2023
7413eaf
Merge branch 'main' into ac_network_vector
geofjamg Apr 28, 2023
a1107ef
Wip
geofjamg Apr 28, 2023
cf5205b
Wip
geofjamg Apr 28, 2023
91d7f6d
Wip
geofjamg Apr 28, 2023
752cbf9
Merge branch 'main' into ac_network_vector
geofjamg May 24, 2023
29239bf
Merge branch 'main' into ac_network_vector
geofjamg May 30, 2023
ce82e23
Fix merge
geofjamg May 31, 2023
f75ae54
Merge branch 'main' into ac_network_vector
geofjamg May 31, 2023
a17ba61
Merge branch 'main' into ac_network_vector
geofjamg Jun 10, 2023
796cd45
Merge branch 'main' into ac_network_vector
geofjamg Jun 26, 2023
cc3e013
Wip
geofjamg Jun 27, 2023
d702771
Wip
geofjamg Jun 27, 2023
fe60742
Wip
geofjamg Jun 27, 2023
d3b2b4d
Wip
geofjamg Jun 27, 2023
2c8db19
Merge branch 'main' into ac_network_vector
geofjamg Jul 1, 2023
00c1e16
Merge branch 'main' into ac_network_vector
geofjamg Jul 8, 2023
8a94343
Merge branch 'main' into ac_network_vector
geofjamg Jul 13, 2023
6bb671a
Merge branch 'main' into ac_network_vector
geofjamg Oct 8, 2023
52e69b4
Wip
geofjamg Oct 8, 2023
3f026a1
Merge branch 'main' into ac_network_vector
geofjamg Oct 11, 2023
e892d15
Merge branch 'main' into ac_network_vector
geofjamg Oct 18, 2023
f95fead
Wip
geofjamg Oct 18, 2023
a99a618
Merge remote-tracking branch 'origin/ac_network_vector' into ac_netwo…
geofjamg Oct 18, 2023
88ae320
Merge branch 'main' into ac_network_vector
geofjamg Dec 2, 2023
5e06ec6
Wip
geofjamg Dec 2, 2023
378b6de
Wip
geofjamg Dec 3, 2023
8344582
Wip
geofjamg Dec 3, 2023
6ed47b6
Wip
geofjamg Dec 4, 2023
fbd0b50
Merge branch 'main' into ac_network_vector
geofjamg Dec 5, 2023
88f6e7a
Wip
geofjamg Dec 5, 2023
bfdfebb
Merge branch 'main' into ac_network_vector
geofjamg Dec 6, 2023
0747f19
Wip
geofjamg Dec 6, 2023
ef6b455
Merge branch 'main' into ac_network_vector
geofjamg Dec 13, 2023
5d38fc6
Wip
geofjamg Dec 13, 2023
52b6c1b
Merge branch 'main' into ac_network_vector
geofjamg Dec 14, 2023
7634f6b
Merge branch 'main' into ac_network_vector
geofjamg Dec 14, 2023
4b5e74e
Wip
geofjamg Dec 14, 2023
9ef48f5
Wip
geofjamg Dec 14, 2023
44480b7
Wip
geofjamg Dec 17, 2023
d80b1ac
Merge branch 'main' into ac_network_vector
geofjamg Dec 21, 2023
e7ec3cd
Merge branch 'main' into ac_network_vector
geofjamg Aug 19, 2024
0a4beff
Merge
geofjamg Aug 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/main/java/com/powsybl/openloadflow/ac/AcLoadFlowContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
*/
package com.powsybl.openloadflow.ac;

import com.powsybl.openloadflow.ac.equations.asym.AsymmetricalAcEquationSystemCreator;
import com.powsybl.openloadflow.equations.JacobianMatrix;
import com.powsybl.openloadflow.lf.AbstractLoadFlowContext;
import com.powsybl.openloadflow.ac.equations.AcEquationSystemCreator;
import com.powsybl.openloadflow.ac.equations.AcEquationType;
import com.powsybl.openloadflow.ac.equations.AcVariableType;
import com.powsybl.openloadflow.ac.equations.asym.AsymmetricalAcEquationSystemCreator;
import com.powsybl.openloadflow.ac.equations.vector.AcVectorizedEquationSystemCreator;
import com.powsybl.openloadflow.equations.EquationSystem;
import com.powsybl.openloadflow.equations.EquationVector;
import com.powsybl.openloadflow.equations.JacobianMatrix;
import com.powsybl.openloadflow.equations.TargetVector;
import com.powsybl.openloadflow.lf.AbstractLoadFlowContext;
import com.powsybl.openloadflow.network.LfNetwork;

/**
Expand Down Expand Up @@ -47,7 +47,7 @@ public JacobianMatrix<AcVariableType, AcEquationType> getJacobianMatrix() {
public EquationSystem<AcVariableType, AcEquationType> getEquationSystem() {
if (equationSystem == null) {
var creator = parameters.isAsymmetrical() ? new AsymmetricalAcEquationSystemCreator(network, parameters.getEquationSystemCreationParameters())
: new AcEquationSystemCreator(network, parameters.getEquationSystemCreationParameters());
: new AcVectorizedEquationSystemCreator(network, parameters.getEquationSystemCreationParameters());
equationSystem = creator.create();
}
return equationSystem;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* 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/.
*/
package com.powsybl.openloadflow.ac.equations;

import com.powsybl.openloadflow.equations.EquationSystem;

import java.util.Objects;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
public class AcEquationSystemCreationContext {

private final EquationSystem<AcVariableType, AcEquationType> equationSystem;

public AcEquationSystemCreationContext(EquationSystem<AcVariableType, AcEquationType> equationSystem) {
this.equationSystem = Objects.requireNonNull(equationSystem);
}

public EquationSystem<AcVariableType, AcEquationType> getEquationSystem() {
return equationSystem;
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
package com.powsybl.openloadflow.ac.equations;

import com.powsybl.iidm.network.TwoSides;
import com.powsybl.openloadflow.equations.EquationSystem;
import com.powsybl.openloadflow.lf.AbstractEquationSystemUpdater;
import com.powsybl.openloadflow.network.*;
import com.powsybl.openloadflow.util.EvaluableConstants;
Expand All @@ -21,25 +20,27 @@
*/
public class AcEquationSystemUpdater extends AbstractEquationSystemUpdater<AcVariableType, AcEquationType> {

private final AcEquationSystemCreationParameters parameters;
private final AcEquationSystemCreator creator;

public AcEquationSystemUpdater(EquationSystem<AcVariableType, AcEquationType> equationSystem,
AcEquationSystemCreationParameters parameters) {
super(equationSystem, LoadFlowModel.AC);
this.parameters = Objects.requireNonNull(parameters);
private final AcEquationSystemCreationContext creationContext;

public AcEquationSystemUpdater(AcEquationSystemCreator creator, AcEquationSystemCreationContext creationContext) {
super(creationContext.getEquationSystem(), LoadFlowModel.AC);
this.creator = Objects.requireNonNull(creator);
this.creationContext = Objects.requireNonNull(creationContext);
}

private void updateVoltageControls(LfBus bus) {
LfZeroImpedanceNetwork zn = bus.getZeroImpedanceNetwork(loadFlowModel);
if (zn == null) {
bus.getGeneratorVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateGeneratorVoltageControl(voltageControl.getMainVoltageControl(), equationSystem));
bus.getTransformerVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateTransformerVoltageControlEquations(voltageControl.getMainVoltageControl(), equationSystem));
bus.getShuntVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateShuntVoltageControlEquations(voltageControl.getMainVoltageControl(), equationSystem));
bus.getGeneratorVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateGeneratorVoltageControl(voltageControl.getMainVoltageControl(), creationContext));
bus.getTransformerVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateTransformerVoltageControlEquations(voltageControl.getMainVoltageControl(), creationContext));
bus.getShuntVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateShuntVoltageControlEquations(voltageControl.getMainVoltageControl(), creationContext));
} else {
for (LfBus zb : zn.getGraph().vertexSet()) {
zb.getGeneratorVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateGeneratorVoltageControl(voltageControl.getMainVoltageControl(), equationSystem));
zb.getTransformerVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateTransformerVoltageControlEquations(voltageControl.getMainVoltageControl(), equationSystem));
zb.getShuntVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateShuntVoltageControlEquations(voltageControl.getMainVoltageControl(), equationSystem));
zb.getGeneratorVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateGeneratorVoltageControl(voltageControl.getMainVoltageControl(), creationContext));
zb.getTransformerVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateTransformerVoltageControlEquations(voltageControl.getMainVoltageControl(), creationContext));
zb.getShuntVoltageControl().ifPresent(voltageControl -> AcEquationSystemCreator.updateShuntVoltageControlEquations(voltageControl.getMainVoltageControl(), creationContext));
}
}
}
Expand All @@ -51,12 +52,12 @@ public void onGeneratorVoltageControlChange(LfBus controllerBus, boolean newVolt

@Override
public void onTransformerPhaseControlChange(LfBranch controllerBranch, boolean newPhaseControlEnabled) {
AcEquationSystemCreator.updateTransformerPhaseControlEquations(controllerBranch.getPhaseControl().orElseThrow(), equationSystem);
AcEquationSystemCreator.updateTransformerPhaseControlEquations(controllerBranch.getPhaseControl().orElseThrow(), creationContext);
}

@Override
public void onGeneratorReactivePowerControlChange(LfBus controllerBus, boolean newReactiveControllerEnabled) {
controllerBus.getGeneratorReactivePowerControl().ifPresent(generatorReactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(generatorReactivePowerControl, equationSystem));
controllerBus.getGeneratorReactivePowerControl().ifPresent(generatorReactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(generatorReactivePowerControl, creationContext));
}

@Override
Expand Down Expand Up @@ -106,14 +107,14 @@ public void onDisableChange(LfElement element, boolean disabled) {
bus.getGeneratorVoltageControl().ifPresent(vc -> updateVoltageControls(vc.getControlledBus()));
bus.getTransformerVoltageControl().ifPresent(vc -> updateVoltageControls(vc.getControlledBus()));
bus.getShuntVoltageControl().ifPresent(vc -> updateVoltageControls(vc.getControlledBus()));
bus.getGeneratorReactivePowerControl().ifPresent(reactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(reactivePowerControl, equationSystem));
bus.getGeneratorReactivePowerControl().ifPresent(reactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(reactivePowerControl, creationContext));
break;
case BRANCH:
LfBranch branch = (LfBranch) element;
AcEquationSystemCreator.updateBranchEquations(branch);
branch.getVoltageControl().ifPresent(vc -> updateVoltageControls(vc.getControlledBus()));
branch.getPhaseControl().ifPresent(phaseControl -> AcEquationSystemCreator.updateTransformerPhaseControlEquations(phaseControl, equationSystem));
branch.getGeneratorReactivePowerControl().ifPresent(reactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(reactivePowerControl, equationSystem));
branch.getPhaseControl().ifPresent(phaseControl -> AcEquationSystemCreator.updateTransformerPhaseControlEquations(phaseControl, creationContext));
branch.getGeneratorReactivePowerControl().ifPresent(reactivePowerControl -> AcEquationSystemCreator.updateGeneratorReactivePowerControlBranchEquations(reactivePowerControl, creationContext));
break;
case SHUNT_COMPENSATOR:
LfShunt shunt = (LfShunt) element;
Expand All @@ -131,13 +132,13 @@ private void recreateDistributionEquations(LfZeroImpedanceNetwork network) {
for (LfBus bus : network.getGraph().vertexSet()) {
bus.getGeneratorVoltageControl()
.filter(voltageControl -> voltageControl.getMergeStatus() == VoltageControl.MergeStatus.MAIN)
.ifPresent(voltageControl -> AcEquationSystemCreator.recreateReactivePowerDistributionEquations(bus.getNetwork(), voltageControl, equationSystem, parameters));
.ifPresent(voltageControl -> creator.recreateReactivePowerDistributionEquations(voltageControl, creationContext));
bus.getTransformerVoltageControl()
.filter(voltageControl -> voltageControl.getMergeStatus() == VoltageControl.MergeStatus.MAIN)
.ifPresent(voltageControl -> AcEquationSystemCreator.recreateR1DistributionEquations(bus.getNetwork(), voltageControl, equationSystem));
.ifPresent(voltageControl -> AcEquationSystemCreator.recreateR1DistributionEquations(network.getNetwork(), voltageControl, creationContext));
bus.getShuntVoltageControl()
.filter(voltageControl -> voltageControl.getMergeStatus() == VoltageControl.MergeStatus.MAIN)
.ifPresent(voltageControl -> AcEquationSystemCreator.recreateShuntSusceptanceDistributionEquations(bus.getNetwork(), voltageControl, equationSystem));
.ifPresent(voltageControl -> AcEquationSystemCreator.recreateShuntSusceptanceDistributionEquations(network.getNetwork(), voltageControl, creationContext));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import com.powsybl.iidm.network.TwoSides;
import com.powsybl.openloadflow.ac.equations.*;
import com.powsybl.openloadflow.equations.EquationSystem;
import com.powsybl.openloadflow.equations.EquationTerm;
import com.powsybl.openloadflow.network.*;
import com.powsybl.openloadflow.util.ComplexPart;
Expand All @@ -29,8 +28,10 @@ public AsymmetricalAcEquationSystemCreator(LfNetwork network, AcEquationSystemCr
}

@Override
protected void createBusEquation(LfBus bus, EquationSystem<AcVariableType, AcEquationType> equationSystem) {
super.createBusEquation(bus, equationSystem);
protected void createBusEquation(LfBus bus, AcEquationSystemCreationContext creationContext) {
super.createBusEquation(bus, creationContext);

var equationSystem = creationContext.getEquationSystem();

// addition of asymmetric equations, supposing that existing v, theta, p and q are linked to the positive sequence
LfAsymBus asymBus = bus.getAsym();
Expand Down Expand Up @@ -98,7 +99,9 @@ protected void createBusEquation(LfBus bus, EquationSystem<AcVariableType, AcEqu
}

@Override
protected void createImpedantBranch(LfBranch branch, LfBus bus1, LfBus bus2, EquationSystem<AcVariableType, AcEquationType> equationSystem) {
protected void createImpedantBranch(LfBranch branch, LfBus bus1, LfBus bus2, AcEquationSystemCreationContext creationContext) {
var equationSystem = creationContext.getEquationSystem();

// positive sequence
EquationTerm<AcVariableType, AcEquationType> p1 = null;
EquationTerm<AcVariableType, AcEquationType> q1 = null;
Expand Down Expand Up @@ -171,7 +174,7 @@ protected void createImpedantBranch(LfBranch branch, LfBus bus1, LfBus bus2, Equ
}

// positive
createImpedantBranchEquations(branch, bus1, bus2, equationSystem, p1, q1, i1, p2, q2, i2, p1, q1, i1, p2, q2, i2, null, null, null, null, null, null);
createImpedantBranchEquations(branch, bus1, bus2, creationContext, p1, q1, i1, p2, q2, i2, p1, q1, i1, p2, q2, i2, null, null, null, null, null, null);

// zero
if (ixz1 != null) {
Expand Down Expand Up @@ -217,10 +220,10 @@ protected void createImpedantBranch(LfBranch branch, LfBus bus1, LfBus bus2, Equ
.addTerm(iyn2);
}

createGeneratorReactivePowerControlBranchEquation(branch, bus1, bus2, equationSystem, deriveA1, deriveR1);
createGeneratorReactivePowerControlBranchEquation(branch, bus1, bus2, creationContext, deriveA1, deriveR1);

createTransformerPhaseControlEquations(branch, bus1, bus2, equationSystem, deriveA1, deriveR1);
createTransformerPhaseControlEquations(branch, bus1, bus2, creationContext, deriveA1, deriveR1);

createTransformerReactivePowerControlEquations(branch, equationSystem);
createTransformerReactivePowerControlEquations(branch, creationContext);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* Copyright (c) 2021, 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/.
*/
package com.powsybl.openloadflow.ac.equations.vector;

import com.powsybl.openloadflow.ac.equations.AcEquationType;
import com.powsybl.openloadflow.ac.equations.AcVariableType;
import com.powsybl.openloadflow.equations.AbstractNamedEquationTerm;
import com.powsybl.openloadflow.network.ElementType;

import java.util.Objects;

/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public abstract class AbstractBranchVectorAcFlowEquationTerm extends AbstractNamedEquationTerm<AcVariableType, AcEquationType> {

protected final AcBranchVector branchVector;

protected final int num;

protected AbstractBranchVectorAcFlowEquationTerm(AcBranchVector branchVector, int num) {
super(!Objects.requireNonNull(branchVector).disabled[num]);
this.branchVector = Objects.requireNonNull(branchVector);
this.num = num;
}

@Override
public ElementType getElementType() {
return ElementType.BRANCH;
}

@Override
public int getElementNum() {
return num;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/**
* Copyright (c) 2019, 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/.
*/
package com.powsybl.openloadflow.ac.equations.vector;

import com.powsybl.math.matrix.DenseMatrix;
import com.powsybl.openloadflow.ac.equations.AcVariableType;
import com.powsybl.openloadflow.equations.Variable;
import com.powsybl.openloadflow.equations.VariableSet;
import com.powsybl.openloadflow.util.Fortescue;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import static com.powsybl.openloadflow.ac.equations.AbstractClosedBranchAcFlowEquationTerm.getVoltageAngleType;
import static com.powsybl.openloadflow.ac.equations.AbstractClosedBranchAcFlowEquationTerm.getVoltageMagnitudeType;
import static com.powsybl.openloadflow.network.PiModel.A2;

/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public abstract class AbstractClosedBranchVectorAcFlowEquationTerm extends AbstractBranchVectorAcFlowEquationTerm {

protected final Variable<AcVariableType> v1Var;

protected final Variable<AcVariableType> v2Var;

protected final Variable<AcVariableType> ph1Var;

protected final Variable<AcVariableType> ph2Var;

protected final Variable<AcVariableType> a1Var;

protected final Variable<AcVariableType> r1Var;

protected final List<Variable<AcVariableType>> variables = new ArrayList<>();

protected AbstractClosedBranchVectorAcFlowEquationTerm(AcBranchVector branchVector, int branchNum, int bus1Num, int bus2Num,
VariableSet<AcVariableType> variableSet, boolean deriveA1, boolean deriveR1,
Fortescue.SequenceType sequenceType) {
super(branchVector, branchNum);
Objects.requireNonNull(variableSet);
AcVariableType vType = getVoltageMagnitudeType(sequenceType);
AcVariableType angleType = getVoltageAngleType(sequenceType);
v1Var = variableSet.getVariable(bus1Num, vType);
v2Var = variableSet.getVariable(bus2Num, vType);
ph1Var = variableSet.getVariable(bus1Num, angleType);
ph2Var = variableSet.getVariable(bus2Num, angleType);
a1Var = deriveA1 ? variableSet.getVariable(branchNum, AcVariableType.BRANCH_ALPHA1) : null;
r1Var = deriveR1 ? variableSet.getVariable(branchNum, AcVariableType.BRANCH_RHO1) : null;
variables.add(v1Var);
variables.add(v2Var);
variables.add(ph1Var);
variables.add(ph2Var);
if (a1Var != null) {
variables.add(a1Var);
}
if (r1Var != null) {
variables.add(r1Var);
}
}

public Variable<AcVariableType> getA1Var() {
return a1Var;
}

protected double v1() {
return sv.get(v1Var.getRow());
}

protected double v2() {
return sv.get(v2Var.getRow());
}

protected double ph1() {
return sv.get(ph1Var.getRow());
}

protected double ph2() {
return sv.get(ph2Var.getRow());
}

protected double r1() {
return r1Var != null ? sv.get(r1Var.getRow()) : branchVector.r1[num];
}

protected double a1() {
return a1Var != null ? sv.get(a1Var.getRow()) : branchVector.a1[num];
}

public static double theta1(double ksi, double ph1, double a1, double ph2) {
return ksi - a1 + A2 - ph1 + ph2;
}

public static double theta2(double ksi, double ph1, double a1, double ph2) {
return ksi + a1 - A2 + ph1 - ph2;
}

protected abstract double calculateSensi(double dph1, double dph2, double dv1, double dv2, double da1, double dr1);

@Override
public double calculateSensi(DenseMatrix dx, int column) {
Objects.requireNonNull(dx);
double dph1 = dx.get(ph1Var.getRow(), column);
double dph2 = dx.get(ph2Var.getRow(), column);
double dv1 = dx.get(v1Var.getRow(), column);
double dv2 = dx.get(v2Var.getRow(), column);
double da1 = a1Var != null ? dx.get(a1Var.getRow(), column) : 0;
double dr1 = r1Var != null ? dx.get(r1Var.getRow(), column) : 0;
return calculateSensi(dph1, dph2, dv1, dv2, da1, dr1);
}

@Override
public List<Variable<AcVariableType>> getVariables() {
return variables;
}
}
Loading