Skip to content

Commit

Permalink
Antisurgetest (#1100)
Browse files Browse the repository at this point in the history
* added test

* update

* update calculator

* update

* update
  • Loading branch information
EvenSol authored Sep 20, 2024
1 parent adcb555 commit 13b3125
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public void setInletPressure(double pressure) {
@Override
public void setInletStream(StreamInterface stream) {
this.inStream = stream;
this.outStream = inStream.clone();
}

/** {@inheritDoc} */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1002,6 +1002,8 @@ public boolean isSurge(double flow, double head) {
/** {@inheritDoc} */
@Override
public double getDistanceToSurge() {
getCompressorChart().getSurgeCurve();
getCompressorChart().getSurgeCurve().getSurgeFlow(getPolytropicFluidHead());
return (getInletStream().getFlowRate("m3/hr")
- getCompressorChart().getSurgeCurve().getSurgeFlow(getPolytropicFluidHead()))
/ getCompressorChart().getSurgeCurve().getSurgeFlow(getPolytropicFluidHead());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import org.apache.logging.log4j.Logger;
import neqsim.processSimulation.processEquipment.ProcessEquipmentBaseClass;
import neqsim.processSimulation.processEquipment.ProcessEquipmentInterface;
import neqsim.processSimulation.processEquipment.compressor.Compressor;
import neqsim.processSimulation.processEquipment.splitter.Splitter;

/**
* <p>
Expand Down Expand Up @@ -71,10 +73,28 @@ public boolean needRecalculation() {
return false;
}

public void runAntiSurgeCalc(UUID id) {
Compressor compressor = (Compressor) inputVariable.get(0);
double distToSurge = compressor.getDistanceToSurge();
double flowInAntiSurge = 1e-6;
if (distToSurge < 0) {
flowInAntiSurge = -distToSurge * compressor.getInletStream().getFlowRate("MSm3/day");
}

Splitter anitSurgeSplitter = (Splitter) outputVariable;

anitSurgeSplitter.setFlowRates(new double[] {-1, flowInAntiSurge}, "MSm3/day");

}

/** {@inheritDoc} */
@Override
public void run(UUID id) {
double sum = 0.0;
if (name.equals("anti surge calculator")) {
runAntiSurgeCalc(id);
return;
}

if (name.equals("MEG makeup calculator")) {
for (int i = 0; i < inputVariable.size(); i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import neqsim.processSimulation.processEquipment.compressor.Compressor;
import neqsim.processSimulation.processEquipment.heatExchanger.Cooler;
import neqsim.processSimulation.processEquipment.heatExchanger.Heater;
import neqsim.processSimulation.processEquipment.mixer.Mixer;
import neqsim.processSimulation.processEquipment.pump.Pump;
import neqsim.processSimulation.processEquipment.separator.Separator;
import neqsim.processSimulation.processEquipment.splitter.Splitter;
import neqsim.processSimulation.processEquipment.stream.Stream;
import neqsim.processSimulation.processEquipment.stream.StreamInterface;
import neqsim.processSimulation.processEquipment.util.Calculator;
import neqsim.processSimulation.processEquipment.util.Recycle;
import neqsim.processSimulation.processEquipment.valve.ThrottlingValve;
import neqsim.thermo.system.SystemInterface;
Expand Down Expand Up @@ -122,7 +127,109 @@ public void runProcess() throws InterruptedException {
assertEquals(seprator3rdStage.getGasOutStream().getFlowRate("kg/hr"),
coolerLP.getOutletStream().getFlowRate("kg/hr"), 1e-4);

// System.out.println("recycle flow " + recycle1.getOutletStream().getFlowRate("kg/hr"));
// System.out.println("recycle flow " +
// recycle1.getOutletStream().getFlowRate("kg/hr"));
// valveLP1.getOutletStream().getFluid().prettyPrint();
}

@Test
public void runAntiSurgeProcess() throws InterruptedException {
SystemInterface thermoSystem = new SystemSrkEos(298.0, 10.0);
thermoSystem.addComponent("nitrogen", 1.0);
thermoSystem.addComponent("CO2", 1.0);
thermoSystem.addComponent("methane", 51.0);
thermoSystem.addComponent("ethane", 1.0);
thermoSystem.setMixingRule("classic");

Stream gas_from_separator = new Stream("feed stream", thermoSystem);
gas_from_separator.setPressure(55.0, "bara");
gas_from_separator.setTemperature(30.0, "C");
gas_from_separator.setFlowRate(7.0, "MSm3/day");
gas_from_separator.run();

Stream recyclegasstream = gas_from_separator.clone();
recyclegasstream.setFlowRate(1.2, "MSm3/day");
recyclegasstream.run();

Mixer gasmixer = new Mixer("gas mixer");
gasmixer.addStream(gas_from_separator);
gasmixer.addStream(recyclegasstream);
gasmixer.run();

Compressor gascompressor = new Compressor("gas compressor");
gascompressor.setInletStream(gasmixer.getOutletStream());
gascompressor.setOutletPressure(90.0, "bara");
gascompressor.run();

double fluidh = gascompressor.getPolytropicFluidHead();

// gascompressor.generateCompressorCurves();

neqsim.processSimulation.processEquipment.compressor.CompressorChartGenerator compchartgenerator =
new neqsim.processSimulation.processEquipment.compressor.CompressorChartGenerator(
gascompressor);
gascompressor.setCompressorChart(compchartgenerator.generateCompressorChart("mid range"));


Cooler gascooler = new Cooler("gas cooler");
gascooler.setInletStream(gascompressor.getOutletStream());
gascooler.setOutTemperature(30.0, "C");
gascooler.run();

Separator gassep = new Separator("gas separator");
gassep.setInletStream(gascooler.getOutletStream());
gassep.run();

Splitter gassplitter = new Splitter("gas splitter");
gassplitter.setInletStream(gassep.getGasOutStream());
gassplitter.setFlowRates(new double[] {7.0, 1.2}, "MSm3/day");
gassplitter.run();

ThrottlingValve antisurgevalve = new ThrottlingValve("gas valve");
antisurgevalve.setInletStream(gassplitter.getSplitStream(1));
antisurgevalve.setOutletPressure(55.0, "bara");
antisurgevalve.run();

Recycle recycl = new Recycle("rec");
recycl.addStream(antisurgevalve.getOutletStream());
recycl.setOutletStream(recyclegasstream);
recycl.run();

Calculator antisurgeCalculator = new Calculator("anti surge calculator");
antisurgeCalculator.addInputVariable(gascompressor);
antisurgeCalculator.setOutputVariable(gassplitter);

neqsim.processSimulation.processSystem.ProcessSystem operations =
new neqsim.processSimulation.processSystem.ProcessSystem();
operations.add(gas_from_separator);
operations.add(recyclegasstream);
operations.add(gasmixer);
operations.add(gascompressor);
operations.add(gascooler);
operations.add(gassep);
operations.add(gassplitter);
operations.add(antisurgevalve);
operations.add(recycl);
operations.add(antisurgeCalculator);
operations.run();
gascompressor.setOutletPressure(90.0);

gascompressor.getCompressorChart().setUseCompressorChart(false);
operations.run();
assertEquals(6.9999999, gassplitter.getSplitStream(0).getFlowRate("MSm3/day"), 1e-4);
assertEquals(1e-6, gassplitter.getSplitStream(1).getFlowRate("MSm3/day"), 1e-4);
assertEquals(4685.039100, gascompressor.getCompressorChart().getSurgeCurve()
.getSurgeFlow(gascompressor.getPolytropicFluidHead()), 1e-4);
assertEquals(90.0, gascompressor.getOutletPressure(), 1e-4);



gas_from_separator.setFlowRate(2.0, "MSm3/day");
operations.run();
assertEquals(1.36857161, gassplitter.getSplitStream(1).getFlowRate("MSm3/day"), 1e-4);
assertEquals(1.99999997741, gassplitter.getSplitStream(0).getFlowRate("MSm3/day"), 1e-4);
assertEquals(4671.5920797, gascompressor.getCompressorChart().getSurgeCurve()
.getSurgeFlow(gascompressor.getPolytropicFluidHead()), 1e-4);
assertEquals(90.0, gascompressor.getOutletPressure(), 1e-4);
}
}

0 comments on commit 13b3125

Please sign in to comment.