From ae9313db233ef5e7bec5fbb58adebc7f4d6324e7 Mon Sep 17 00:00:00 2001 From: Even Solbraa <41290109+EvenSol@users.noreply.github.com> Date: Tue, 9 Jan 2024 16:17:07 +0100 Subject: [PATCH] update adjuster (#900) * update adjuster * fix bug adjuster * removed output added test --- .../processEquipment/util/Adjuster.java | 17 +++- .../processEquipment/util/AdjusterTest.java | 92 +++++++++++++++++++ 2 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 src/test/java/neqsim/processSimulation/processEquipment/util/AdjusterTest.java diff --git a/src/main/java/neqsim/processSimulation/processEquipment/util/Adjuster.java b/src/main/java/neqsim/processSimulation/processEquipment/util/Adjuster.java index 1d1e228047..1f8308141c 100644 --- a/src/main/java/neqsim/processSimulation/processEquipment/util/Adjuster.java +++ b/src/main/java/neqsim/processSimulation/processEquipment/util/Adjuster.java @@ -165,6 +165,10 @@ public void run(UUID id) { inputValue = ((Stream) adjustedEquipment).getThermoSystem().getFlowRate("kg/hr"); } else if (adjustedVariable.equals("flow") && adjustedVariableUnit != null) { inputValue = ((Stream) adjustedEquipment).getThermoSystem().getFlowRate(adjustedVariableUnit); + } else if (adjustedVariable.equals("pressure") && adjustedVariableUnit != null) { + inputValue = ((Stream) adjustedEquipment).getPressure(adjustedVariableUnit); + } else if (adjustedVariable.equals("temperature") && adjustedVariableUnit != null) { + inputValue = ((Stream) adjustedEquipment).getTemperature(adjustedVariableUnit); } else { inputValue = ((Stream) adjustedEquipment).getThermoSystem().getNumberOfMoles(); } @@ -193,7 +197,6 @@ public void run(UUID id) { double deviation = targetValue - targetValueCurrent; error = deviation; - logger.info("adjuster deviation " + deviation + " inputValue " + inputValue); if (iterations < 2) { if (adjustedVariable.equals("mass flow")) { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate(inputValue + deviation, @@ -201,6 +204,12 @@ public void run(UUID id) { } else if (adjustedVariable.equals("flow") && adjustedVariableUnit != null) { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate( inputValue + Math.signum(deviation) * inputValue / 100.0, adjustedVariableUnit); + } else if (adjustedVariable.equals("pressure") && adjustedVariableUnit != null) { + ((Stream) adjustedEquipment).setPressure(inputValue + deviation / 10.0, + adjustedVariableUnit); + } else if (adjustedVariable.equals("temperature") && adjustedVariableUnit != null) { + ((Stream) adjustedEquipment).setTemperature(inputValue + deviation / 10.0, + adjustedVariableUnit); } else { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate(inputValue + deviation, "mol/sec"); @@ -210,11 +219,9 @@ public void run(UUID id) { double newVal = error / derivate; if (inputValue - newVal > maxAdjustedValue) { newVal = inputValue - maxAdjustedValue; - error = 0; } if (inputValue - newVal < minAdjustedValue) { newVal = inputValue - minAdjustedValue; - error = 0; } if (adjustedVariable.equals("mass flow")) { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate(inputValue - newVal, @@ -222,6 +229,10 @@ public void run(UUID id) { } else if (adjustedVariable.equals("flow") && adjustedVariableUnit != null) { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate(inputValue - newVal, adjustedVariableUnit); + } else if (adjustedVariable.equals("pressure") && adjustedVariableUnit != null) { + ((Stream) adjustedEquipment).setPressure(inputValue - newVal, adjustedVariableUnit); + } else if (adjustedVariable.equals("temperature") && adjustedVariableUnit != null) { + ((Stream) adjustedEquipment).setTemperature(inputValue - newVal, adjustedVariableUnit); } else { ((Stream) adjustedEquipment).getThermoSystem().setTotalFlowRate(inputValue - newVal, "mol/sec"); diff --git a/src/test/java/neqsim/processSimulation/processEquipment/util/AdjusterTest.java b/src/test/java/neqsim/processSimulation/processEquipment/util/AdjusterTest.java new file mode 100644 index 0000000000..58a0305313 --- /dev/null +++ b/src/test/java/neqsim/processSimulation/processEquipment/util/AdjusterTest.java @@ -0,0 +1,92 @@ +package neqsim.processSimulation.processEquipment.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class AdjusterTest { + @Test + void testRun() { + + double wellheadpressure = 150.0; + double bottomholepressure = 200.0; + + neqsim.thermo.system.SystemInterface fluid1 = neqsim.thermo.FluidCreator.create("light oil"); + fluid1.setMixingRule("classic"); + + neqsim.processSimulation.processEquipment.stream.Stream stream1 = + new neqsim.processSimulation.processEquipment.stream.Stream(fluid1.clone()); + stream1.setFlowRate(1.5, "MSm3/day"); + stream1.setPressure(bottomholepressure, "bara"); + stream1.setTemperature(75.0, "C"); + + neqsim.processSimulation.processEquipment.pipeline.PipeBeggsAndBrills flowline1 = + new neqsim.processSimulation.processEquipment.pipeline.PipeBeggsAndBrills(stream1); + flowline1.setDiameter(0.25); + flowline1.setPipeWallRoughness(15e-6); + flowline1.setLength(1200); + flowline1.setElevation(1200.0); + flowline1.setNumberOfIncrements(20); + + + neqsim.processSimulation.processEquipment.util.Adjuster adjuster = + new neqsim.processSimulation.processEquipment.util.Adjuster("adjuster"); + adjuster.setTargetVariable(flowline1.getOutletStream(), "pressure", wellheadpressure, "bara"); + adjuster.setAdjustedVariable(stream1, "flow", "MSm3/day"); + adjuster.setMaxAdjustedValue(200.0); + adjuster.setMinAdjustedValue(0.1); + adjuster.setTolerance(1e-5); + + neqsim.processSimulation.processSystem.ProcessSystem process = + new neqsim.processSimulation.processSystem.ProcessSystem(); + process.add(stream1); + process.add(flowline1); + process.add(adjuster); + process.run(); + + assertEquals(flowline1.getOutletStream().getPressure(), 150, 1e-3); + assertEquals(flowline1.getOutletStream().getFlowRate("MSm3/day"), 4.101310260394316, 1e-3); + } + + @Test + void testRun2() { + + double wellheadpressure = 150.0; + double bottomholepressure = 200.0; + + neqsim.thermo.system.SystemInterface fluid1 = neqsim.thermo.FluidCreator.create("light oil"); + fluid1.setMixingRule("classic"); + + neqsim.processSimulation.processEquipment.stream.Stream stream1 = + new neqsim.processSimulation.processEquipment.stream.Stream(fluid1.clone()); + stream1.setFlowRate(1.5, "MSm3/day"); + stream1.setPressure(bottomholepressure, "bara"); + stream1.setTemperature(75.0, "C"); + + neqsim.processSimulation.processEquipment.pipeline.PipeBeggsAndBrills flowline1 = + new neqsim.processSimulation.processEquipment.pipeline.PipeBeggsAndBrills(stream1); + flowline1.setDiameter(0.25); + flowline1.setPipeWallRoughness(15e-6); + flowline1.setLength(1200); + flowline1.setElevation(1200.0); + flowline1.setNumberOfIncrements(20); + + + neqsim.processSimulation.processEquipment.util.Adjuster adjuster = + new neqsim.processSimulation.processEquipment.util.Adjuster("adjuster"); + adjuster.setTargetVariable(flowline1.getOutletStream(), "pressure", wellheadpressure, "bara"); + adjuster.setAdjustedVariable(stream1, "pressure", "bara"); + adjuster.setMaxAdjustedValue(220.0); + adjuster.setMinAdjustedValue(50.1); + adjuster.setTolerance(1e-5); + + neqsim.processSimulation.processSystem.ProcessSystem process = + new neqsim.processSimulation.processSystem.ProcessSystem(); + process.add(stream1); + process.add(flowline1); + process.add(adjuster); + process.run(); + + assertEquals(flowline1.getOutletStream().getPressure(), 150, 1e-3); + assertEquals(flowline1.getOutletStream().getFlowRate("MSm3/day"), 1.5, 1e-3); + } +}