diff --git a/src/main/java/neqsim/processSimulation/processEquipment/distillation/Condenser.java b/src/main/java/neqsim/processSimulation/processEquipment/distillation/Condenser.java index cc534c6ac..fe803c528 100644 --- a/src/main/java/neqsim/processSimulation/processEquipment/distillation/Condenser.java +++ b/src/main/java/neqsim/processSimulation/processEquipment/distillation/Condenser.java @@ -133,7 +133,7 @@ public void run(UUID id) { } catch (Exception e) { e.printStackTrace(); } - mixedStream.getThermoSystem().init(2); + mixedStream.getThermoSystem().init(3); // mixedStream.getThermoSystem().prettyPrint(); mixedStreamSplitter = new Splitter("splitter", mixedStream, 2); diff --git a/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java b/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java index 988d860b8..977e8fe04 100644 --- a/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java +++ b/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java @@ -12,6 +12,7 @@ import neqsim.processSimulation.processEquipment.separator.Separator; import neqsim.processSimulation.processEquipment.stream.Stream; import neqsim.processSimulation.processEquipment.stream.StreamInterface; +import neqsim.thermo.system.SystemInterface; import neqsim.thermodynamicOperations.ThermodynamicOperations; /** @@ -141,14 +142,17 @@ public void init() { ((MixerInterface) trays.get(numberOfTrays - 1)) .addStream(trays.get(feedTrayNumber).getGasOutStream()); - ((Mixer) trays.get(numberOfTrays - 1)).getStream(0).getThermoSystem() - .setTotalNumberOfMoles(((Mixer) trays.get(numberOfTrays - 1)).getStream(0).getThermoSystem() - .getTotalNumberOfMoles() * (1.0)); + // ((Mixer) trays.get(numberOfTrays - 1)).getStream(0).getThermoSystem() + // .setTotalNumberOfMoles(((Mixer) trays.get(numberOfTrays - + // 1)).getStream(0).getThermoSystem() + // .getTotalNumberOfMoles() * (1.0)); ((MixerInterface) trays.get(0)).addStream(trays.get(feedTrayNumber).getLiquidOutStream()); int streamNumbReboil = (trays.get(0)).getNumberOfInputStreams() - 1; - ((Mixer) trays.get(0)).getStream(streamNumbReboil).getThermoSystem().setTotalNumberOfMoles( - ((Mixer) trays.get(0)).getStream(streamNumbReboil).getThermoSystem().getTotalNumberOfMoles() - * (1.0)); + // ((Mixer) + // trays.get(0)).getStream(streamNumbReboil).getThermoSystem().setTotalNumberOfMoles( + // ((Mixer) + // trays.get(0)).getStream(streamNumbReboil).getThermoSystem().getTotalNumberOfMoles() + // * (1.0)); // ((Runnable) trays.get(numberOfTrays - 1)).run(); ((Runnable) trays.get(0)).run(); @@ -198,6 +202,9 @@ public void init() { ((MixerInterface) trays.get(0)).replaceStream(streamNumb, trays.get(1).getLiquidOutStream()); trays.get(0).init(); ((Runnable) trays.get(0)).run(); + + // massBalanceCheck(); + } /** @@ -315,7 +322,8 @@ public void run(UUID id) { for (int i = 0; i < numberOfTrays; i++) { trays.get(i).setPressure(bottomTrayPressure - i * dp); } - getTray(feedTrayNumber).getStream(0).setThermoSystem(feedStream.getThermoSystem().clone()); + SystemInterface inpS = (SystemInterface) feedStream.getThermoSystem().clone(); + getTray(feedTrayNumber).getStream(0).setThermoSystem(inpS); if (numberOfTrays == 1) { ((SimpleTray) trays.get(0)).run(id); @@ -347,6 +355,7 @@ public void run(UUID id) { ((SimpleTray) trays.get(i - 1)).run(id); } int streamNumb = trays.get(0).getNumberOfInputStreams() - 1; + trays.get(0).setPressure(bottomTrayPressure); ((Mixer) trays.get(0)).replaceStream(streamNumb, trays.get(1).getLiquidOutStream()); ((SimpleTray) trays.get(0)).run(id); @@ -365,6 +374,14 @@ public void run(UUID id) { trays.get(i + 1).getLiquidOutStream()); ((SimpleTray) trays.get(i)).run(id); } + for (int i = 1; i <= numberOfTrays - 1; i++) { + int replaceStream = trays.get(i).getNumberOfInputStreams() - 2; + if (i == (numberOfTrays - 1)) { + replaceStream = trays.get(i).getNumberOfInputStreams() - 1; + } + ((Mixer) trays.get(i)).replaceStream(replaceStream, trays.get(i - 1).getGasOutStream()); + ((SimpleTray) trays.get(i)).run(id); + } for (int i = 0; i < numberOfTrays; i++) { err += Math.abs( oldtemps[i] - ((MixerInterface) trays.get(i)).getThermoSystem().getTemperature()); @@ -372,8 +389,8 @@ public void run(UUID id) { logger.info("error iter " + err + " iteration " + iter); // System.out.println("error iter " + err + " iteration " + iter); // massBalanceCheck(); - } while (err > 1e-4 && err < errOld && iter < maxNumberOfIterations); // && - // !massBalanceCheck()); + } while (err > 1e-4 && iter < maxNumberOfIterations); // && + // !massBalanceCheck()); // massBalanceCheck(); // componentMassBalanceCheck("water"); gasOutStream.setThermoSystem( diff --git a/src/test/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumnTest.java b/src/test/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumnTest.java index ec79554c5..8c2d4f517 100644 --- a/src/test/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumnTest.java +++ b/src/test/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumnTest.java @@ -131,7 +131,7 @@ public void DistillationColumnTest() throws Exception { @Test public void deethanizerTest() throws Exception { neqsim.thermo.system.SystemInterface gasToDeethanizer = - new neqsim.thermo.system.SystemSrkEos(216.0, 30.00); + new neqsim.thermo.system.SystemSrkEos(216, 30.00); gasToDeethanizer.addComponent("nitrogen", 1.67366E-3); gasToDeethanizer.addComponent("CO2", 1.06819E-4); gasToDeethanizer.addComponent("methane", 5.14168E-1); @@ -146,15 +146,18 @@ public void deethanizerTest() throws Exception { gasToDeethanizer.setMixingRule("classic"); Stream gasToDeethanizerStream = new Stream("gasToDeethanizer", gasToDeethanizer); + gasToDeethanizerStream.setFlowRate(100.0, "kg/hr"); gasToDeethanizerStream.run(); + // gasToDeethanizerStream.getFluid().prettyPrint(); + DistillationColumn column = new DistillationColumn(5, true, true); column.setName("Deethanizer"); - column.addFeedStream(gasToDeethanizerStream, 3); - column.getCondenser().setOutTemperature(210.0); - column.getReboiler().setOutTemperature(373.15); - column.setTopPressure(30.0); - column.setBottomPressure(30.0); + column.addFeedStream(gasToDeethanizerStream, 4); + column.getCondenser().setOutTemperature(gasToDeethanizerStream.getTemperature() - 1.0); + column.getReboiler().setOutTemperature(gasToDeethanizerStream.getTemperature() + 100.0); + column.setTopPressure(28.0); + column.setBottomPressure(32.0); column.run(); double massbalance = (gasToDeethanizerStream.getFlowRate("kg/hr") @@ -164,9 +167,7 @@ public void deethanizerTest() throws Exception { assertEquals(0.0, massbalance, 0.2); // column.getCondenser().getGasOutStream().getFluid().prettyPrint(); - // column.getReboiler().getGasOutStream().getFluid().prettyPrint(); - - + // column.getReboiler().getLiquidOutStream().getFluid().prettyPrint(); } /** @@ -178,7 +179,7 @@ public void debutanizerTest() throws Exception { new neqsim.thermo.system.SystemSrkEos(289.0, 11.00); gasToDbutanizer.addComponent("nitrogen", 3.09189E-7); gasToDbutanizer.addComponent("CO2", 2.20812E-4); - gasToDbutanizer.addComponent("methane", 0.07192E-1); + gasToDbutanizer.addComponent("methane", 0.7192E-1); gasToDbutanizer.addComponent("ethane", 0.15433E-1); gasToDbutanizer.addComponent("propane", 2.01019E-1); gasToDbutanizer.addComponent("i-butane", 2.953E-2); @@ -192,27 +193,28 @@ public void debutanizerTest() throws Exception { StreamInterface gasToDebutanizerStream = new Stream("gasToDbutanizer", gasToDbutanizer); gasToDebutanizerStream.run(); - DistillationColumn column = new DistillationColumn(5, true, true); + gasToDebutanizerStream.getFluid().prettyPrint(); + + DistillationColumn column = new DistillationColumn(1, true, true); column.setName("Deethanizer"); - column.addFeedStream(gasToDebutanizerStream, 3); - ((Condenser) column.getCondenser()).setRefluxRatio(0.5); + column.addFeedStream(gasToDebutanizerStream, 1); + ((Condenser) column.getCondenser()).setRefluxRatio(0.1); ((Condenser) column.getCondenser()).setTotalCondenser(true); - column.getReboiler().setOutTemperature(393.15); - column.setTopPressure(11.0); - column.setBottomPressure(11.0); - column.run(); - column.run(); + column.getCondenser().setOutTemperature(gasToDbutanizer.getTemperature() - 10.0); + column.getReboiler().setOutTemperature(gasToDbutanizer.getTemperature() + 50.0); + column.setTopPressure(9.0); + column.setBottomPressure(13.0); column.run(); - ((Condenser) column.getCondenser()).getProductOutStream().getFluid().prettyPrint(); + // ((Condenser) column.getCondenser()).getProductOutStream().getFluid().prettyPrint(); - column.getReboiler().getLiquidOutStream().getFluid().prettyPrint(); + // column.getReboiler().getLiquidOutStream().getFluid().prettyPrint(); double massbalance = (gasToDebutanizerStream.getFlowRate("kg/hr") - column.getReboiler().getLiquidOutStream().getFlowRate("kg/hr") - ((Condenser) column.getCondenser()).getProductOutStream().getFlowRate("kg/hr")) / gasToDebutanizerStream.getFlowRate("kg/hr") * 100; - // assertEquals(0.0, massbalance, 0.2); + assertEquals(0.0, massbalance, 0.2); } }