From 0cf54fb8372eba3e9593824d633ae409ba4b6c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85smund=20V=C3=A5ge=20Fannemel?= <34712686+asmfstatoil@users.noreply.github.com> Date: Sat, 11 Jan 2025 09:37:52 +0100 Subject: [PATCH] feat: Make mixingrule concept generic for phases MixingRuleTypeInterface (#1250) New Interface CPAMixingRuleType Introduce SuperInterface MixingRuleTypeInterface for EosMixingRuleType and CPAMixingRuleType prepare for future cleaner split between types using eos mixing and cpa mixing --- .../NonEquilibriumFluidBoundary.java | 3 - .../InterphaseStirredCellFlow.java | 4 +- .../equipment/ProcessEquipmentInterface.java | 10 +-- ...rChartAlternativeMapLookupExtrapolate.java | 2 + .../MultiStreamHeatExchanger.java | 4 +- .../pipeline/PipeBeggsAndBrills.java | 25 +++--- .../neqsim/process/equipment/tank/Tank.java | 33 ++++++-- .../neqsim/thermo/component/Component.java | 5 +- .../thermo/component/ComponentHydrate.java | 3 + .../thermo/component/ComponentSolid.java | 5 +- .../thermo/mixingrule/CPAMixingRuleType.java | 76 ++++++++++++++++++ .../thermo/mixingrule/CPAMixingRules.java | 34 ++++++-- .../thermo/mixingrule/EosMixingRuleType.java | 2 +- .../mixingrule/MixingRuleTypeInterface.java | 10 +++ src/main/java/neqsim/thermo/phase/Phase.java | 34 +++----- .../neqsim/thermo/phase/PhaseDefault.java | 18 ++++- .../thermo/phase/PhaseDesmukhMather.java | 5 +- .../neqsim/thermo/phase/PhaseDuanSun.java | 5 +- .../thermo/phase/PhaseElectrolyteCPA.java | 8 +- .../thermo/phase/PhaseElectrolyteCPAOld.java | 8 +- .../java/neqsim/thermo/phase/PhaseEos.java | 68 +++++++++++----- .../java/neqsim/thermo/phase/PhaseGE.java | 42 +++++++--- .../java/neqsim/thermo/phase/PhaseGENRTL.java | 16 ++-- .../thermo/phase/PhaseGENRTLmodifiedHV.java | 19 ++--- .../thermo/phase/PhaseGENRTLmodifiedWS.java | 15 ++-- .../neqsim/thermo/phase/PhaseGEUnifac.java | 5 +- .../thermo/phase/PhaseGEUnifacPSRK.java | 8 +- .../thermo/phase/PhaseGEUnifacUMRPRU.java | 8 +- .../neqsim/thermo/phase/PhaseGEWilson.java | 5 +- .../neqsim/thermo/phase/PhaseHydrate.java | 30 ++++++- .../neqsim/thermo/phase/PhaseInterface.java | 80 +++++++++++-------- .../neqsim/thermo/phase/PhasePCSAFTa.java | 8 +- .../java/neqsim/thermo/phase/PhaseSrkCPA.java | 8 +- .../phase/PhaseSrkCPA_proceduralMatrices.java | 8 +- .../java/neqsim/thermo/phase/PhaseUMRCPA.java | 8 +- .../neqsim/thermo/system/SystemInterface.java | 24 +++--- .../neqsim/thermo/system/SystemThermo.java | 63 +++++++++++---- .../util/readwrite/EclipseFluidReadWrite.java | 3 - .../ThermodynamicOperations.java | 3 +- .../process/measurementdevice/nmVOCTest.java | 2 +- .../processmodel/LargeCombinedModelsTest.java | 2 +- .../SalesGasAndStableOilTest.java | 5 +- .../thermo/phase/PhasePCSAFTRahmatTest.java | 2 +- .../thermo/system/SystemThermoTest.java | 6 +- .../system/SystemUMRPRUMCEosNewTest.java | 2 +- 45 files changed, 508 insertions(+), 226 deletions(-) create mode 100644 src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleType.java create mode 100644 src/main/java/neqsim/thermo/mixingrule/MixingRuleTypeInterface.java diff --git a/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/heatmasstransfercalc/nonequilibriumfluidboundary/NonEquilibriumFluidBoundary.java b/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/heatmasstransfercalc/nonequilibriumfluidboundary/NonEquilibriumFluidBoundary.java index 1b2c764b93..acfbfabdd5 100644 --- a/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/heatmasstransfercalc/nonequilibriumfluidboundary/NonEquilibriumFluidBoundary.java +++ b/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/heatmasstransfercalc/nonequilibriumfluidboundary/NonEquilibriumFluidBoundary.java @@ -628,8 +628,5 @@ public void solve() { } while (Math.abs((oldHeatFlux - heatFlux) / heatFlux) > 1e-6 && heatTransferCalc && iterInner < 50); init(); - // System.out.println("iterInner " +iterInner + " temp gas " + - // interphaseSystem.getTemperature(0)+ " temp liq " + - // interphaseSystem.getTemperature(1)); } } diff --git a/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/interphasetransportcoefficient/interphasetwophase/stirredcell/InterphaseStirredCellFlow.java b/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/interphasetransportcoefficient/interphasetwophase/stirredcell/InterphaseStirredCellFlow.java index 3fcf643e43..d2839dc50e 100644 --- a/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/interphasetransportcoefficient/interphasetwophase/stirredcell/InterphaseStirredCellFlow.java +++ b/src/main/java/neqsim/fluidmechanics/flownode/fluidboundary/interphasetransportcoefficient/interphasetwophase/stirredcell/InterphaseStirredCellFlow.java @@ -59,9 +59,7 @@ public double calcInterphaseHeatTransferCoefficient(int phaseNum, double prandtl if (Math.abs(node.getReynoldsNumber()) < 2000) { return 3.66 / node.getHydraulicDiameter(phaseNum) * node.getBulkSystem().getPhase(phaseNum).getPhysicalProperties().getConductivity(); - } - // if turbulent - use chilton colburn analogy - else { + } else { // if turbulent - use chilton colburn analogy double temp = node.getBulkSystem().getPhase(phaseNum).getCp() / node.getBulkSystem().getPhase(phaseNum).getMolarMass() / node.getBulkSystem().getPhase(phaseNum).getNumberOfMolesInPhase() diff --git a/src/main/java/neqsim/process/equipment/ProcessEquipmentInterface.java b/src/main/java/neqsim/process/equipment/ProcessEquipmentInterface.java index ee6b796da8..e72c55f64e 100644 --- a/src/main/java/neqsim/process/equipment/ProcessEquipmentInterface.java +++ b/src/main/java/neqsim/process/equipment/ProcessEquipmentInterface.java @@ -89,8 +89,7 @@ public default boolean needRecalculation() { * setController. *
* - * @param controller a {@link neqsim.process.controllerdevice.ControllerDeviceInterface} - * object + * @param controller a {@link neqsim.process.controllerdevice.ControllerDeviceInterface} object */ public void setController(ControllerDeviceInterface controller); @@ -166,8 +165,7 @@ public default SystemInterface getFluid() { * runConditionAnalysis. * * - * @param refExchanger a - * {@link neqsim.process.equipment.ProcessEquipmentInterface} object + * @param refExchanger a {@link neqsim.process.equipment.ProcessEquipmentInterface} object */ public void runConditionAnalysis(ProcessEquipmentInterface refExchanger); @@ -216,10 +214,10 @@ public default SystemInterface getFluid() { /** *- * toJson. + * Serializes the Process Equipment along with its state to a JSON string. *
* - * @return a String + * @return json string. */ public String toJson(); diff --git a/src/main/java/neqsim/process/equipment/compressor/CompressorChartAlternativeMapLookupExtrapolate.java b/src/main/java/neqsim/process/equipment/compressor/CompressorChartAlternativeMapLookupExtrapolate.java index 8edefe0f2e..1613b24b23 100644 --- a/src/main/java/neqsim/process/equipment/compressor/CompressorChartAlternativeMapLookupExtrapolate.java +++ b/src/main/java/neqsim/process/equipment/compressor/CompressorChartAlternativeMapLookupExtrapolate.java @@ -69,8 +69,10 @@ public ArrayList* Calculates the polytropic head for a given flow and speed by interpolating or extrapolating * between reference compressor curves. + *
*/ @Override public double getPolytropicHead(double flow, double speed) { diff --git a/src/main/java/neqsim/process/equipment/heatexchanger/MultiStreamHeatExchanger.java b/src/main/java/neqsim/process/equipment/heatexchanger/MultiStreamHeatExchanger.java index 5edb27ca94..446a90dd35 100644 --- a/src/main/java/neqsim/process/equipment/heatexchanger/MultiStreamHeatExchanger.java +++ b/src/main/java/neqsim/process/equipment/heatexchanger/MultiStreamHeatExchanger.java @@ -516,9 +516,7 @@ public void run(UUID id) { // Finalize the setup run(); return; - } - - else { + } else { // Run all input and output streams to ensure they are up-to-date for (StreamInterface inStream : inStreams) { inStream.run(id); diff --git a/src/main/java/neqsim/process/equipment/pipeline/PipeBeggsAndBrills.java b/src/main/java/neqsim/process/equipment/pipeline/PipeBeggsAndBrills.java index 428d55227e..04cd65fbba 100644 --- a/src/main/java/neqsim/process/equipment/pipeline/PipeBeggsAndBrills.java +++ b/src/main/java/neqsim/process/equipment/pipeline/PipeBeggsAndBrills.java @@ -178,20 +178,21 @@ public void setPipeSpecification(double nominalDiameter, String pipeSec) { this.nominalDiameter = nominalDiameter; this.PipeSpecSet = true; - neqsim.util.database.NeqSimDataBase database = new neqsim.util.database.NeqSimDataBase(); - java.sql.ResultSet dataSet = - database.getResultSet("SELECT * FROM pipedata where Size='" + nominalDiameter + "'"); - try { - if (dataSet.next()) { - this.pipeThickness = Double.parseDouble(dataSet.getString(pipeSpecification)) / 1000; - this.insideDiameter = - (Double.parseDouble(dataSet.getString("OD"))) / 1000 - 2 * this.pipeThickness; + try (neqsim.util.database.NeqSimDataBase database = new neqsim.util.database.NeqSimDataBase()) { + java.sql.ResultSet dataSet = + database.getResultSet("SELECT * FROM pipedata where Size='" + nominalDiameter + "'"); + try { + if (dataSet.next()) { + this.pipeThickness = Double.parseDouble(dataSet.getString(pipeSpecification)) / 1000; + this.insideDiameter = + (Double.parseDouble(dataSet.getString("OD"))) / 1000 - 2 * this.pipeThickness; + } + } catch (NumberFormatException e) { + logger.error(e.getMessage()); + } catch (SQLException e) { + logger.error(e.getMessage()); } - } catch (NumberFormatException e) { - // TODO Auto-generated catch block - logger.error(e.getMessage()); } catch (SQLException e) { - // TODO Auto-generated catch block logger.error(e.getMessage()); } } diff --git a/src/main/java/neqsim/process/equipment/tank/Tank.java b/src/main/java/neqsim/process/equipment/tank/Tank.java index ae6012ba03..e2e84ff4ae 100644 --- a/src/main/java/neqsim/process/equipment/tank/Tank.java +++ b/src/main/java/neqsim/process/equipment/tank/Tank.java @@ -1,6 +1,8 @@ package neqsim.process.equipment.tank; import java.util.UUID; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import neqsim.process.equipment.ProcessEquipmentBaseClass; import neqsim.process.equipment.mixer.Mixer; import neqsim.process.equipment.stream.Stream; @@ -20,6 +22,8 @@ public class Tank extends ProcessEquipmentBaseClass { /** Serialization version UID. */ private static final long serialVersionUID = 1000; + /** Logger object for class. */ + static Logger logger = LogManager.getLogger(Tank.class); SystemInterface thermoSystem; SystemInterface gasSystem; @@ -148,14 +152,29 @@ public StreamInterface getLiquid() { return getLiquidOutStream(); } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + * + *+ * Calculates the following properties: + *
+ *thermoSystem
including propertiesnumberOfMoles = totalNumberOfMoles * z
.
+ * Number of moles of Component in System. Ideally
+ * numberOfMoles = totalNumberOfMoles * z
.
*/
protected double numberOfMoles = 0.0;
- /** Number of moles of Component in Phase. totalNumberOfMoles * x * beta
. */
+ /** Number of moles of Component in Phase. Ideally totalNumberOfMoles * x * beta
. */
protected double numberOfMolesInPhase = 0.0;
protected double K;
diff --git a/src/main/java/neqsim/thermo/component/ComponentHydrate.java b/src/main/java/neqsim/thermo/component/ComponentHydrate.java
index 96de453f2c..2debe17605 100644
--- a/src/main/java/neqsim/thermo/component/ComponentHydrate.java
+++ b/src/main/java/neqsim/thermo/component/ComponentHydrate.java
@@ -40,6 +40,8 @@ public class ComponentHydrate extends Component {
private double sphericalCoreRadiusHydrate = 0.0;
private double lennardJonesEnergyParameterHydrate = 0.0;
private double lennardJonesMolecularDiameterHydrate = 0.0;
+
+ /** Reference phase containing only this single component, i.e., mixing rules are not relevant. */
PhaseInterface refPhase = null;
/**
@@ -659,6 +661,7 @@ public void setSolidRefFluidPhase(PhaseInterface phase) {
refPhase.setTemperature(273.0);
refPhase.setPressure(1.0);
refPhase.addComponent("water", 10.0, 10.0, 0);
+ refPhase.setMixingRule(null);
refPhase.init(refPhase.getNumberOfMolesInPhase(), 1, 0, PhaseType.GAS, 1.0);
} catch (Exception ex) {
logger.error("error occured", ex);
diff --git a/src/main/java/neqsim/thermo/component/ComponentSolid.java b/src/main/java/neqsim/thermo/component/ComponentSolid.java
index 160be987b6..1a04494e7b 100644
--- a/src/main/java/neqsim/thermo/component/ComponentSolid.java
+++ b/src/main/java/neqsim/thermo/component/ComponentSolid.java
@@ -30,9 +30,11 @@ public class ComponentSolid extends ComponentSrk {
double soldens = 0.0;
boolean CCequation = true;
boolean AntoineSolidequation = true;
- PhaseInterface refPhase = null;
double pureCompFug = 0.0;
+ /** Reference phase containing only this single component, i.e., mixing rules are not relevant. */
+ PhaseInterface refPhase = null;
+
/**
* * Constructor for ComponentSolid. @@ -257,6 +259,7 @@ public void setSolidRefFluidPhase(PhaseInterface phase) { refPhase.getComponent(componentName) .setAttractiveTerm(phase.getComponent(componentName).getAttractiveTermNumber()); refPhase.init(refPhase.getNumberOfMolesInPhase(), 1, 0, PhaseType.GAS, 1.0); + refPhase.setMixingRule(null); // } } catch (Exception ex) { logger.error("error occured", ex); diff --git a/src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleType.java b/src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleType.java new file mode 100644 index 0000000000..4bced12989 --- /dev/null +++ b/src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleType.java @@ -0,0 +1,76 @@ +package neqsim.thermo.mixingrule; + +import neqsim.util.exception.InvalidInputException; + +/** + * Types of CPAMixingRule, relating to different kind of mixing rules relevant for CPA type phases. + * Available types are: + *
+ * getMixingRule. + *
+ * + * @param mr a int + * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object + */ + public CPAMixingRulesInterface getMixingRule(MixingRuleTypeInterface mr) { + if (!CPAMixingRuleType.class.isInstance(mr)) { + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "setMixingRule", "mr")); + } + CPAMixingRuleType cmr = (CPAMixingRuleType) mr; + switch (cmr) { + case CPA_RADOCH: + mixingRuleName = "CPA_Radoch"; + return new CPA_Radoch(); + case PCSAFTA_RADOCH: + mixingRuleName = "PCSAFTa_Radoch"; + return new PCSAFTa_Radoch(); + default: + return new CPA_Radoch(); } } diff --git a/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleType.java b/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleType.java index 59b2ca56c9..cbb36b188d 100644 --- a/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleType.java +++ b/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleType.java @@ -21,7 +21,7 @@ * * @author ASMF */ -public enum EosMixingRuleType { +public enum EosMixingRuleType implements MixingRuleTypeInterface { NO(1), CLASSIC(2), CLASSIC_HV(3), HV(4), WS(5), CPA_MIX(7), CLASSIC_T(8), CLASSIC_T_CPA( 9), CLASSIC_TX_CPA(10); diff --git a/src/main/java/neqsim/thermo/mixingrule/MixingRuleTypeInterface.java b/src/main/java/neqsim/thermo/mixingrule/MixingRuleTypeInterface.java new file mode 100644 index 0000000000..1828417732 --- /dev/null +++ b/src/main/java/neqsim/thermo/mixingrule/MixingRuleTypeInterface.java @@ -0,0 +1,10 @@ +package neqsim.thermo.mixingrule; + +/** + * Dummy Interface to allow Phase object to keep either CPA or EosMixingRuleType + */ +public interface MixingRuleTypeInterface { + + + public int getValue(); +} diff --git a/src/main/java/neqsim/thermo/phase/Phase.java b/src/main/java/neqsim/thermo/phase/Phase.java index 67ae64293c..44b69fbbdf 100644 --- a/src/main/java/neqsim/thermo/phase/Phase.java +++ b/src/main/java/neqsim/thermo/phase/Phase.java @@ -16,7 +16,7 @@ import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentInterface; -import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.thermo.system.SystemInterface; import neqsim.util.exception.InvalidInputException; @@ -76,8 +76,7 @@ public abstract class Phase implements PhaseInterface { public double numberOfMolesInPhase = 0; private int initType = 0; - public boolean mixingRuleDefined = false; - private EosMixingRuleType mixingRuleType = EosMixingRuleType.NO; + protected MixingRuleTypeInterface mixingRuleType; /** Temperature of phase. */ double temperature = 0; @@ -85,6 +84,7 @@ public abstract class Phase implements PhaseInterface { /** Pressure of phase. */ double pressure = 0; + /** Reference phase per component. Relevant for solids and chemicalreactions. */ protected PhaseInterface[] refPhase = null; protected PhaseType pt = PhaseType.GAS; @@ -1328,11 +1328,10 @@ public void initRefPhases(boolean onlyPure, String name) { refPhase[i].addComponent(getComponent(i).getComponentName(), 10.0, 10.0, 0); } refPhase[i].setAttractiveTerm(this.getComponent(i).getAttractiveTermNumber()); - refPhase[i].setMixingRule(this.getEosMixingRuleType().getValue()); + refPhase[i].setMixingRule(this.getMixingRuleType()); refPhase[i].setType(this.getType()); refPhase[i].init(refPhase[i].getNumberOfMolesInPhase(), 1, 0, this.getType(), 1.0); } else { - // System.out.println("ref " + name); if (getComponent(i).isIsTBPfraction() || getComponent(i).isIsPlusFraction()) { refPhase[i].addComponent("default", 10.0, 10.0, 0); refPhase[i].getComponent(0).setMolarMass(this.getComponent(i).getMolarMass()); @@ -1346,7 +1345,7 @@ public void initRefPhases(boolean onlyPure, String name) { } refPhase[i].addComponent(name, 10.0, 10.0, 1); refPhase[i].setAttractiveTerm(this.getComponent(i).getAttractiveTermNumber()); - refPhase[i].setMixingRule(this.getEosMixingRuleType().getValue()); + refPhase[i].setMixingRule(this.getMixingRuleType()); refPhase[i].init(refPhase[i].getNumberOfMolesInPhase(), 2, 0, this.getType(), 1.0); } } @@ -1726,16 +1725,10 @@ public double getdrhodN() { /** {@inheritDoc} */ @Override - public EosMixingRuleType getEosMixingRuleType() { + public MixingRuleTypeInterface getMixingRuleType() { return mixingRuleType; } - /** {@inheritDoc} */ - @Override - public void setMixingRule(int type) { - mixingRuleType = EosMixingRuleType.byValue(type); - } - /** ** calcDiElectricConstant. @@ -2035,20 +2028,13 @@ public final void setBeta(double b) { this.beta = b; } - /** {@inheritDoc} */ - @Override - public void setMixingRuleGEModel(String name) {} - /** {@inheritDoc} */ @Override public boolean isMixingRuleDefined() { - return mixingRuleDefined; - } - - /** {@inheritDoc} */ - @Override - public void setMixingRuleDefined(boolean mixingRuleDefined) { - this.mixingRuleDefined = mixingRuleDefined; + if (mixingRuleType == null) { + return false; + } + return true; } /** {@inheritDoc} */ diff --git a/src/main/java/neqsim/thermo/phase/PhaseDefault.java b/src/main/java/neqsim/thermo/phase/PhaseDefault.java index 9a6d7af3a3..9d46c84874 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseDefault.java +++ b/src/main/java/neqsim/thermo/phase/PhaseDefault.java @@ -1,6 +1,8 @@ package neqsim.thermo.phase; import neqsim.thermo.component.ComponentInterface; +import neqsim.thermo.mixingrule.EosMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -67,7 +69,21 @@ public double molarVolume(double pressure, double temperature, double A, double /** {@inheritDoc} */ @Override - public void resetMixingRule(int type) {} + public EosMixingRulesInterface getMixingRule() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void setMixingRuleGEModel(String name) {} + + /** {@inheritDoc} */ + @Override + public void setMixingRule(MixingRuleTypeInterface mr) {} + + /** {@inheritDoc} */ + @Override + public void resetMixingRule(MixingRuleTypeInterface mr) {} /** {@inheritDoc} */ @Override diff --git a/src/main/java/neqsim/thermo/phase/PhaseDesmukhMather.java b/src/main/java/neqsim/thermo/phase/PhaseDesmukhMather.java index 7f9de17b63..06e99ff9e1 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseDesmukhMather.java +++ b/src/main/java/neqsim/thermo/phase/PhaseDesmukhMather.java @@ -4,6 +4,7 @@ import org.apache.logging.log4j.Logger; import neqsim.thermo.component.ComponentDesmukhMather; import neqsim.thermo.component.ComponentGEInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.exception.IsNaNException; import neqsim.util.exception.TooManyIterationsException; @@ -53,8 +54,8 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); this.aij = new double[numberOfComponents][numberOfComponents]; this.bij = new double[numberOfComponents][numberOfComponents]; try (neqsim.util.database.NeqSimDataBase database = new neqsim.util.database.NeqSimDataBase()) { diff --git a/src/main/java/neqsim/thermo/phase/PhaseDuanSun.java b/src/main/java/neqsim/thermo/phase/PhaseDuanSun.java index 4f9cdca9ca..e5440fb529 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseDuanSun.java +++ b/src/main/java/neqsim/thermo/phase/PhaseDuanSun.java @@ -1,6 +1,7 @@ package neqsim.thermo.phase; import neqsim.thermo.component.ComponentGeDuanSun; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.exception.IsNaNException; import neqsim.util.exception.TooManyIterationsException; @@ -38,8 +39,8 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); this.alpha = mixSelect.getNRTLalpha(); this.Dij = mixSelect.getNRTLDij(); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java index 643e2b234a..c588a59904 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java @@ -10,6 +10,7 @@ import neqsim.thermo.component.ComponentElectrolyteCPA; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -97,9 +98,10 @@ public PhaseElectrolyteCPA clone() { /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class PhaseEos + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(1, this); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java index e5ff32377b..b4d8605047 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java +++ b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java @@ -7,6 +7,7 @@ import neqsim.thermo.component.ComponentEosInterface; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -96,9 +97,10 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class PhaseEos + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(1, this); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseEos.java b/src/main/java/neqsim/thermo/phase/PhaseEos.java index 4373e2d90f..10a8943f5a 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseEos.java +++ b/src/main/java/neqsim/thermo/phase/PhaseEos.java @@ -10,8 +10,10 @@ import org.apache.logging.log4j.Logger; import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentEosInterface; +import neqsim.thermo.mixingrule.EosMixingRuleType; import neqsim.thermo.mixingrule.EosMixingRules; import neqsim.thermo.mixingrule.EosMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.ExcludeFromJacocoGeneratedReport; /** @@ -33,7 +35,8 @@ public abstract class PhaseEos extends Phase implements PhaseEosInterface { private double g = 0; public double delta1 = 0; public double delta2 = 0; - protected EosMixingRules mixSelect = null; + + protected EosMixingRules mixSelect = new EosMixingRules(); protected EosMixingRulesInterface mixRule = null; double uEOS = 0; double wEOS = 0; @@ -60,18 +63,11 @@ public PhaseEos clone() { *
*/ public PhaseEos() { - mixSelect = new EosMixingRules(); componentArray = new ComponentEosInterface[ThermodynamicModelSettings.MAX_NUMBER_OF_COMPONENTS]; mixRule = mixSelect.getMixingRule(1); // solver = new newtonRhapson(); } - /** {@inheritDoc} */ - @Override - public EosMixingRulesInterface getEosMixingRule() { - return mixRule; - } - /** {@inheritDoc} */ @Override @ExcludeFromJacocoGeneratedReport @@ -92,8 +88,8 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType if (pt != PhaseType.GAS) { pt = PhaseType.LIQUID; } - if (!mixingRuleDefined) { - setMixingRule(1); + if (!isMixingRuleDefined()) { + setMixingRule(EosMixingRuleType.byValue(1)); } super.init(totalNumberOfMoles, numberOfComponents, initType, pt, beta); @@ -168,25 +164,56 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - mixingRuleDefined = true; - super.setMixingRule(type); - mixRule = mixSelect.getMixingRule(type, this); + public EosMixingRulesInterface getMixingRule() { + return mixRule; + } + + /** {@inheritDoc} */ + @Override + public EosMixingRulesInterface getEosMixingRule() { + return mixRule; + } + + /** {@inheritDoc} */ + @Override + public void setMixingRule(MixingRuleTypeInterface mr) { + if (!(mr == null) && !EosMixingRuleType.class.isInstance(mr)) { + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "setMixingRule", "mr")); + } + mixingRuleType = mr; + if (mr == null) { + mixRule = null; + } else { + mixRule = mixSelect.getMixingRule(mr.getValue(), this); + } } /** {@inheritDoc} */ @Override public void setMixingRuleGEModel(String name) { - mixRule.setMixingRuleGEModel(name); + if (mixRule == null) { + // do nothing or initialize? + logger.debug("mixRule is null"); + } else { + mixRule.setMixingRuleGEModel(name); + } mixSelect.setMixingRuleGEModel(name); } /** {@inheritDoc} */ @Override - public void resetMixingRule(int type) { - mixingRuleDefined = true; - super.setMixingRule(type); - mixRule = mixSelect.resetMixingRule(type, this); + public void resetMixingRule(MixingRuleTypeInterface mr) { + if (!(mr == null) && !EosMixingRuleType.class.isInstance(mr)) { + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "resetMixingRule", "mr")); + } + mixingRuleType = mr; + if (mr == null) { + mixRule = null; + } else { + mixRule = mixSelect.resetMixingRule(mr.getValue(), this); + } } /** @@ -492,6 +519,9 @@ public double calcBij(int compNumb, int j, PhaseInterface phase, double temperat @Override public double calcBi(int compNumb, PhaseInterface phase, double temperature, double pressure, int numbcomp) { + if (mixRule == null) { + return 0; + } return mixRule.calcBi(compNumb, phase, temperature, pressure, numbcomp); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseGE.java b/src/main/java/neqsim/thermo/phase/PhaseGE.java index 08fc3d1e5e..ed716fa9bb 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGE.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGE.java @@ -11,8 +11,10 @@ import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentGEInterface; +import neqsim.thermo.mixingrule.EosMixingRuleType; import neqsim.thermo.mixingrule.EosMixingRules; import neqsim.thermo.mixingrule.EosMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *@@ -29,7 +31,7 @@ public abstract class PhaseGE extends Phase implements PhaseGEInterface { static Logger logger = LogManager.getLogger(PhaseGE.class); EosMixingRules mixSelect = new EosMixingRules(); - EosMixingRulesInterface mixRuleEos; + EosMixingRulesInterface mixRule; /** *
@@ -123,20 +125,38 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - mixingRuleDefined = true; - // NB! Ignores input type - super.setMixingRule(2); - mixRuleEos = mixSelect.getMixingRule(2, this); + public void setMixingRuleGEModel(String name) { + mixRule.setMixingRuleGEModel(name); + mixSelect.setMixingRuleGEModel(name); } /** {@inheritDoc} */ @Override - public void resetMixingRule(int type) { - mixingRuleDefined = true; - // NB! Ignores input type - super.setMixingRule(2); - mixRuleEos = mixSelect.resetMixingRule(2, this); + public EosMixingRulesInterface getMixingRule() { + return mixRule; + } + + /** {@inheritDoc} */ + @Override + public void setMixingRule(MixingRuleTypeInterface mr) { + if (!(mr == null) && !EosMixingRuleType.class.isInstance(mr)) { + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "setMixingRule", "mr")); + } + mixingRuleType = EosMixingRuleType.byValue(2); + mixRule = mixSelect.getMixingRule(mixingRuleType.getValue(), this); + } + + /** {@inheritDoc} */ + @Override + public void resetMixingRule(MixingRuleTypeInterface mr) { + if (!(mr == null) && !EosMixingRuleType.class.isInstance(mr)) { + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "resetMixingRule", "mr")); + } + // NB! Ignores input mr + mixingRuleType = EosMixingRuleType.byValue(2); + mixRule = mixSelect.resetMixingRule(mixingRuleType.getValue(), this); } /** {@inheritDoc} */ diff --git a/src/main/java/neqsim/thermo/phase/PhaseGENRTL.java b/src/main/java/neqsim/thermo/phase/PhaseGENRTL.java index 5a668c0bd8..9f79542192 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGENRTL.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGENRTL.java @@ -8,6 +8,8 @@ import neqsim.thermo.component.ComponentGEInterface; import neqsim.thermo.component.ComponentGeNRTL; +import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.exception.IsNaNException; import neqsim.util.exception.TooManyIterationsException; @@ -24,7 +26,7 @@ public class PhaseGENRTL extends PhaseGE { private static final long serialVersionUID = 1000; double[][] alpha; - String[][] mixRule; + String[][] mixRuleString; double[][] intparam; double[][] Dij; double GE = 0.0; @@ -50,7 +52,7 @@ public PhaseGENRTL() {} public PhaseGENRTL(PhaseInterface phase, double[][] alpha, double[][] Dij, String[][] mixRule, double[][] intparam) { componentArray = new ComponentGeNRTL[alpha[0].length]; - this.mixRule = mixRule; + this.mixRuleString = mixRule; this.alpha = alpha; this.Dij = Dij; this.intparam = intparam; @@ -60,7 +62,7 @@ public PhaseGENRTL(PhaseInterface phase, double[][] alpha, double[][] Dij, Strin phase.getComponent(i).getNumberOfmoles(), phase.getComponent(i).getNumberOfMolesInPhase(), phase.getComponent(i).getComponentNumber()); } - setMixingRule(2); + setMixingRule(EosMixingRuleType.byValue(2)); } /** {@inheritDoc} */ @@ -72,11 +74,11 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); this.intparam = mixSelect.getSRKbinaryInteractionParameters(); this.alpha = mixSelect.getNRTLalpha(); - this.mixRule = mixSelect.getClassicOrHV(); + this.mixRuleString = mixSelect.getClassicOrHV(); this.Dij = mixSelect.getNRTLDij(); } @@ -118,7 +120,7 @@ public double getExcessGibbsEnergy(PhaseInterface phase, int numberOfComponents, for (int i = 0; i < numberOfComponents; i++) { GE += phase.getComponent(i).getx() * Math.log(((ComponentGEInterface) componentArray[i]).getGamma(phase, numberOfComponents, - temperature, pressure, pt, alpha, Dij, intparam, mixRule)); + temperature, pressure, pt, alpha, Dij, intparam, mixRuleString)); } return R * temperature * numberOfMolesInPhase * GE; diff --git a/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedHV.java b/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedHV.java index 0e2e171503..999853fe31 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedHV.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedHV.java @@ -8,6 +8,7 @@ import neqsim.thermo.component.ComponentGEInterface; import neqsim.thermo.component.ComponentGENRTLmodifiedHV; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -30,7 +31,7 @@ public class PhaseGENRTLmodifiedHV extends PhaseGENRTL { *
*/ public PhaseGENRTLmodifiedHV() { - mixRuleEos = mixSelect.getMixingRule(1); + mixRule = mixSelect.getMixingRule(1); } /** @@ -91,12 +92,12 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); this.DijT = mixSelect.getHVDijT(); this.intparam = mixSelect.getSRKbinaryInteractionParameters(); this.alpha = mixSelect.getHValpha(); - this.mixRule = mixSelect.getClassicOrHV(); + this.mixRuleString = mixSelect.getClassicOrHV(); this.Dij = mixSelect.getHVDij(); } @@ -104,7 +105,7 @@ public void setMixingRule(int type) { @Override public void setParams(PhaseInterface phase, double[][] alpha, double[][] Dij, double[][] DijT, String[][] mixRule, double[][] intparam) { - this.mixRule = mixRule; + this.mixRuleString = mixRule; this.alpha = alpha; this.Dij = Dij; type = 1; @@ -127,13 +128,13 @@ public double getExcessGibbsEnergy(PhaseInterface phase, int numberOfComponents, GE = 0.0; for (int i = 0; i < numberOfComponents; i++) { if (type == 0) { - GE += phase.getComponent(i).getx() - * Math.log(((ComponentGEInterface) componentArray[i]).getGamma(phase, - numberOfComponents, temperature, pressure, pt, alpha, Dij, intparam, mixRule)); + GE += phase.getComponent(i).getx() * Math + .log(((ComponentGEInterface) componentArray[i]).getGamma(phase, numberOfComponents, + temperature, pressure, pt, alpha, Dij, intparam, mixRuleString)); } else if (type == 1) { GE += phase.getComponent(i).getx() * Math .log(((ComponentGENRTLmodifiedHV) componentArray[i]).getGamma(phase, numberOfComponents, - temperature, pressure, pt, alpha, Dij, DijT, intparam, mixRule)); + temperature, pressure, pt, alpha, Dij, DijT, intparam, mixRuleString)); } } return R * phase.getTemperature() * phase.getNumberOfMolesInPhase() * GE; diff --git a/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedWS.java b/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedWS.java index 147ef5befa..329c781d6c 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedWS.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGENRTLmodifiedWS.java @@ -2,6 +2,7 @@ import neqsim.thermo.component.ComponentGEInterface; import neqsim.thermo.component.ComponentGENRTLmodifiedWS; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *@@ -70,11 +71,11 @@ public PhaseGENRTLmodifiedWS(PhaseInterface phase, double[][] alpha, double[][] /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); this.intparam = mixSelect.getWSintparam(); this.alpha = mixSelect.getNRTLalpha(); - this.mixRule = mixSelect.getClassicOrHV(); + this.mixRuleString = mixSelect.getClassicOrHV(); this.Dij = mixSelect.getNRTLDij(); } @@ -94,13 +95,13 @@ public double getExcessGibbsEnergy(PhaseInterface phase, int numberOfComponents, double GE = 0; for (int i = 0; i < numberOfComponents; i++) { if (type == 0) { - GE += phase.getComponent(i).getx() - * Math.log(((ComponentGEInterface) componentArray[i]).getGamma(phase, - numberOfComponents, temperature, pressure, pt, alpha, Dij, intparam, mixRule)); + GE += phase.getComponent(i).getx() * Math + .log(((ComponentGEInterface) componentArray[i]).getGamma(phase, numberOfComponents, + temperature, pressure, pt, alpha, Dij, intparam, mixRuleString)); } else if (type == 1) { GE += phase.getComponent(i).getx() * Math .log(((ComponentGENRTLmodifiedWS) componentArray[i]).getGamma(phase, numberOfComponents, - temperature, pressure, pt, alpha, Dij, DijT, intparam, mixRule)); + temperature, pressure, pt, alpha, Dij, DijT, intparam, mixRuleString)); } } return R * temperature * numberOfMolesInPhase * GE; diff --git a/src/main/java/neqsim/thermo/phase/PhaseGEUnifac.java b/src/main/java/neqsim/thermo/phase/PhaseGEUnifac.java index 6beed8960f..e1febda819 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGEUnifac.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGEUnifac.java @@ -8,6 +8,7 @@ import neqsim.thermo.atomelement.UNIFACgroup; import neqsim.thermo.component.ComponentGEUnifac; import neqsim.thermo.component.ComponentGEUniquac; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -68,8 +69,8 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); if (!checkedGroups) { checkGroups(); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseGEUnifacPSRK.java b/src/main/java/neqsim/thermo/phase/PhaseGEUnifacPSRK.java index 2527ea9475..a5e01a71bd 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGEUnifacPSRK.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGEUnifacPSRK.java @@ -6,6 +6,8 @@ import neqsim.thermo.component.ComponentGEUnifac; import neqsim.thermo.component.ComponentGEUnifacPSRK; import neqsim.thermo.component.ComponentGEUniquac; +import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -50,7 +52,7 @@ public PhaseGEUnifacPSRK(PhaseInterface phase, double[][] alpha, double[][] Dij, phase.getComponent(i).getNumberOfmoles(), phase.getComponent(i).getNumberOfMolesInPhase(), phase.getComponent(i).getComponentNumber()); } - this.setMixingRule(2); + this.setMixingRule(EosMixingRuleType.byValue(2)); } /** {@inheritDoc} */ @@ -62,8 +64,8 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); if (!checkedGroups) { checkGroups(); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseGEUnifacUMRPRU.java b/src/main/java/neqsim/thermo/phase/PhaseGEUnifacUMRPRU.java index b695d54717..a3ad28c6cb 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGEUnifacUMRPRU.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGEUnifacUMRPRU.java @@ -6,6 +6,8 @@ import neqsim.thermo.component.ComponentGEUnifac; import neqsim.thermo.component.ComponentGEUnifacUMRPRU; import neqsim.thermo.component.ComponentGEUniquac; +import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -58,7 +60,7 @@ public PhaseGEUnifacUMRPRU(PhaseInterface phase, double[][] alpha, double[][] Di phase.getComponent(i).getComponentNumber()); componentArray[i].setAttractiveTerm(phase.getComponent(i).getAttractiveTermNumber()); } - this.setMixingRule(2); + this.setMixingRule(EosMixingRuleType.byValue(2)); } /** @@ -113,8 +115,8 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); if (!checkedGroups) { checkGroups(); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseGEWilson.java b/src/main/java/neqsim/thermo/phase/PhaseGEWilson.java index fcb0fa73c2..b23f2a144a 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGEWilson.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGEWilson.java @@ -2,6 +2,7 @@ import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentGEWilson; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.exception.IsNaNException; import neqsim.util.exception.TooManyIterationsException; @@ -77,8 +78,8 @@ public void addComponent(String name, double moles, double molesInPhase, int com /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); + public void setMixingRule(MixingRuleTypeInterface mr) { + super.setMixingRule(mr); } /** {@inheritDoc} */ diff --git a/src/main/java/neqsim/thermo/phase/PhaseHydrate.java b/src/main/java/neqsim/thermo/phase/PhaseHydrate.java index 4678a51c87..d43dba147d 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseHydrate.java +++ b/src/main/java/neqsim/thermo/phase/PhaseHydrate.java @@ -9,6 +9,8 @@ import neqsim.thermo.component.ComponentHydrate; import neqsim.thermo.component.ComponentHydrateGF; import neqsim.thermo.component.ComponentHydratePVTsim; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; +import neqsim.thermo.mixingrule.MixingRulesInterface; /** *
@@ -109,9 +111,33 @@ public void init(double totalNumberOfMoles, int numberOfComponents, int initType setType(PhaseType.HYDRATE); } - /** {@inheritDoc} */ @Override - public void resetMixingRule(int type) {} + public MixingRulesInterface getMixingRule() { + return null; + } + + @Override + public void setMixingRuleGEModel(String name) {} + + /** + * {@inheritDoc} + * + *
+ * Not relevant for PhaseHydrate + *
+ */ + @Override + public void resetMixingRule(MixingRuleTypeInterface mr) {} + + /** + * {@inheritDoc} + * + *+ * Not relevant for PhaseHydrate + *
+ */ + @Override + public void setMixingRule(MixingRuleTypeInterface mr) {} /** *diff --git a/src/main/java/neqsim/thermo/phase/PhaseInterface.java b/src/main/java/neqsim/thermo/phase/PhaseInterface.java index 78f5e9019b..0f7423039c 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseInterface.java +++ b/src/main/java/neqsim/thermo/phase/PhaseInterface.java @@ -12,6 +12,8 @@ import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.component.ComponentInterface; import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; +import neqsim.thermo.mixingrule.MixingRulesInterface; import neqsim.thermo.system.SystemInterface; /** @@ -37,10 +39,10 @@ public interface PhaseInterface extends ThermodynamicConstantsInterface, Cloneab /** *
- * setMoleFractions.
+ * Set x
and normalize for all Components in phase.
*
x
.
+ *
*
- * normalize.
+ * Property x
is the mole fraction of a component in a specific phase. Normalizing,
+ * means that the sum of x
for all Components in a phase equal 1.0.
*
+ * setMixingRule. + *
+ * + * @param mr a MixingRuleTypeInterface + */ + public void setMixingRule(MixingRuleTypeInterface mr); + + /** + *+ * setMixingRule. + *
+ * + * @param mr a int + */ + public default void setMixingRule(int mr) { + setMixingRule(EosMixingRuleType.byValue(mr)); + } + /** ** resetMixingRule. *
* - * @param type a int + * @param mr a int */ - public void resetMixingRule(int type); + public void resetMixingRule(MixingRuleTypeInterface mr); /** * Set the temperature of a phase. @@ -1247,15 +1272,6 @@ public default void setPhysicalProperties() { */ public void setNumberOfComponents(int k); - /** - *- * setMixingRule. - *
- * - * @param type a int - */ - public void setMixingRule(int type); - /** ** getComponents. @@ -1267,10 +1283,10 @@ public default void setPhysicalProperties() { /** *
- * getNumberOfMolesInPhase. + * Get the number of moles the phase contains. *
* - * @return a double + * @return The number of moles in the phase. */ public double getNumberOfMolesInPhase(); @@ -1710,7 +1726,7 @@ public default void setPhysicalProperties() { /** *- * dFdT. + * Calculate derivative of F per Temperature, i.e., dF/dT. *
* * @return a double @@ -1719,7 +1735,7 @@ public default void setPhysicalProperties() { /** *- * dFdV. + * Calculate derivative of F per Volume, i.e., dF/dV. *
* * @return a double @@ -1728,7 +1744,7 @@ public default void setPhysicalProperties() { /** *- * dFdTdV. + * Calculate derivative of F per Temperature and Volume, i.e., dF/dT * 1/dV. *
* * @return a double @@ -1805,11 +1821,18 @@ public default void setPhysicalProperties() { public double getLogInfiniteDiluteFugacity(int k); /** - * Get EOS mixing rule type. + * Get mixing rule. * - * @return a EosMixingRuleType + * @return a MixingRulesInterface */ - public EosMixingRuleType getEosMixingRuleType(); + public MixingRulesInterface getMixingRule(); + + /** + * Get mixing rule type. + * + * @return a MixingRuleTypeInterface + */ + public MixingRuleTypeInterface getMixingRuleType(); /** *@@ -1911,22 +1934,13 @@ public default void setPhaseTypeName(String phaseTypeName) { /** *
- * Getter for property mixingRuleDefined. + * Check if mixing rule is defined. *
* - * @return a boolean + * @return Returns true if MixingRule is defined and false if not. */ public boolean isMixingRuleDefined(); - /** - *- * Setter for property mixingRuleDefined. - *
- * - * @param mixingRuleDefined a boolean - */ - public void setMixingRuleDefined(boolean mixingRuleDefined); - /** ** getActivityCoefficientSymetric. diff --git a/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java b/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java index b658431ce9..95d65b4f0e 100644 --- a/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java +++ b/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java @@ -6,6 +6,7 @@ import neqsim.thermo.component.ComponentPCSAFTa; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -60,9 +61,10 @@ public PhasePCSAFTa clone() { /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class PhaseEos + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(3, this); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java index 4af0bdb7a5..ce0ac31d33 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java @@ -10,6 +10,7 @@ import neqsim.thermo.component.ComponentSrkCPA; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -490,9 +491,10 @@ public void initCPAMatrix(int type) { /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(1, this); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java index 6d4cc06b77..7e5a7e6211 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java +++ b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java @@ -9,6 +9,7 @@ import neqsim.thermo.component.ComponentSrkCPA; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -532,9 +533,10 @@ public void initCPAMatrix(int type) { /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(1, this); } diff --git a/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java b/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java index c7f31e1f06..a1f5e2f791 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java @@ -11,6 +11,7 @@ import neqsim.thermo.component.ComponentUMRCPA; import neqsim.thermo.mixingrule.CPAMixingRules; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
@@ -491,9 +492,10 @@ public void initCPAMatrix(int type) { /** {@inheritDoc} */ @Override - public void setMixingRule(int type) { - super.setMixingRule(type); - // NB! Ignores input type + public void setMixingRule(MixingRuleTypeInterface mr) { + // NB! Sets EOS mixing rule in parent class + super.setMixingRule(mr); + // NB! Ignores input mr, uses CPA cpamix = cpaSelect.getMixingRule(1, this); } diff --git a/src/main/java/neqsim/thermo/system/SystemInterface.java b/src/main/java/neqsim/thermo/system/SystemInterface.java index c9670cc04c..e98bd59e7a 100644 --- a/src/main/java/neqsim/thermo/system/SystemInterface.java +++ b/src/main/java/neqsim/thermo/system/SystemInterface.java @@ -8,6 +8,7 @@ import neqsim.thermo.characterization.WaxModelInterface; import neqsim.thermo.component.ComponentInterface; import neqsim.thermo.mixingrule.EosMixingRuleType; +import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.thermo.phase.PhaseInterface; import neqsim.thermo.phase.PhaseType; import neqsim.util.ExcludeFromJacocoGeneratedReport; @@ -480,6 +481,8 @@ public default String[][] calcResultTable() { /** * method to read pure component and interaction parameters from the NeqSim database and create * temporary tables with parameters for active fluid. + * + * NB! Resets the mixing rule of each phase. * * @param reset If reset is set to true, new temporary tables with parameters for the added * components will be created. When parameters are needed (eg. when adding components or @@ -1061,9 +1064,10 @@ public default double getGamma2() { * getMixingRule. *
* - * @return a int + * @return A MixingRuleTypeInterface */ - public int getMixingRule(); + public MixingRuleTypeInterface getMixingRule(); + /** *@@ -1468,7 +1472,7 @@ public default int getPhaseNumberOfPhase(String phaseTypeName) { /** *
- * Getter for property TC
.
+ * Get critical temperature.
*
- * method to return temperature. + * method to return temperature from a specific phase. *
* * @param phaseNumber phase to get temperature of * @return temperature in unit Kelvin */ - public double getTemperature(int phaseNumber); + public double getTemperature(int phaseNumber); // TODO: is it possible for the phases to have + // different temperatures? /** * method to return temperature in a specified unit. @@ -2119,9 +2124,10 @@ public default void prettyPrint() { public void setAttractiveTerm(int i); /** + * Setter for propertybeta
.
*
- * Setter for property beta
. NB! Sets beta = b for first phase and 1-b for second
- * phase, not for multiphase systems.
+ * NB! Sets beta = b for first (heaviest) phase and 1-b for second (lightest) phase, not for
+ * multiphase systems.
*
- * checkPhaseEnvelope2. + * testPseudoComptest. *
* * @throws Exception