Skip to content

Commit

Permalink
566 set flow rate from a splitter (#567)
Browse files Browse the repository at this point in the history
* added flow method to splitter

* updated valve calc
  • Loading branch information
EvenSol committed Nov 15, 2022
1 parent 8d7f7ad commit d44cb31
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ public class Splitter extends ProcessEquipmentBaseClass implements SplitterInter
StreamInterface[] splitStream;
protected int splitNumber = 1;
double[] splitFactor = new double[1];
double[] flowRates;
String flowUnit = "mole/sec";



/**
* <p>
Expand Down Expand Up @@ -96,6 +100,7 @@ public void setSplitNumber(int i) {
splitNumber = i;
splitFactor = new double[splitNumber];
splitFactor[0] = 1.0;
setInletStream(inletStream);
}

/**
Expand All @@ -121,18 +126,71 @@ public void setSplitFactors(double[] splitFact) {
setInletStream(inletStream);
}

/**
* <p>
* setFlowRates.
* </p>
*
* @param setFlowRates an array of {@link double} objects
*/
public void setFlowRates(double[] flowRates, String flowUnit) {
if (flowRates.length != splitNumber) {
setInletStream(inletStream);
}
this.flowRates = flowRates;
this.flowUnit = flowUnit;
double sum = 0.0;
for (int i = 0; i < flowRates.length; i++) {
if (flowRates[i] > -0.1) {
sum += flowRates[i];
}
}

for (int i = 0; i < flowRates.length; i++) {
if (flowRates[i] < -0.1) {
flowRates[i] = inletStream.getFlowRate(flowUnit) - sum;
}
}
splitFactor = new double[flowRates.length];
for (int i = 0; i < flowRates.length; i++) {
splitFactor[i] = flowRates[i] / sum;
}
splitNumber = splitFactor.length;
setInletStream(inletStream);
}

public void calcSplitFactors() {
double sum = 0.0;
for (int i = 0; i < splitNumber; i++) {
if (flowRates[i] > -0.1) {
splitFactor[i] = flowRates[i] / inletStream.getFlowRate(flowUnit);
sum += splitFactor[i];
}
}

for (int i = 0; i < splitNumber; i++) {
if (flowRates[i] < -0.1) {
splitFactor[i] = 1 - 0 - sum;
}
}


}

/** {@inheritDoc} */
@Override
public void setInletStream(StreamInterface inletStream) {
this.inletStream = inletStream;
splitStream = new Stream[splitNumber];
try {
for (int i = 0; i < splitNumber; i++) {
// System.out.println("splitting...." + i);
splitStream[i] = new Stream("Split Stream", inletStream.getThermoSystem().clone());
if (splitStream == null || splitStream.length != splitNumber) {
splitStream = new Stream[splitNumber];
try {
for (int i = 0; i < splitNumber; i++) {
// System.out.println("splitting...." + i);
splitStream[i] = new Stream("Split Stream", inletStream.getThermoSystem().clone());
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}

Expand All @@ -146,6 +204,11 @@ public StreamInterface getSplitStream(int i) {
@Override
public void run(UUID id) {
double totSplit = 0.0;

if (flowRates != null) {
calcSplitFactors();
}

for (int i = 0; i < splitNumber; i++) {
if (splitFactor[i] < 0) {
logger.debug("split factor negative = " + splitFactor[i]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class ThrottlingValve extends TwoPortEquipment implements ValveInterface

SystemInterface thermoSystem;
double pressure = 0.0;
private double Cv = 1.0;
private double Cv;
private double maxMolarFlow = 1000.0;
private double minMolarFlow = 0.0;
private double percentValveOpening = 100.0;
Expand Down Expand Up @@ -194,7 +194,15 @@ public void run(UUID id) {
* Math.sqrt(
(inStream.getThermoSystem().getPressure() - outStream.getThermoSystem().getPressure())
/ thermoSystem.getDensity()));
valveCvSet = true;
}

percentValveOpening = inStream.getThermoSystem().getTotalNumberOfMoles() / (getCv()) * 100.0
/ Math.sqrt(
(inStream.getThermoSystem().getPressure() - outStream.getThermoSystem().getPressure())
/ thermoSystem.getDensity());


molarFlow = getCv() * getPercentValveOpening() / 100.0
* Math.sqrt(
(inStream.getThermoSystem().getPressure() - outStream.getThermoSystem().getPressure())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.junit.jupiter.api.Test;
import neqsim.processSimulation.processEquipment.stream.Stream;
import neqsim.processSimulation.processEquipment.stream.StreamInterface;
import neqsim.processSimulation.processEquipment.valve.ThrottlingValve;
import neqsim.processSimulation.processSystem.ProcessSystem;
import neqsim.thermo.system.SystemSrkEos;

Expand Down Expand Up @@ -45,8 +46,55 @@ public void testRun() {
processOps.run();
//((StreamInterface)processOps.getUnit("stream 1")).displayResult();
//((StreamInterface)processOps.getUnit("stream 2")).displayResult();
assertEquals(((StreamInterface)processOps.getUnit("stream 1")).getFluid().getComponent("methane").getx(), 1.0, 1e-6);
assertEquals(((StreamInterface)processOps.getUnit("stream 2")).getFluid().getComponent("methane").getx(), 0.0, 1e-6);
assertEquals(((StreamInterface) processOps.getUnit("stream 1")).getFluid()
.getComponent("methane").getx(), 1.0, 1e-6);
assertEquals(((StreamInterface) processOps.getUnit("stream 2")).getFluid()
.getComponent("methane").getx(), 0.0, 1e-6);
}

@Test
public void testRunSplitter() {
testSystem = new SystemSrkEos(298.0, 10.0);
testSystem.addComponent("methane", 100.0);
testSystem.addComponent("ethane", 10.0);
testSystem.addComponent("propane", 10.0);
processOps = new ProcessSystem();
Stream inletStream = new Stream("inletStream", testSystem);
inletStream.setName("inlet stream");
inletStream.setPressure(pressure_inlet, "bara");
inletStream.setTemperature(temperature_inlet, "C");
inletStream.setFlowRate(gasFlowRate, "MSm3/day");

Splitter splitter = new Splitter(inletStream);
splitter.setSplitNumber(2);
splitter.setFlowRates(new double[] {4.0, 1.0}, "MSm3/day");
// splitter.setFlowRates(new double[] {-1.0, 1.0}, "MSm3/day");

StreamInterface stream1 = splitter.getSplitStream(0);
StreamInterface stream2 = splitter.getSplitStream(1);

ThrottlingValve valve1 = new ThrottlingValve(stream1);
valve1.setCv(500.0);
valve1.setOutletPressure(5.0);

processOps.add(inletStream);
processOps.add(splitter);
processOps.add(stream1);
processOps.add(stream2);
processOps.add(valve1);

processOps.run();

assertEquals(stream1.getFlowRate("MSm3/day"), 4.0, 1e-6);
assertEquals(stream2.getFlowRate("MSm3/day"), 1.0, 1e-6);
System.out.println("valve opening " + valve1.getPercentValveOpening());

splitter.setFlowRates(new double[] {-1, 4.9}, "MSm3/day");
processOps.run();

System.out.println("valve opening " + valve1.getPercentValveOpening());
assertEquals(0.1, splitter.getSplitStream(0).getFlowRate("MSm3/day"), 1e-6);
assertEquals(4.9, splitter.getSplitStream(1).getFlowRate("MSm3/day"), 1e-6);
}

}

0 comments on commit d44cb31

Please sign in to comment.