From 2fbb74f0b57fbe1d301f2e1afaac68792a9ed88f Mon Sep 17 00:00:00 2001 From: Even Solbraa <41290109+EvenSol@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:40:37 +0000 Subject: [PATCH] update --- .../neqsim/thermo/system/SystemThermo.java | 2 +- .../flashops/TVfractionFlash.java | 41 +++++++++---------- .../oilquality/Standard_ASTM_D6377Test.java | 34 ++++++++++++--- 3 files changed, 49 insertions(+), 28 deletions(-) diff --git a/src/main/java/neqsim/thermo/system/SystemThermo.java b/src/main/java/neqsim/thermo/system/SystemThermo.java index 53b2bf5a9..8ba0d9bbe 100644 --- a/src/main/java/neqsim/thermo/system/SystemThermo.java +++ b/src/main/java/neqsim/thermo/system/SystemThermo.java @@ -1921,7 +1921,7 @@ public double getdPdVtn() { double dPdV = 0.0; for (int i = 0; i < numberOfPhases; i++) { if (isPhase(i)) { - dPdV += getPhase(i).getdPdVTn() * getPhase(i).getVolume() / getVolume(); + dPdV += getPhase(i).getdPdVTn(); // * getPhase(i).getVolume() / getVolume(); } } return dPdV; diff --git a/src/main/java/neqsim/thermodynamicoperations/flashops/TVfractionFlash.java b/src/main/java/neqsim/thermodynamicoperations/flashops/TVfractionFlash.java index eb303ab53..c52ea95e7 100644 --- a/src/main/java/neqsim/thermodynamicoperations/flashops/TVfractionFlash.java +++ b/src/main/java/neqsim/thermodynamicoperations/flashops/TVfractionFlash.java @@ -44,8 +44,8 @@ public TVfractionFlash(SystemInterface system, double Vfractionspec) { * @return a double */ public double calcdQdVdP() { - double dQdVP = 0.0; - dQdVP = 1.0 / system.getPhase(i).getdPdVTn() / system.getVolume(); + double dQdVP = 1.0 / system.getPhase(0).getdPdVTn() / system.getVolume() + + system.getPhase(0).getVolume() / Math.pow(system.getVolume(), 2.0) * system.getdVdPtn(); return dQdVP; } @@ -71,7 +71,7 @@ public double calcdQdV() { public double solveQ() { double oldPres = system.getPressure(); double nyPres = system.getPressure(); - double iterations = 1; + int iterations = 0; double error = 100.0; double numericdQdVdP = 0.0; double dQdV = 0.0; @@ -79,34 +79,24 @@ public double solveQ() { double pressureStep = 1.0; do { iterations++; - oldPres = nyPres; system.init(3); - double dQDVdP = calcdQdVdP(); - - numericdQdVdP = (calcdQdV() - olddQdV) / pressureStep; + oldPres = nyPres; + double dqdv = calcdQdV(); + double dqdvdp = calcdQdVdP(); + nyPres = oldPres - iterations / (iterations + 100.0) * dqdv / dqdvdp; + pressureStep = nyPres - oldPres; - if (iterations < 5) { - nyPres = oldPres - 1.0 / 10.0 * calcdQdV() / dQDVdP; - } else { - nyPres = oldPres - 1.0 * calcdQdV() / numericdQdVdP; - } if (nyPres <= 0.0) { nyPres = oldPres * 0.9; } - if (nyPres >= oldPres * 2) { - nyPres = oldPres * 2.0; - } - pressureStep = nyPres - oldPres; - - olddQdV = calcdQdV(); system.setPressure(nyPres); tpFlash.run(); - error = Math.abs(calcdQdV()) / system.getVolume(); + + error = Math.abs(dqdv / Vfractionspec); // System.out.println("error " + error + "iteration " + iterations + " dQdv " + calcdQdV() // + " new pressure " + nyPres + " error " + Math.abs((nyPres - oldPres) / (nyPres)) - // + " numberofphases " + system.getNumberOfPhases() + " dQDVdP " + dQDVdP + " dQDVdPnumeric" - // + numericdQdVdP); - } while ((error > 1e-9 && iterations < 200) || iterations < 3); + // + " numberofphases " + system.getNumberOfPhases()); + } while ((error > 1e-6 && Math.abs(pressureStep) > 1e-6 && iterations < 200) || iterations < 6); return nyPres; } @@ -114,6 +104,13 @@ public double solveQ() { @Override public void run() { tpFlash.run(); + if (system.getNumberOfPhases() == 1) { + do { + system.setPressure(system.getPressure() * 0.9); + tpFlash.run(); + } while (system.getNumberOfPhases() == 1); + } + // System.out.println("enthalpy: " + system.getEnthalpy()); solveQ(); diff --git a/src/test/java/neqsim/standards/oilquality/Standard_ASTM_D6377Test.java b/src/test/java/neqsim/standards/oilquality/Standard_ASTM_D6377Test.java index b3250037d..7bd7196b8 100644 --- a/src/test/java/neqsim/standards/oilquality/Standard_ASTM_D6377Test.java +++ b/src/test/java/neqsim/standards/oilquality/Standard_ASTM_D6377Test.java @@ -20,7 +20,7 @@ void testCalculate() { Standard_ASTM_D6377 standard = new Standard_ASTM_D6377(testSystem); standard.setReferenceTemperature(37.8, "C"); standard.calculate(); - Assertions.assertEquals(1.10455465, standard.getValue("RVP", "bara"), 1e-3); + Assertions.assertEquals(1.10445689545, standard.getValue("RVP", "bara"), 1e-3); Assertions.assertEquals(1.666298367, standard.getValue("TVP", "bara"), 1e-3); } @@ -40,14 +40,38 @@ void testCalculate2() { standard.setMethodRVP("VPCR4"); standard.setReferenceTemperature(37.8, "C"); standard.calculate(); - Assertions.assertEquals(3.6145219653041623, standard.getValue("RVP", "bara"), 1e-3); + Assertions.assertEquals(3.61452722, standard.getValue("RVP", "bara"), 1e-3); Assertions.assertEquals(7.867696779327479, standard.getValue("TVP", "bara"), 1e-3); standard.setMethodRVP("RVP_ASTM_D6377"); standard.setReferenceTemperature(37.8, "C"); standard.calculate(); - Assertions.assertEquals(3.014511319063671, standard.getValue("RVP", "bara"), 1e-3); - Assertions.assertEquals(7.867696779327479 - , standard.getValue("TVP", "bara"), 1e-3); + Assertions.assertEquals(3.01451570813, standard.getValue("RVP", "bara"), 1e-3); + Assertions.assertEquals(7.867696779327479, standard.getValue("TVP", "bara"), 1e-3); + } + + @Test + void testCalculate3() { + SystemInterface testSystem = new SystemSrkEos(273.15 + 2.0, 1.0); + testSystem.addComponent("n-pentane", 0.545); + testSystem.addComponent("nC10", 0.545); + testSystem.addComponent("nC12", 0.545); + testSystem.addTBPfraction("C11", 0.545, 145.0 / 1000.0, 0.82); + testSystem.setMixingRule(2); + testSystem.setMultiPhaseCheck(true); + testSystem.init(0); + testSystem.setPressure(100.0); + Standard_ASTM_D6377 standard = new Standard_ASTM_D6377(testSystem); + standard.setMethodRVP("VPCR4"); + standard.setReferenceTemperature(37.8, "C"); + standard.calculate(); + Assertions.assertEquals(0.25505060, standard.getValue("RVP", "bara"), 1e-3); + Assertions.assertEquals(0.261765909821, standard.getValue("TVP", "bara"), 1e-3); + + standard.setMethodRVP("RVP_ASTM_D6377"); + standard.setReferenceTemperature(37.8, "C"); + standard.calculate(); + Assertions.assertEquals(0.2127122042, standard.getValue("RVP", "bara"), 1e-3); + Assertions.assertEquals(0.2617659098, standard.getValue("TVP", "bara"), 1e-3); } }