diff --git a/src/main/java/neqsim/process/equipment/separator/Separator.java b/src/main/java/neqsim/process/equipment/separator/Separator.java index c8d35ad657..be8f798366 100644 --- a/src/main/java/neqsim/process/equipment/separator/Separator.java +++ b/src/main/java/neqsim/process/equipment/separator/Separator.java @@ -192,6 +192,18 @@ public SystemInterface getThermoSystem() { return thermoSystem; } + /** {@inheritDoc} */ + @Override + public boolean needRecalculation() { + if (!inletStreamMixer.needRecalculation()) { + isSolved = true; + return false; + } else { + isSolved = false; + return true; + } + } + /** {@inheritDoc} */ @Override public void run(UUID id) { diff --git a/src/main/java/neqsim/process/equipment/separator/ThreePhaseSeparator.java b/src/main/java/neqsim/process/equipment/separator/ThreePhaseSeparator.java index dd2f4b7741..a0e91ede36 100644 --- a/src/main/java/neqsim/process/equipment/separator/ThreePhaseSeparator.java +++ b/src/main/java/neqsim/process/equipment/separator/ThreePhaseSeparator.java @@ -56,8 +56,7 @@ public ThreePhaseSeparator(String name) { *

* * @param name a {@link java.lang.String} object - * @param inletStream a {@link neqsim.process.equipment.stream.StreamInterface} - * object + * @param inletStream a {@link neqsim.process.equipment.stream.StreamInterface} object */ public ThreePhaseSeparator(String name, StreamInterface inletStream) { super(name, inletStream); @@ -135,6 +134,18 @@ public StreamInterface getOilOutStream() { return liquidOutStream; } + /** {@inheritDoc} */ + @Override + public boolean needRecalculation() { + if (!inletStreamMixer.needRecalculation()) { + isSolved = true; + return false; + } else { + isSolved = false; + return true; + } + } + /** {@inheritDoc} */ @Override public void run(UUID id) { diff --git a/src/main/java/neqsim/process/equipment/splitter/Splitter.java b/src/main/java/neqsim/process/equipment/splitter/Splitter.java index 1edc3494c9..3cc898f4cf 100644 --- a/src/main/java/neqsim/process/equipment/splitter/Splitter.java +++ b/src/main/java/neqsim/process/equipment/splitter/Splitter.java @@ -1,5 +1,6 @@ package neqsim.process.equipment.splitter; +import java.util.Arrays; import java.util.UUID; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -33,6 +34,8 @@ public class Splitter extends ProcessEquipmentBaseClass implements SplitterInter double[] splitFactor = new double[1]; double[] flowRates; String flowUnit = "mole/sec"; + protected double[] oldSplitFactor = null; + protected double[] oldFlowRates = null; /** * Constructor for Splitter. @@ -60,8 +63,7 @@ public Splitter(String name, StreamInterface inStream) { *

* * @param name a {@link java.lang.String} object - * @param inletStream a {@link neqsim.process.equipment.stream.StreamInterface} - * object + * @param inletStream a {@link neqsim.process.equipment.stream.StreamInterface} object * @param i a int */ public Splitter(String name, StreamInterface inletStream, int i) { @@ -178,6 +180,19 @@ public StreamInterface getSplitStream(int i) { return splitStream[i]; } + /** {@inheritDoc} */ + @Override + public boolean needRecalculation() { + if (!inletStream.needRecalculation() && Arrays.equals(splitFactor, oldSplitFactor) + && Arrays.equals(oldFlowRates, flowRates)) { + isSolved = true; + return false; + } else { + isSolved = false; + return true; + } + } + /** {@inheritDoc} */ @Override public void run(UUID id) { @@ -215,7 +230,12 @@ public void run(UUID id) { new ThermodynamicOperations(splitStream[i].getThermoSystem()); thermoOps.TPflash(); } - + if (splitFactor != null) { + oldSplitFactor = Arrays.copyOf(splitFactor, splitFactor.length); + } + if (flowRates != null) { + oldFlowRates = Arrays.copyOf(flowRates, flowRates.length); + } setCalculationIdentifier(id); } diff --git a/src/main/java/neqsim/process/equipment/stream/Stream.java b/src/main/java/neqsim/process/equipment/stream/Stream.java index aa2f5d163b..324da46138 100644 --- a/src/main/java/neqsim/process/equipment/stream/Stream.java +++ b/src/main/java/neqsim/process/equipment/stream/Stream.java @@ -7,6 +7,7 @@ package neqsim.process.equipment.stream; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.UUID; import org.apache.logging.log4j.LogManager; @@ -46,6 +47,7 @@ public class Stream extends ProcessEquipmentBaseClass implements StreamInterface protected double lastTemperature = 0.0; protected double lastPressure = 0.0; protected double lastFlowRate = 0.0; + protected double[] lastComposition = null; /** * Constructor for Stream. @@ -317,7 +319,8 @@ public boolean needRecalculation() { } if (getFluid().getTemperature() == lastTemperature && getFluid().getPressure() == lastPressure && Math.abs(getFluid().getFlowRate("kg/hr") - lastFlowRate) - / getFluid().getFlowRate("kg/hr") < 1e-6) { + / getFluid().getFlowRate("kg/hr") < 1e-6 + && Arrays.equals(getFluid().getMolarComposition(), lastComposition)) { isSolved = true; return false; } else { @@ -398,6 +401,7 @@ && getSpecification().equals("TP")) { thermoSystem.initProperties(); lastFlowRate = thermoSystem.getFlowRate("kg/hr"); + lastComposition = thermoSystem.getMolarComposition(); lastTemperature = thermoSystem.getTemperature(); lastPressure = thermoSystem.getPressure(); diff --git a/src/test/java/neqsim/process/processmodel/CompressorModule.java b/src/test/java/neqsim/process/processmodel/CompressorModule.java index 38991ce729..e8d4571590 100644 --- a/src/test/java/neqsim/process/processmodel/CompressorModule.java +++ b/src/test/java/neqsim/process/processmodel/CompressorModule.java @@ -134,11 +134,10 @@ public void testProcess() { operations.run(); - assertEquals(2042.17826, recycleScrubberStream.getFlowRate("kg/hr"), 0.1); + assertEquals(2038.8824, recycleScrubberStream.getFlowRate("kg/hr"), 0.1); neqsim.process.equipment.compressor.CompressorChartGenerator compchartgenerator = - new neqsim.process.equipment.compressor.CompressorChartGenerator( - seccondStageCompressor); + new neqsim.process.equipment.compressor.CompressorChartGenerator(seccondStageCompressor); compchartgenerator.generateCompressorChart("mid range"); seccondStageCompressor.setCompressorChart(compchartgenerator.generateCompressorChart("normal")); diff --git a/src/test/java/neqsim/process/processmodel/MLA_bug_test.java b/src/test/java/neqsim/process/processmodel/MLA_bug_test.java index fb149c3583..46b310a5eb 100644 --- a/src/test/java/neqsim/process/processmodel/MLA_bug_test.java +++ b/src/test/java/neqsim/process/processmodel/MLA_bug_test.java @@ -330,7 +330,7 @@ public void runProcessTEG() throws InterruptedException { assertEquals(-19.1886678, p.getMeasurementDevice("water dew point analyser3").getMeasuredValue("C"), 1e-1); - assertEquals(203.024331, + assertEquals(213.041186, ((Reboiler) ((DistillationColumn) p.getUnit("TEG regeneration column")).getReboiler()) .getDuty() / 1e3, 1e-2); diff --git a/src/test/java/neqsim/process/processmodel/ProcessSystemTest.java b/src/test/java/neqsim/process/processmodel/ProcessSystemTest.java index 947563d3d2..0633496ef2 100644 --- a/src/test/java/neqsim/process/processmodel/ProcessSystemTest.java +++ b/src/test/java/neqsim/process/processmodel/ProcessSystemTest.java @@ -24,7 +24,6 @@ import neqsim.process.equipment.valve.ThrottlingValve; import neqsim.process.measurementdevice.HydrateEquilibriumTemperatureAnalyser; import neqsim.process.measurementdevice.WaterDewPointAnalyser; -import neqsim.process.processmodel.ProcessSystem; /** * Class for testing ProcessSystem class. @@ -581,7 +580,7 @@ public void runTEGProcessTest2() { * coolerhOTteg3.getOutletStream().getFlowRate("kg/hr")); System.out.println("leantoresirc " + * leanTEGtoabs.getFlowRate("kg/hr")); */ - assertEquals(1.5322819175995646E-5, dehydratedGas.getFluid().getComponent("water").getx(), + assertEquals(1.743804E-5, dehydratedGas.getFluid().getComponent("water").getx(), 1e-6); }