names = processdesign.getProcess().getAllUnitNames();
for (int i = 0; i < names.size(); i++) {
try {
- if (!((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)) == null)) {
- cost += ((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)))
- .getMechanicalDesign().getCostEstimate().getTotaltCost();
+ if (!((ProcessEquipmentInterface) this.processdesign.getProcess()
+ .getUnit(names.get(i)) == null)) {
+ cost +=
+ ((ProcessEquipmentInterface) this.processdesign.getProcess().getUnit(names.get(i)))
+ .getMechanicalDesign().getCostEstimate().getTotaltCost();
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
diff --git a/src/main/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesign.java b/src/main/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesign.java
index e8b170438..54d67fd3d 100644
--- a/src/main/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesign.java
+++ b/src/main/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesign.java
@@ -36,6 +36,10 @@ public SystemMechanicalDesign(ProcessSystem processSystem) {
this.processSystem = processSystem;
}
+ public ProcessSystem getProcess() {
+ return processSystem;
+ }
+
/**
*
* setCompanySpecificDesignStandards.
@@ -45,7 +49,7 @@ public SystemMechanicalDesign(ProcessSystem processSystem) {
*/
public void setCompanySpecificDesignStandards(String name) {
for (int i = 0; i < this.processSystem.getUnitOperations().size(); i++) {
- this.processSystem.getUnitOperations().get(i).getMechanicalDesign()
+ this.getProcess().getUnitOperations().get(i).getMechanicalDesign()
.setCompanySpecificDesignStandards(name);
}
}
@@ -60,6 +64,8 @@ public void runDesignCalculation() {
for (int i = 0; i < names.size(); i++) {
try {
if (!((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)) == null)) {
+ ((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)))
+ .initMechanicalDesign();
((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)))
.getMechanicalDesign().calcDesign();
totalPlotSpace += ((ProcessEquipmentInterface) this.processSystem.getUnit(names.get(i)))
@@ -133,6 +139,25 @@ public int getTotalNumberOfModules() {
return numberOfModules;
}
+ /**
+ *
+ * getMechanicalWeight.
+ *
+ *
+ * @param unit a {@link java.lang.String} object
+ * @return a double
+ */
+ public double getMechanicalWeight(String unit) {
+ double weight = 0.0;
+ for (int i = 0; i < processSystem.getUnitOperations().size(); i++) {
+ processSystem.getUnitOperations().get(i).getMechanicalDesign().calcDesign();
+ System.out.println("Name " + processSystem.getUnitOperations().get(i).getName() + " weight "
+ + processSystem.getUnitOperations().get(i).getMechanicalDesign().getWeightTotal());
+ weight += processSystem.getUnitOperations().get(i).getMechanicalDesign().getWeightTotal();
+ }
+ return weight;
+ }
+
/** {@inheritDoc} */
@Override
public int hashCode() {
diff --git a/src/main/java/neqsim/processSimulation/mechanicalDesign/pipeline/PipelineMechanicalDesign.java b/src/main/java/neqsim/processSimulation/mechanicalDesign/pipeline/PipelineMechanicalDesign.java
index 2be8af57d..e648a8ff0 100644
--- a/src/main/java/neqsim/processSimulation/mechanicalDesign/pipeline/PipelineMechanicalDesign.java
+++ b/src/main/java/neqsim/processSimulation/mechanicalDesign/pipeline/PipelineMechanicalDesign.java
@@ -66,17 +66,11 @@ public void calcDesign() {
// ASME/ANSI Code B31.8
if (designStandardCode.equals("ANSI/ASME Standard B31.8")) {
- wallThickness = ((AdiabaticPipe) getProcessEquipment()).getMechanicalDesign()
- .getMaxOperationPressure() * innerDiameter
- / (2.0
- * ((AdiabaticPipe) getProcessEquipment()).getMechanicalDesign()
- .getMaterialPipeDesignStandard().getDesignFactor()
- * ((AdiabaticPipe) getProcessEquipment()).getMechanicalDesign()
- .getMaterialPipeDesignStandard().getEfactor()
- * ((AdiabaticPipe) getProcessEquipment()).getMechanicalDesign()
- .getMaterialPipeDesignStandard().getTemperatureDeratingFactor()
- * ((AdiabaticPipe) getProcessEquipment()).getMechanicalDesign()
- .getMaterialPipeDesignStandard().getMinimumYeildStrength());
+ wallThickness = getMaxOperationPressure() * innerDiameter
+ / (2.0 * getMaterialPipeDesignStandard().getDesignFactor()
+ * getMaterialPipeDesignStandard().getEfactor()
+ * getMaterialPipeDesignStandard().getTemperatureDeratingFactor()
+ * getMaterialPipeDesignStandard().getMinimumYeildStrength());
} else if (designStandardCode.equals("ANSI/ASME Standard B31.3")) {
wallThickness = 0.0001; // to be implemented
// ((AdiabaticPipe)
@@ -128,9 +122,9 @@ public static void main(String args[]) {
operations.add(stream_1);
operations.add(pipe);
- operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("Statoil");
- operations.getSystemMechanicalDesign().runDesignCalculation();
- operations.getSystemMechanicalDesign().setDesign();
+ // operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("Statoil");
+ // operations.getSystemMechanicalDesign().runDesignCalculation();
+ // operations.getSystemMechanicalDesign().setDesign();
operations.run();
}
}
diff --git a/src/main/java/neqsim/processSimulation/mechanicalDesign/valve/ValveMechanicalDesign.java b/src/main/java/neqsim/processSimulation/mechanicalDesign/valve/ValveMechanicalDesign.java
index 66c173711..248bdb2b2 100644
--- a/src/main/java/neqsim/processSimulation/mechanicalDesign/valve/ValveMechanicalDesign.java
+++ b/src/main/java/neqsim/processSimulation/mechanicalDesign/valve/ValveMechanicalDesign.java
@@ -68,6 +68,7 @@ public void calcDesign() {
valveCvMax = valve1.getThermoSystem().getVolume("m3/hr")
* Math.sqrt(valve1.getThermoSystem().getDensity("kg/m3") / 1000.0 / dP);
valveWeight = valveCvMax * 100.0;
+ setWeightTotal(valveWeight);
}
/** {@inheritDoc} */
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentBaseClass.java b/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentBaseClass.java
index 404d287a4..8ceaacab5 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentBaseClass.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentBaseClass.java
@@ -119,6 +119,10 @@ public MechanicalDesign getMechanicalDesign() {
return new MechanicalDesign(this);
}
+ /** {@inheritDoc} */
+ @Override
+ public void initMechanicalDesign() {}
+
/** {@inheritDoc} */
@Override
public String getSpecification() {
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentInterface.java b/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentInterface.java
index f7e2860ab..fc1507259 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentInterface.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/ProcessEquipmentInterface.java
@@ -23,6 +23,15 @@ public interface ProcessEquipmentInterface extends SimulationInterface {
*/
public String[][] reportResults();
+ /**
+ *
+ * Get a initMechanicalDesign
for the equipment.
+ *
+ **/
+ default void initMechanicalDesign() {
+
+ }
+
/**
*
* Get a mechanicalDesign
for the equipment.
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java b/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java
index 1334c660a..988d860b8 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/distillation/DistillationColumn.java
@@ -400,7 +400,8 @@ public void displayResult() {
*
* component componentMassBalanceCheck.
*
- *
+ *
+ * @param componentName component name to heck mass balance for
* @return a boolean
*/
public boolean componentMassBalanceCheck(String componentName) {
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/manifold/Manifold.java b/src/main/java/neqsim/processSimulation/processEquipment/manifold/Manifold.java
index e9981d04e..5779920dc 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/manifold/Manifold.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/manifold/Manifold.java
@@ -40,6 +40,8 @@ public Manifold() {
*
* Constructor for Splitter with name as input.
*
+ *
+ * @param name name of manifold
*/
public Manifold(String name) {
super(name);
@@ -72,7 +74,8 @@ public StreamInterface getSplitStream(int i) {
*
* getMixedStream.
*
- *
+ *
+ * @return a {@link neqsim.processSimulation.processEquipment.stream.StreamInterface}
**/
public StreamInterface getMixedStream() {
return localmixer.getOutletStream();
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/pipeline/Pipeline.java b/src/main/java/neqsim/processSimulation/processEquipment/pipeline/Pipeline.java
index 0a0b337f7..47152a99d 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/pipeline/Pipeline.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/pipeline/Pipeline.java
@@ -46,6 +46,8 @@ public class Pipeline extends TwoPortEquipment implements PipeLineInterface {
double[] outerHeatTransferCoeffs = {1e-5, 1e-5}; // , 1e-5, 1e-5, 1e-5};
double[] wallHeatTransferCoeffs = {1e-5, 1e-5}; // , 1e-5, 1e-5, 1e-5};
+ PipelineMechanicalDesign pipelineMechanicalDesign = null;
+
/**
*
* Constructor for Pipeline.
@@ -93,6 +95,12 @@ public Pipeline(String name, StreamInterface inStream) {
super(name, inStream);
}
+ @Override
+ public void initMechanicalDesign() {
+ pipelineMechanicalDesign = new PipelineMechanicalDesign(this);
+ }
+
+
/**
* {@inheritDoc}
*
@@ -101,7 +109,7 @@ public Pipeline(String name, StreamInterface inStream) {
*/
@Override
public PipelineMechanicalDesign getMechanicalDesign() {
- return new PipelineMechanicalDesign(this);
+ return pipelineMechanicalDesign;
}
/** {@inheritDoc} */
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/separator/Separator.java b/src/main/java/neqsim/processSimulation/processEquipment/separator/Separator.java
index 422cbde23..e3ababd76 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/separator/Separator.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/separator/Separator.java
@@ -68,6 +68,8 @@ public class Separator extends ProcessEquipmentBaseClass implements SeparatorInt
private double designLiquidLevelFraction = 0.8;
ArrayList separatorSection = new ArrayList();
+ SeparatorMechanicalDesign separatorMechanicalDesign;
+
/**
* Constructor for Separator.
*/
@@ -118,7 +120,12 @@ public Separator(String name, StreamInterface inletStream) {
*/
@Override
public SeparatorMechanicalDesign getMechanicalDesign() {
- return new SeparatorMechanicalDesign(this);
+ return separatorMechanicalDesign;
+ }
+
+ @Override
+ public void initMechanicalDesign() {
+ separatorMechanicalDesign = new SeparatorMechanicalDesign(this);
}
/**
diff --git a/src/main/java/neqsim/processSimulation/processEquipment/valve/ThrottlingValve.java b/src/main/java/neqsim/processSimulation/processEquipment/valve/ThrottlingValve.java
index 6ceff707c..6fd0fae3b 100644
--- a/src/main/java/neqsim/processSimulation/processEquipment/valve/ThrottlingValve.java
+++ b/src/main/java/neqsim/processSimulation/processEquipment/valve/ThrottlingValve.java
@@ -1,6 +1,7 @@
package neqsim.processSimulation.processEquipment.valve;
import java.util.UUID;
+import neqsim.processSimulation.mechanicalDesign.valve.ValveMechanicalDesign;
import neqsim.processSimulation.processEquipment.TwoPortEquipment;
import neqsim.processSimulation.processEquipment.stream.StreamInterface;
import neqsim.thermo.system.SystemInterface;
@@ -31,6 +32,7 @@ public class ThrottlingValve extends TwoPortEquipment implements ValveInterface
double molarFlow = 0.0;
private String pressureUnit = "bara";
private boolean acceptNegativeDP = true;
+ ValveMechanicalDesign valveMechanicalDesign;
/**
*
@@ -430,4 +432,20 @@ public boolean isAcceptNegativeDP() {
public void setAcceptNegativeDP(boolean acceptNegativeDP) {
this.acceptNegativeDP = acceptNegativeDP;
}
+
+ @Override
+ public void initMechanicalDesign() {
+ valveMechanicalDesign = new ValveMechanicalDesign(this);
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return a {@link neqsim.processSimulation.mechanicalDesign.valve.ValveMechanicalDesign} object
+ */
+ @Override
+ public ValveMechanicalDesign getMechanicalDesign() {
+ return valveMechanicalDesign;
+ }
}
diff --git a/src/main/java/neqsim/processSimulation/processSystem/ProcessSystem.java b/src/main/java/neqsim/processSimulation/processSystem/ProcessSystem.java
index 22f009503..2f3cc2bce 100644
--- a/src/main/java/neqsim/processSimulation/processSystem/ProcessSystem.java
+++ b/src/main/java/neqsim/processSimulation/processSystem/ProcessSystem.java
@@ -13,9 +13,7 @@
import org.apache.logging.log4j.Logger;
import neqsim.processSimulation.SimulationBaseClass;
import neqsim.processSimulation.conditionMonitor.ConditionMonitor;
-import neqsim.processSimulation.costEstimation.CostEstimateBaseClass;
import neqsim.processSimulation.measurementDevice.MeasurementDeviceInterface;
-import neqsim.processSimulation.mechanicalDesign.SystemMechanicalDesign;
import neqsim.processSimulation.processEquipment.ProcessEquipmentBaseClass;
import neqsim.processSimulation.processEquipment.ProcessEquipmentInterface;
import neqsim.processSimulation.processEquipment.util.Recycle;
@@ -714,28 +712,6 @@ public void setName(String name) {
this.name = name;
}
- /**
- *
- * Get a SystemMechanicalDesign object from processSystem.
- *
- *
- * @return a new SystemMechanicalDesign object
- */
- public SystemMechanicalDesign getSystemMechanicalDesign() {
- return new SystemMechanicalDesign(this);
- }
-
- /**
- *
- * Get a CostEstimateBaseClass object from processSystem.
- *
- *
- * @return a new CostEstimateBaseClass object
- */
- public CostEstimateBaseClass getCostEstimator() {
- return new CostEstimateBaseClass(this);
- }
-
/**
*
* getEntropyProduction.
@@ -840,25 +816,6 @@ public double getHeaterDuty(String unit) {
return heat;
}
- /**
- *
- * getMechanicalWeight.
- *
- *
- * @param unit a {@link java.lang.String} object
- * @return a double
- */
- public double getMechanicalWeight(String unit) {
- double weight = 0.0;
- for (int i = 0; i < unitOperations.size(); i++) {
- unitOperations.get(i).getMechanicalDesign().calcDesign();
- System.out.println("Name " + unitOperations.get(i).getName() + " weight "
- + unitOperations.get(i).getMechanicalDesign().getWeightTotal());
- weight += unitOperations.get(i).getMechanicalDesign().getWeightTotal();
- }
- return weight;
- }
-
/**
*
* Getter for the field surroundingTemperature
.
diff --git a/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModule.java b/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModule.java
index 22734e141..5ff7a2884 100644
--- a/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModule.java
+++ b/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModule.java
@@ -42,7 +42,9 @@ public class SeparationTrainModule extends ProcessModuleBaseClass {
double exportOilTemperature = 273.15 + 30;
/**
- *
Constructor for SeparationTrainModule.
+ *
+ * Constructor for SeparationTrainModule.
+ *
*
* @param name a {@link java.lang.String} object
*/
@@ -303,16 +305,17 @@ public static void main(String[] args) {
((ProcessEquipmentInterface) separationModule.getOperations().getUnit("2nd stage recompressor"))
.getMechanicalDesign().displayResults();
- operations.getSystemMechanicalDesign().runDesignCalculation();
- operations.getSystemMechanicalDesign().getTotalPlotSpace();
- System.out.println("Modules " + operations.getSystemMechanicalDesign().getTotalVolume());
-
- System.out
- .println("Modules " + operations.getSystemMechanicalDesign().getTotalNumberOfModules());
- System.out.println("Weight " + operations.getSystemMechanicalDesign().getTotalWeight());
- System.out.println("Plot space " + operations.getSystemMechanicalDesign().getTotalPlotSpace());
- System.out.println("CAPEX " + operations.getCostEstimator().getWeightBasedCAPEXEstimate());
- System.out.println("CAPEX " + operations.getCostEstimator().getCAPEXestimate());
+ // operations.getSystemMechanicalDesign().runDesignCalculation();
+ // operations.getSystemMechanicalDesign().getTotalPlotSpace();
+ // System.out.println("Modules " + operations.getSystemMechanicalDesign().getTotalVolume());
+
+ // System.out
+ // .println("Modules " + operations.getSystemMechanicalDesign().getTotalNumberOfModules());
+ // System.out.println("Weight " + operations.getSystemMechanicalDesign().getTotalWeight());
+ // System.out.println("Plot space " +
+ // operations.getSystemMechanicalDesign().getTotalPlotSpace());
+ // System.out.println("CAPEX " + operations.getCostEstimator().getWeightBasedCAPEXEstimate());
+ // System.out.println("CAPEX " + operations.getCostEstimator().getCAPEXestimate());
/*
* separationModule.getOutputStream("Inlet separator").displayResult();
diff --git a/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModuleSimple.java b/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModuleSimple.java
index 8c8e08269..40e159496 100644
--- a/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModuleSimple.java
+++ b/src/main/java/neqsim/processSimulation/processSystem/processModules/SeparationTrainModuleSimple.java
@@ -40,7 +40,9 @@ public class SeparationTrainModuleSimple extends ProcessModuleBaseClass {
double exportOilTemperature = 273.15 + 30;
/**
- * Constructor for SeparationTrainModuleSimple.
+ *
+ * Constructor for SeparationTrainModuleSimple.
+ *
*
* @param name a {@link java.lang.String} object
*/
@@ -299,16 +301,16 @@ public static void main(String[] args) {
((ProcessEquipmentInterface) separationModule.getOperations().getUnit("2nd stage recompressor"))
.getMechanicalDesign().displayResults();
- operations.getSystemMechanicalDesign().runDesignCalculation();
- operations.getSystemMechanicalDesign().getTotalPlotSpace();
- System.out.println("Modules " + operations.getSystemMechanicalDesign().getTotalVolume());
+ //operations.getSystemMechanicalDesign().runDesignCalculation();
+ //operations.getSystemMechanicalDesign().getTotalPlotSpace();
+ //System.out.println("Modules " + operations.getSystemMechanicalDesign().getTotalVolume());
- System.out
- .println("Modules " + operations.getSystemMechanicalDesign().getTotalNumberOfModules());
- System.out.println("Weight " + operations.getSystemMechanicalDesign().getTotalWeight());
- System.out.println("Plot space " + operations.getSystemMechanicalDesign().getTotalPlotSpace());
- System.out.println("CAPEX " + operations.getCostEstimator().getWeightBasedCAPEXEstimate());
- System.out.println("CAPEX " + operations.getCostEstimator().getCAPEXestimate());
+ //System.out
+ // .println("Modules " + operations.getSystemMechanicalDesign().getTotalNumberOfModules());
+ //System.out.println("Weight " + operations.getSystemMechanicalDesign().getTotalWeight());
+ //System.out.println("Plot space " + operations.getSystemMechanicalDesign().getTotalPlotSpace());
+ //System.out.println("CAPEX " + operations.getCostEstimator().getWeightBasedCAPEXEstimate());
+ //System.out.println("CAPEX " + operations.getCostEstimator().getCAPEXestimate());
/*
* separationModule.getOutputStream("Inlet separator").displayResult();
diff --git a/src/test/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesignTest.java b/src/test/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesignTest.java
new file mode 100644
index 000000000..e26e9228f
--- /dev/null
+++ b/src/test/java/neqsim/processSimulation/mechanicalDesign/SystemMechanicalDesignTest.java
@@ -0,0 +1,200 @@
+package neqsim.processSimulation.mechanicalDesign;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import neqsim.processSimulation.costEstimation.CostEstimateBaseClass;
+import neqsim.processSimulation.mechanicalDesign.pipeline.PipelineMechanicalDesign;
+import neqsim.processSimulation.mechanicalDesign.separator.SeparatorMechanicalDesign;
+import neqsim.processSimulation.mechanicalDesign.valve.ValveMechanicalDesign;
+import neqsim.processSimulation.processEquipment.heatExchanger.Heater;
+import neqsim.processSimulation.processEquipment.pipeline.AdiabaticPipe;
+import neqsim.processSimulation.processEquipment.pump.Pump;
+import neqsim.processSimulation.processEquipment.separator.Separator;
+import neqsim.processSimulation.processEquipment.stream.Stream;
+import neqsim.processSimulation.processEquipment.stream.StreamInterface;
+import neqsim.processSimulation.processEquipment.util.Recycle;
+import neqsim.processSimulation.processEquipment.valve.ThrottlingValve;
+import neqsim.thermo.system.SystemInterface;
+import neqsim.thermo.system.SystemSrkEos;
+
+public class SystemMechanicalDesignTest {
+ static neqsim.processSimulation.processSystem.ProcessSystem operations;
+
+ @BeforeAll
+ static void createProcess() {
+ SystemInterface thermoSystem = new SystemSrkEos(298.0, 10.0);
+ thermoSystem.addComponent("water", 51.0);
+ thermoSystem.addComponent("nitrogen", 51.0);
+ thermoSystem.addComponent("CO2", 51.0);
+ thermoSystem.addComponent("methane", 51.0);
+ thermoSystem.addComponent("ethane", 51.0);
+ thermoSystem.addComponent("propane", 51.0);
+ thermoSystem.addComponent("i-butane", 51.0);
+ thermoSystem.addComponent("n-butane", 51.0);
+ thermoSystem.addComponent("iC5", 51.0);
+ thermoSystem.addComponent("nC5", 1.0);
+
+ thermoSystem.addTBPfraction("C6", 1.0, 86.0 / 1000.0, 0.66);
+ thermoSystem.addTBPfraction("C7", 1.0, 91.0 / 1000.0, 0.74);
+ thermoSystem.addTBPfraction("C8", 1.0, 103.0 / 1000.0, 0.77);
+ thermoSystem.addTBPfraction("C9", 1.0, 117.0 / 1000.0, 0.79);
+ thermoSystem.addPlusFraction("C10_C12", 1.0, 145.0 / 1000.0, 0.80);
+ thermoSystem.addPlusFraction("C13_C14", 1.0, 181.0 / 1000.0, 0.8279);
+ thermoSystem.addPlusFraction("C15_C16", 1.0, 212.0 / 1000.0, 0.837);
+ thermoSystem.addPlusFraction("C17_C19", 1.0, 248.0 / 1000.0, 0.849);
+ thermoSystem.addPlusFraction("C20_C22", 1.0, 289.0 / 1000.0, 0.863);
+ thermoSystem.addPlusFraction("C23_C25", 1.0, 330.0 / 1000.0, 0.875);
+ thermoSystem.addPlusFraction("C26_C30", 1.0, 387.0 / 1000.0, 0.88);
+ thermoSystem.addPlusFraction("C31_C38", 1.0, 471.0 / 1000.0, 0.90);
+ thermoSystem.addPlusFraction("C38_C80", 1.0, 662.0 / 1000.0, 0.92);
+ thermoSystem.setMixingRule("classic");
+ thermoSystem.setMultiPhaseCheck(true);
+ thermoSystem.setMolarComposition(new double[] {0.034266, 0.005269, 0.039189, 0.700553, 0.091154,
+ 0.050908, 0.007751, 0.014665, 0.004249, 0.004878, 0.004541, 0.007189, 0.006904, 0.004355,
+ 0.007658, 0.003861, 0.003301, 0.002624, 0.001857, 0.001320, 0.001426, 0.001164, 0.000916});
+ // thermoSystem.prettyPrint();
+
+ Stream feedStream = new Stream("feed stream", thermoSystem);
+ feedStream.setFlowRate(604094, "kg/hr");
+ feedStream.setTemperature(25.5, "C");
+ feedStream.setPressure(26.0, "bara");
+
+ neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator seprator1stStage =
+ new neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator(
+ "1st stage separator", feedStream);
+
+ ThrottlingValve valve1 = new ThrottlingValve("valve1", seprator1stStage.getLiquidOutStream());
+ valve1.setOutletPressure(19.0);
+
+ Heater oilHeater = new Heater("oil heater", valve1.getOutletStream());
+ oilHeater.setOutTemperature(359.0);
+
+ neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator seprator2ndStage =
+ new neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator(
+ "2nd stage separator", oilHeater.getOutletStream());
+
+ ThrottlingValve valve2 = new ThrottlingValve("valve2", seprator2ndStage.getLiquidOutStream());
+ valve2.setOutletPressure(2.7);
+
+ StreamInterface recircstream1 = valve2.getOutletStream().clone();
+ recircstream1.setName("oilRecirc1");
+ recircstream1.setFlowRate(1e-6, "kg/hr");
+
+ neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator seprator3rdStage =
+ new neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator(
+ "3rd stage separator");
+ seprator3rdStage.addStream(valve2.getOutletStream());
+ seprator3rdStage.addStream(recircstream1);
+
+ ThrottlingValve pipeloss1st =
+ new ThrottlingValve("pipeloss1st", seprator3rdStage.getGasOutStream());
+ pipeloss1st.setOutletPressure(2.7 - 0.03);
+
+ Heater coolerLP = new Heater("cooler LP", pipeloss1st.getOutletStream());
+ coolerLP.setOutTemperature(273.15 + 25.0);
+
+ Separator sepregenGas = new Separator("sepregenGas", coolerLP.getOutletStream());
+
+ Pump oil1pump = new Pump("oil1pump", sepregenGas.getLiquidOutStream());
+ oil1pump.setOutletPressure(19.);
+
+ ThrottlingValve valveLP1 = new ThrottlingValve("valvseLP1", oil1pump.getOutletStream());
+ valveLP1.setOutletPressure(2.7);
+
+ Recycle recycle1 = new Recycle("oil recirc 1");
+ recycle1.addStream(valveLP1.getOutletStream());
+ recycle1.setOutletStream(recircstream1);
+
+ operations = new neqsim.processSimulation.processSystem.ProcessSystem();
+ operations.add(feedStream);
+ operations.add(seprator1stStage);
+ operations.add(valve1);
+ operations.add(oilHeater);
+ operations.add(seprator2ndStage);
+ operations.add(valve2);
+ operations.add(recircstream1);
+ operations.add(seprator3rdStage);
+ operations.add(pipeloss1st);
+ operations.add(coolerLP);
+ operations.add(sepregenGas);
+ operations.add(oil1pump);
+ operations.add(valveLP1);
+ operations.add(recycle1);
+
+ operations.run();
+ }
+
+ @Test
+ void testRunDesignCalculationforProcess() {
+ // Test to run desgn calculation for a full process using the
+ // SystemMechanicalDesign class
+ SystemMechanicalDesign mecDesign = new SystemMechanicalDesign(operations);
+ mecDesign.runDesignCalculation();
+
+ System.out.println("total process weight " + mecDesign.getTotalWeight() + " kg");
+ System.out.println("total process volume " + mecDesign.getTotalVolume() + " m3");
+ System.out.println("total plot space " + mecDesign.getTotalPlotSpace() + " m2");
+ System.out.println("separator inner diameter "
+ + ((Separator) operations.getUnit("sepregenGas")).getMechanicalDesign().innerDiameter);
+ System.out.println("valve weight "
+ + ((ThrottlingValve) operations.getUnit("valve1")).getMechanicalDesign().getWeightTotal());
+ }
+
+ @Test
+ void testRunDesignCalculationforSeparator() {
+ // Test to run design calculation for a process unit (separator using the
+ // SeparatorMechanicalDesign class)
+ SeparatorMechanicalDesign sepMechDesign =
+ new SeparatorMechanicalDesign((Separator) operations.getUnit("sepregenGas"));
+ sepMechDesign.calcDesign();
+ System.out.println("separator inner diameter " + sepMechDesign.innerDiameter);
+ System.out.println("separator weight vessel shell " + sepMechDesign.weigthVesselShell);
+ System.out.println("separator weight structual steel " + sepMechDesign.weightStructualSteel);
+ }
+
+ @Test
+ void testRunDesignCalculationforValve() {
+ ValveMechanicalDesign valve1MechDesign =
+ new ValveMechanicalDesign((ThrottlingValve) operations.getUnit("valve1"));
+ valve1MechDesign.calcDesign();
+ System.out.println("valve total weight " + valve1MechDesign.getWeightTotal());
+ }
+
+ @Test
+ void testRunDesignForPipeline() {
+
+ AdiabaticPipe pipe = new AdiabaticPipe("pipe1",
+ ((neqsim.processSimulation.processEquipment.separator.ThreePhaseSeparator) operations
+ .getUnit("1st stage separator")).getGasOutStream());
+ pipe.setDiameter(1.0);
+ pipe.setLength(1000.0);
+ pipe.setPipeWallRoughness(10e-6);
+ pipe.setInletElevation(0.0);
+ pipe.setOutletElevation(20.0);
+
+ pipe.run();
+
+ System.out.println("out pressure " + pipe.getOutletStream().getPressure("bara"));
+
+ PipelineMechanicalDesign pipeMechDesign = new PipelineMechanicalDesign(pipe);
+ pipeMechDesign.setMaxOperationPressure(100.0);
+ pipeMechDesign.setMaxOperationTemperature(273.155 + 60.0);
+ pipeMechDesign.setMinOperationPressure(50.0);
+ pipeMechDesign.setMaxDesignGassVolumeFlow(100.0);
+ pipeMechDesign.setCompanySpecificDesignStandards("Statoil");
+ pipeMechDesign.calcDesign();
+
+ System.out.println("wall thickness " + pipeMechDesign.getWallThickness());
+ }
+
+ @Test
+ void testCostEstimateProcess() {
+ SystemMechanicalDesign mecDesign = new SystemMechanicalDesign(operations);
+ mecDesign.runDesignCalculation();
+
+ CostEstimateBaseClass costEst = new CostEstimateBaseClass(mecDesign);
+ costEst.getWeightBasedCAPEXEstimate();
+
+ System.out.println("weight based cost estmate " + costEst.getWeightBasedCAPEXEstimate());
+ }
+}
diff --git a/src/test/java/neqsim/processSimulation/util/example/OffshoreProcess3.java b/src/test/java/neqsim/processSimulation/util/example/OffshoreProcess3.java
index 06a011c28..755a59453 100644
--- a/src/test/java/neqsim/processSimulation/util/example/OffshoreProcess3.java
+++ b/src/test/java/neqsim/processSimulation/util/example/OffshoreProcess3.java
@@ -346,6 +346,6 @@ public static void main(String[] args) {
System.out.println("Power " + operations.getPower("W") / 1.0e6 + " MW");
System.out.println("exergy change " + operations.getExergyChange("J"));
- System.out.println("total weight " + operations.getMechanicalWeight("kg") + " kg");
+ // System.out.println("total weight " + operations.getMechanicalWeight("kg") + " kg");
}
}
diff --git a/src/test/java/neqsim/processSimulation/util/example/simpleGasScrubber.java b/src/test/java/neqsim/processSimulation/util/example/simpleGasScrubber.java
index 8da90b91a..fcc028f20 100644
--- a/src/test/java/neqsim/processSimulation/util/example/simpleGasScrubber.java
+++ b/src/test/java/neqsim/processSimulation/util/example/simpleGasScrubber.java
@@ -5,51 +5,53 @@
import neqsim.thermodynamicOperations.ThermodynamicOperations;
/**
- * simpleGasScrubber class.
+ *
+ * simpleGasScrubber class.
+ *
*
* @author asmund
* @version $Id: $Id
* @since 2.2.3
*/
public class simpleGasScrubber {
- /**
- * This method is just meant to test the thermo package.
- *
- * @param args an array of {@link java.lang.String} objects
- */
- @SuppressWarnings("unused")
- public static void main(String args[]) {
- neqsim.thermo.system.SystemInterface testSystem =
- new neqsim.thermo.system.SystemSrkEos((273.15 + 25.0), 20.00);
- testSystem.addComponent("methane", 1200.00);
- testSystem.addComponent("water", 1200.0);
- testSystem.createDatabase(true);
- testSystem.setMixingRule(2);
- ThermodynamicOperations testOps = new ThermodynamicOperations(testSystem);
- testOps.TPflash();
+ /**
+ * This method is just meant to test the thermo package.
+ *
+ * @param args an array of {@link java.lang.String} objects
+ */
+ @SuppressWarnings("unused")
+ public static void main(String args[]) {
+ neqsim.thermo.system.SystemInterface testSystem =
+ new neqsim.thermo.system.SystemSrkEos((273.15 + 25.0), 20.00);
+ testSystem.addComponent("methane", 1200.00);
+ testSystem.addComponent("water", 1200.0);
+ testSystem.createDatabase(true);
+ testSystem.setMixingRule(2);
+ ThermodynamicOperations testOps = new ThermodynamicOperations(testSystem);
+ testOps.TPflash();
- Stream stream_1 = new Stream("Stream1", testSystem);
+ Stream stream_1 = new Stream("Stream1", testSystem);
- GasScrubberSimple gasScrubber = new GasScrubberSimple("Scrubber", stream_1);
- // gasScrubber.addScrubberSection("mesh");
- // gasScrubber.addScrubberSection("mesh2");
- Stream stream_2 = new Stream("gas from scrubber", gasScrubber.getGasOutStream());
- Stream stream_3 = new Stream("liquid from scrubber", gasScrubber.getLiquidOutStream());
+ GasScrubberSimple gasScrubber = new GasScrubberSimple("Scrubber", stream_1);
+ // gasScrubber.addScrubberSection("mesh");
+ // gasScrubber.addScrubberSection("mesh2");
+ Stream stream_2 = new Stream("gas from scrubber", gasScrubber.getGasOutStream());
+ Stream stream_3 = new Stream("liquid from scrubber", gasScrubber.getLiquidOutStream());
- neqsim.processSimulation.processSystem.ProcessSystem operations =
- new neqsim.processSimulation.processSystem.ProcessSystem();
- operations.add(stream_1);
- operations.add(gasScrubber);
- operations.add(stream_2);
- operations.add(stream_3);
- operations.run();
- // operations.displayResult();
+ neqsim.processSimulation.processSystem.ProcessSystem operations =
+ new neqsim.processSimulation.processSystem.ProcessSystem();
+ operations.add(stream_1);
+ operations.add(gasScrubber);
+ operations.add(stream_2);
+ operations.add(stream_3);
+ operations.run();
+ // operations.displayResult();
- operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("StatoilTR");
+ // operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("StatoilTR");
- // gasScrubber.getMechanicalDesign().calcDesign();
- // gasScrubber.getMechanicalDesign().displayResults();
- operations.getSystemMechanicalDesign().runDesignCalculation();
- double vol = operations.getSystemMechanicalDesign().getTotalVolume();
- }
+ // gasScrubber.getMechanicalDesign().calcDesign();
+ // gasScrubber.getMechanicalDesign().displayResults();
+ // operations.getSystemMechanicalDesign().runDesignCalculation();
+ // double vol = operations.getSystemMechanicalDesign().getTotalVolume();
+ }
}
diff --git a/src/test/java/neqsim/processSimulation/util/example/testGasScrubber.java b/src/test/java/neqsim/processSimulation/util/example/testGasScrubber.java
index c8501a5cb..6a602a7d7 100644
--- a/src/test/java/neqsim/processSimulation/util/example/testGasScrubber.java
+++ b/src/test/java/neqsim/processSimulation/util/example/testGasScrubber.java
@@ -79,7 +79,7 @@ public static void main(String args[]) {
scrubber.getGasLoadFactor();
// do design of process
- operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("StatoilTR");
+ // operations.getSystemMechanicalDesign().setCompanySpecificDesignStandards("StatoilTR");
// operations.runProcessDesignCalculation();
// prosessdesign do: calculate flow rates of TEG, amine, calculates heat duty
@@ -88,8 +88,8 @@ public static void main(String args[]) {
// operations.runMechanicalDesignCalculation();
// calculates diameters of colums, wall thickness, weight, size of equipment,
// tray spacing
- operations.getSystemMechanicalDesign().runDesignCalculation();
- operations.getSystemMechanicalDesign().setDesign();
+ // operations.getSystemMechanicalDesign().runDesignCalculation();
+ // operations.getSystemMechanicalDesign().setDesign();
operations.run();
scrubber.getGasLoadFactor();
// operations.calcDesign();