Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
EvenSol committed Oct 7, 2024
1 parent d605927 commit 2fbb74f
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/main/java/neqsim/thermo/system/SystemThermo.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -71,49 +71,46 @@ 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;
double olddQdV = 0.0;
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;
}

/** {@inheritDoc} */
@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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand All @@ -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);
}
}

0 comments on commit 2fbb74f

Please sign in to comment.