From 0ca1dc7c04afe18109a63a5cf60743541e550e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85smund=20V=C3=A5ge=20Fannemel?= <34712686+asmfstatoil@users.noreply.github.com> Date: Mon, 27 Jan 2025 15:30:23 +0100 Subject: [PATCH] rename: MixingRules -> MixingRuleHandler --- ...ngRules.java => CPAMixingRuleHandler.java} | 262 ++- ...ngRules.java => EosMixingRuleHandler.java} | 1449 ++++++++--------- .../thermo/mixingrule/MixingRuleHandler.java | 13 + .../thermo/phase/PhaseElectrolyteCPA.java | 4 +- .../thermo/phase/PhaseElectrolyteCPAOld.java | 4 +- .../java/neqsim/thermo/phase/PhaseEos.java | 4 +- .../java/neqsim/thermo/phase/PhaseGE.java | 6 +- .../neqsim/thermo/phase/PhasePCSAFTa.java | 4 +- .../java/neqsim/thermo/phase/PhasePrCPA.java | 4 +- .../java/neqsim/thermo/phase/PhaseSrkCPA.java | 4 +- .../phase/PhaseSrkCPA_proceduralMatrices.java | 4 +- .../java/neqsim/thermo/phase/PhaseUMRCPA.java | 4 +- .../neqsim/thermo/system/SystemThermo.java | 2 +- 13 files changed, 887 insertions(+), 877 deletions(-) rename src/main/java/neqsim/thermo/mixingrule/{CPAMixingRules.java => CPAMixingRuleHandler.java} (98%) rename src/main/java/neqsim/thermo/mixingrule/{EosMixingRules.java => EosMixingRuleHandler.java} (99%) create mode 100644 src/main/java/neqsim/thermo/mixingrule/MixingRuleHandler.java diff --git a/src/main/java/neqsim/thermo/mixingrule/CPAMixingRules.java b/src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleHandler.java similarity index 98% rename from src/main/java/neqsim/thermo/mixingrule/CPAMixingRules.java rename to src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleHandler.java index a9e417cbb..caa01e054 100644 --- a/src/main/java/neqsim/thermo/mixingrule/CPAMixingRules.java +++ b/src/main/java/neqsim/thermo/mixingrule/CPAMixingRuleHandler.java @@ -1,5 +1,5 @@ /* - * CPAMixing.java + * CPAMixingRuleHandler.java * * Created on 4. juni 2000, 12:38 */ @@ -8,7 +8,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.component.ComponentEosInterface; import neqsim.thermo.component.ComponentSrkCPA; import neqsim.thermo.phase.PhaseCPAInterface; @@ -23,14 +22,11 @@ * @author Even Solbraa * @version $Id: $Id */ -public class CPAMixingRules implements Cloneable, ThermodynamicConstantsInterface { +public class CPAMixingRuleHandler extends MixingRuleHandler { /** Serialization version UID. */ private static final long serialVersionUID = 1000; /** Logger object for class. */ - static Logger logger = LogManager.getLogger(CPAMixingRules.class); - - /** Name of mixing rule. */ - private String mixingRuleName = "CPA_Radoch"; + static Logger logger = LogManager.getLogger(CPAMixingRuleHandler.class); int[][] assosSchemeType = null; // 0- ER - 1 - CR1 double[][] cpaBetaCross = null; @@ -45,14 +41,135 @@ public class CPAMixingRules implements Cloneable, ThermodynamicConstantsInterfac * Constructor for CPAMixingRules. *
*/ - public CPAMixingRules() {} + public CPAMixingRuleHandler() { + this.mixingRuleName = "CPA_Radoch"; + } + + /** + *+ * 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(); + } + } + + /** + *+ * getMixingRule. + *
+ * + * @param mr a int + * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object + */ + public CPAMixingRulesInterface getMixingRule(int mr) { + if (mr == 1) { + mixingRuleName = "CPA_Radoch"; + return new CPA_Radoch(); + } else if (mr == 3) { + mixingRuleName = "PCSAFTa_Radoch"; + return new PCSAFTa_Radoch(); + } + throw new RuntimeException( + new neqsim.util.exception.InvalidInputException(this, "getMixingRule", "mr")); + } + + + /** + *+ * getMixingRule. + *
+ * + * @param mr a int + * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object + * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object + */ + public CPAMixingRulesInterface getMixingRule(int mr, PhaseInterface phase) { + assosSchemeType = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + cpaBetaCross = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + cpaEpsCross = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + + for (int k = 0; k < phase.getNumberOfComponents(); k++) { + String component_name = phase.getComponent(k).getComponentName(); + java.sql.ResultSet dataSet = null; + + for (int l = k; l < phase.getNumberOfComponents(); l++) { + if (k == l || phase.getComponent(l).getNumberOfAssociationSites() == 0 + || phase.getComponent(k).getNumberOfAssociationSites() == 0) { + } else { + try (neqsim.util.database.NeqSimDataBase database = + new neqsim.util.database.NeqSimDataBase()) { + // database = new util.database.NeqSimDataBase(); + if (NeqSimDataBase.createTemporaryTables()) { + dataSet = database.getResultSet("SELECT * FROM intertemp WHERE (comp1='" + + component_name + "' AND comp2='" + phase.getComponent(l).getComponentName() + + "') OR (comp1='" + phase.getComponent(l).getComponentName() + "' AND comp2='" + + component_name + "')"); + } else { + dataSet = database.getResultSet("SELECT * FROM inter WHERE (comp1='" + component_name + + "' AND comp2='" + phase.getComponent(l).getComponentName() + "') OR (comp1='" + + phase.getComponent(l).getComponentName() + "' AND comp2='" + component_name + + "')"); + } + if (dataSet.next()) { + assosSchemeType[k][l] = + Integer.parseInt(dataSet.getString("cpaAssosiationType").trim()); + assosSchemeType[l][k] = assosSchemeType[k][l]; + + cpaBetaCross[k][l] = Double.parseDouble(dataSet.getString("cpaBetaCross").trim()); + cpaBetaCross[l][k] = cpaBetaCross[k][l]; + + cpaEpsCross[k][l] = Double.parseDouble(dataSet.getString("cpaEpsCross").trim()); + cpaEpsCross[l][k] = cpaEpsCross[k][l]; + } + // System.out.println("ass scheme " + assosSchemeType[l][k]); + // System.out.println("cpaEpsCross[k][l] " + cpaEpsCross[k][l]); + } catch (Exception ex) { + logger.error(ex.getMessage(), ex); + } + } + } + } + + return getMixingRule(mr); + } + + /** + *+ * resetMixingRule. + *
+ * + * @param i a int + * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object + * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object + */ + public MixingRulesInterface resetMixingRule(int i, PhaseInterface phase) { + return getMixingRule(i); + } /** {@inheritDoc} */ @Override - public CPAMixingRules clone() { - CPAMixingRules clonedSystem = null; + public CPAMixingRuleHandler clone() { + CPAMixingRuleHandler clonedSystem = null; try { - clonedSystem = (CPAMixingRules) super.clone(); + clonedSystem = (CPAMixingRuleHandler) super.clone(); } catch (Exception ex) { logger.error("Cloning failed.", ex); } @@ -598,131 +715,12 @@ public double calcDelta(int siteNumber1, int siteNumber2, int compnumb1, int com phase, temperature, pressure, numbcomp) / (R * phase.getTemperature())) - 1.0) * Math.pow((phase.getComponent(compnumb1).getSigmaSAFTi() + phase.getComponent(compnumb2).getSigmaSAFTi()) / 2.0, 3.0) - * 1.0e5 * ThermodynamicConstantsInterface.avagadroNumber - * getCrossAssociationVolume(siteNumber1, siteNumber2, compnumb1, compnumb2, phase, - temperature, pressure, numbcomp) + * 1.0e5 * avagadroNumber * getCrossAssociationVolume(siteNumber1, siteNumber2, compnumb1, + compnumb2, phase, temperature, pressure, numbcomp) * ((PhaseCPAInterface) phase).getGcpa(); } } - /** - *- * getMixingRule. - *
- * - * @param mr a int - * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object - */ - public CPAMixingRulesInterface getMixingRule(int mr) { - if (mr == 1) { - mixingRuleName = "CPA_Radoch"; - return new CPA_Radoch(); - } else if (mr == 3) { - mixingRuleName = "PCSAFTa_Radoch"; - return new PCSAFTa_Radoch(); - } - throw new RuntimeException( - new neqsim.util.exception.InvalidInputException(this, "getMixingRule", "mr")); - } - - /** - *- * 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(); - } - } - - /** - *- * getMixingRule. - *
- * - * @param mr a int - * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object - * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object - */ - public CPAMixingRulesInterface getMixingRule(int mr, PhaseInterface phase) { - assosSchemeType = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - cpaBetaCross = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - cpaEpsCross = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - - for (int k = 0; k < phase.getNumberOfComponents(); k++) { - String component_name = phase.getComponent(k).getComponentName(); - java.sql.ResultSet dataSet = null; - - for (int l = k; l < phase.getNumberOfComponents(); l++) { - if (k == l || phase.getComponent(l).getNumberOfAssociationSites() == 0 - || phase.getComponent(k).getNumberOfAssociationSites() == 0) { - } else { - try (neqsim.util.database.NeqSimDataBase database = - new neqsim.util.database.NeqSimDataBase()) { - // database = new util.database.NeqSimDataBase(); - if (NeqSimDataBase.createTemporaryTables()) { - dataSet = database.getResultSet("SELECT * FROM intertemp WHERE (comp1='" - + component_name + "' AND comp2='" + phase.getComponent(l).getComponentName() - + "') OR (comp1='" + phase.getComponent(l).getComponentName() + "' AND comp2='" - + component_name + "')"); - } else { - dataSet = database.getResultSet("SELECT * FROM inter WHERE (comp1='" + component_name - + "' AND comp2='" + phase.getComponent(l).getComponentName() + "') OR (comp1='" - + phase.getComponent(l).getComponentName() + "' AND comp2='" + component_name - + "')"); - } - if (dataSet.next()) { - assosSchemeType[k][l] = - Integer.parseInt(dataSet.getString("cpaAssosiationType").trim()); - assosSchemeType[l][k] = assosSchemeType[k][l]; - - cpaBetaCross[k][l] = Double.parseDouble(dataSet.getString("cpaBetaCross").trim()); - cpaBetaCross[l][k] = cpaBetaCross[k][l]; - - cpaEpsCross[k][l] = Double.parseDouble(dataSet.getString("cpaEpsCross").trim()); - cpaEpsCross[l][k] = cpaEpsCross[k][l]; - } - // System.out.println("ass scheme " + assosSchemeType[l][k]); - // System.out.println("cpaEpsCross[k][l] " + cpaEpsCross[k][l]); - } catch (Exception ex) { - logger.error(ex.getMessage(), ex); - } - } - } - } - - return getMixingRule(mr); - } - - /** - *- * resetMixingRule. - *
- * - * @param i a int - * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object - * @return a {@link neqsim.thermo.mixingrule.CPAMixingRulesInterface} object - */ - public CPAMixingRulesInterface resetMixingRule(int i, PhaseInterface phase) { - return getMixingRule(i); - } - /** ** setAssociationScheme. diff --git a/src/main/java/neqsim/thermo/mixingrule/EosMixingRules.java b/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleHandler.java similarity index 99% rename from src/main/java/neqsim/thermo/mixingrule/EosMixingRules.java rename to src/main/java/neqsim/thermo/mixingrule/EosMixingRuleHandler.java index 7a36e55ae..3f47a002b 100644 --- a/src/main/java/neqsim/thermo/mixingrule/EosMixingRules.java +++ b/src/main/java/neqsim/thermo/mixingrule/EosMixingRuleHandler.java @@ -1,5 +1,5 @@ /* - * EosMixingRules.java + * EosMixingRuleHandler.java * * Created on 4. juni 2000, 12:38 */ @@ -13,7 +13,6 @@ import javax.swing.JTable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.component.ComponentEosInterface; import neqsim.thermo.component.ComponentGEInterface; import neqsim.thermo.phase.PhaseGE; @@ -28,20 +27,18 @@ /** *
- * EosMixingRules class. + * EosMixingRuleHandler class. *
* * @author Even Solbraa * @version $Id: $Id */ -public class EosMixingRules implements Cloneable, ThermodynamicConstantsInterface { +public class EosMixingRuleHandler extends MixingRuleHandler { /** Serialization version UID. */ private static final long serialVersionUID = 1000; /** Logger object for class. */ - static Logger logger = LogManager.getLogger(EosMixingRules.class); + static Logger logger = LogManager.getLogger(EosMixingRuleHandler.class); - /** Name of mixing rule. */ - private String mixingRuleName = "no (kij=0)"; public String mixingRuleGEModel = "NRTL"; public double Atot = 0; @@ -83,380 +80,801 @@ public class EosMixingRules implements Cloneable, ThermodynamicConstantsInterfac * Constructor for EosMixingRules. * */ - public EosMixingRules() {} + public EosMixingRuleHandler() { + this.mixingRuleName = "no (kij=0)"; + } - /** {@inheritDoc} */ - @Override - public EosMixingRules clone() { - EosMixingRules clonedSystem = null; - try { - clonedSystem = (EosMixingRules) super.clone(); - } catch (Exception ex) { - logger.error("Cloning failed.", ex); + /** + *+ * getMixingRule. + *
+ * + * @param mr a int + * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object + */ + public EosMixingRulesInterface getMixingRule(int mr) { + if (mr == 1) { + return new ClassicVdW(); + } else if (mr == 2) { + return new ClassicSRK(); + } else if (mr == 3) { + return new ClassicVdW(); + } else { + // TODO: not matching the initialization in getMixingRule(int mr, PhaseInterface phase) + return new ClassicVdW(); } - - // clonedSystem.intparam = (double[][]) intparam.clone(); - // clonedSystem.wij = (double[][][]) wij.clone(); - // clonedSystem.WSintparam = (double[][]) WSintparam.clone() ; - // clonedSystem.HVDij = (double[][]) HVDij.clone(); - // clonedSystem.HValpha = (double[][]) HValpha.clone(); - // clonedSystem.HVDijT = (double[][]) HVDijT.clone(); - // clonedSystem.NRTLDij = (double[][]) NRTLDij.clone(); - // clonedSystem.NRTLalpha = (double[][]) NRTLalpha.clone(); - // clonedSystem.NRTLDijT = (double[][]) NRTLDijT.clone(); - // clonedSystem.classicOrHV = (String[][]) classicOrHV.clone(); - return clonedSystem; } - public class ClassicVdW implements EosMixingRulesInterface { - /** Serialization version UID. */ - private static final long serialVersionUID = 1000; - - /** {@inheritDoc} */ - @Override - public String getName() { - return mixingRuleName; - } + /** + *+ * getMixingRule. + *
+ * + * @param mr a int + * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object + * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object + */ + public EosMixingRulesInterface getMixingRule(int mr, PhaseInterface phase) { + this.wij = new double[3][phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + intparam = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - /** {@inheritDoc} */ - @Override - public PhaseInterface getGEPhase() { - return null; + if (mr == 1) { + mixingRuleName = "no (kij=0)"; + return new ClassicVdW(); } + intparamji = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + intparamij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + intparamT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + intparamTType = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + HVDij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + HVDijT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + NRTLDij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + NRTLDijT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + WSintparam = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + HValpha = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + NRTLalpha = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + classicOrHV = new String[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + classicOrWS = new String[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + wijCalcOrFitted = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; + try (neqsim.util.database.NeqSimDataBase database = new neqsim.util.database.NeqSimDataBase()) { + for (int k = 0; k < phase.getNumberOfComponents(); k++) { + String component_name = phase.getComponent(k).getComponentName(); - /** {@inheritDoc} */ - @Override - public void setMixingRuleGEModel(java.lang.String GEmodel) { - mixingRuleGEModel = GEmodel; - } + for (int l = k; l < phase.getNumberOfComponents(); l++) { + String component_name2 = phase.getComponent(l).getComponentName(); + if (k == l) { + classicOrHV[k][l] = "Classic"; + classicOrWS[k][l] = "Classic"; + classicOrHV[l][k] = classicOrHV[k][l]; + classicOrWS[l][k] = classicOrWS[k][l]; + } else { + java.sql.ResultSet dataSet = null; + try { + int underscoreIndex = component_name.indexOf("__"); // double underscore + if (underscoreIndex != -1) { + component_name = component_name.substring(0, underscoreIndex); + } + int underscoreIndex2 = component_name2.indexOf("__"); + if (underscoreIndex2 != -1) { + component_name2 = component_name2.substring(0, underscoreIndex2); + } + if (phase.getComponent(k).isIsTBPfraction() + || phase.getComponent(l).isIsTBPfraction()) { + throw new Exception("no interaction coefficient for TBP fractions"); + } + int templ = l; + int tempk = k; - /** {@inheritDoc} */ - @Override - public double getBinaryInteractionParameter(int i, int j) { - if (i == j) { - return 0.0; - } - return intparam[i][j]; - } + if (NeqSimDataBase.createTemporaryTables()) { + dataSet = database.getResultSet("SELECT * FROM intertemp WHERE (comp1='" + + component_name + "' AND comp2='" + component_name2 + "') OR (comp1='" + + component_name2 + "' AND comp2='" + component_name + "')"); + } else { + dataSet = database.getResultSet("SELECT * FROM inter WHERE (comp1='" + + component_name + "' AND comp2='" + component_name2 + "') OR (comp1='" + + component_name2 + "' AND comp2='" + component_name + "')"); + } + dataSet.next(); + if (dataSet.getString("comp1").trim().equals(component_name2)) { + templ = k; + tempk = l; + } - /** {@inheritDoc} */ - @Override - public double[][] getBinaryInteractionParameters() { - return intparam; - } + classicOrHV[k][l] = dataSet.getString("HVTYPE").trim(); + classicOrHV[l][k] = classicOrHV[k][l]; - public void prettyPrintKij() {} + if (isCalcEOSInteractionParameters()) { + intparam[k][l] = + 1.0 - Math.pow( + (2.0 * Math.sqrt(Math.pow(phase.getComponent(l).getCriticalVolume(), 1 / 3) + * Math.pow(phase.getComponent(k).getCriticalVolume(), 1 / 3)) + / (Math.pow(phase.getComponent(l).getCriticalVolume(), 1 / 3) + + Math.pow(phase.getComponent(k).getCriticalVolume(), 1 / 3))), + nEOSkij); + intparamT[k][l] = 0.0; + // System.out.println("kij " + intparam[k][l]); + } else { + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePrEos")) { + // System.out.println("using PR intparams"); + intparam[k][l] = Double.parseDouble(dataSet.getString("kijpr")); + intparamT[k][l] = Double.parseDouble(dataSet.getString("KIJTpr")); + } else { + intparam[k][l] = Double.parseDouble(dataSet.getString("kijsrk")); + intparamT[k][l] = Double.parseDouble(dataSet.getString("KIJTSRK")); + } + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePrCPA")) { + intparam[k][l] = Double.parseDouble(dataSet.getString("cpakij_PR")); + intparamT[k][l] = 0.0; + } else if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + intparam[k][l] = Double.parseDouble(dataSet.getString("cpakij_SRK")); + intparamT[k][l] = Double.parseDouble(dataSet.getString("cpakijT_SRK")); - /** {@inheritDoc} */ - @Override - public double getBinaryInteractionParameterT1(int i, int j) { - if (i == j) { - return 0.0; - } - return intparamT[i][j]; - } + intparamij[tempk][templ] = Double.parseDouble(dataSet.getString("cpakijx_SRK")); + intparamji[templ][tempk] = intparamij[tempk][templ]; - /** - * @return the bmixType - */ - @Override - public int getBmixType() { - return bmixType; - } + intparamji[tempk][templ] = Double.parseDouble(dataSet.getString("cpakjix_SRK")); + intparamij[templ][tempk] = intparamji[tempk][templ]; + } + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFTRahmat") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFT") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFTa")) { + intparam[k][l] = Double.parseDouble(dataSet.getString("KIJPCSAFT")); + intparamT[k][l] = 0.0; + } + } - /** - * @param bmixType2 the bmixType to set - */ - @Override - public void setBmixType(int bmixType2) { - bmixType = bmixType2; - } + java.sql.ResultSetMetaData dataSetMD = dataSet.getMetaData(); + int cols = dataSetMD.getColumnCount(); + boolean hasKIJTTypeCPAcol = false; + String colname = "KIJTTypeCPA"; + for (int x = 1; x <= cols; x++) { + if (colname.equals(dataSetMD.getColumnName(x))) { + hasKIJTTypeCPAcol = true; + } + } - public double getbij(ComponentEosInterface compi, ComponentEosInterface compj) { - switch (getBmixType()) { - case 0: - return (compi.getb() + compj.getb()) * 0.5; - case 1: - // return (compi.getb() + compj.getb()) * 0.5; - double temp = (Math.sqrt(compi.getb()) + Math.sqrt(compj.getb())) * 0.5; - return temp * temp; - // return Math.pow((Math.sqrt(compi.getb())+Math.sqrt(compj.getb()))/2.0, 2.0); - // return - // Math.pow(0.5*(Math.pow(compi.getb(),1.0/3.0)+Math.pow(compj.getb(),1.0/3.0)),3.0); - // return - // Math.sqrt(compi.getb()*compj.getb())*(1.0-intparam[compi.getComponentNumber()][compj.getComponentNumber()]); - // return - // Math.pow(0.5*(Math.pow(compi.getb(),3.0/4.0)+Math.pow(compj.getb(),3.0/4.0)),4.0/3.0); - default: - return (compi.getb() + compj.getb()) * 0.5; - } - } + // System.out.println("class name " + phase.getClass().getName()); + if (!phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || !hasKIJTTypeCPAcol) { + intparamTType[k][l] = Integer.parseInt(dataSet.getString("KIJTType")); + } else { + intparamTType[k][l] = Integer.parseInt(dataSet.getString("KIJTTypeCPA")); + // TODO: implement in all dbs + } + intparamTType[l][k] = intparamTType[k][l]; - /** {@inheritDoc} */ - @Override - public void setBinaryInteractionParameter(int i, int j, double value) { - // System.out.println("intparam: " + intparam[i][j] + " value " + value); - intparam[i][j] = value; - intparam[j][i] = value; - } + HValpha[k][l] = Double.parseDouble(dataSet.getString("HValpha")); + HValpha[l][k] = HValpha[k][l]; - /** {@inheritDoc} */ - @Override - public void setBinaryInteractionParameterij(int i, int j, double value) { - intparamij[i][j] = value; - intparamji[j][i] = value; - } + HVDij[tempk][templ] = Double.parseDouble(dataSet.getString("HVgij")); + HVDij[templ][tempk] = Double.parseDouble(dataSet.getString("HVgji")); - /** {@inheritDoc} */ - @Override - public void setBinaryInteractionParameterji(int i, int j, double value) { - // System.out.println("intparam: " + intparam[i][j] + " value " + value); - intparamji[i][j] = value; - intparamij[j][i] = value; - } + wijCalcOrFitted[k][l] = Integer.parseInt(dataSet.getString("CalcWij")); + wijCalcOrFitted[l][k] = wijCalcOrFitted[k][l]; - /** {@inheritDoc} */ - @Override - public void setBinaryInteractionParameterT1(int i, int j, double value) { - // System.out.println("intparam: " + intparam[i][j] + " value " + value); - intparamT[i][j] = value; - intparamT[j][i] = value; - } + wij[0][k][l] = Double.parseDouble(dataSet.getString("w1")); + wij[0][l][k] = wij[0][k][l]; + wij[1][k][l] = Double.parseDouble(dataSet.getString("w2")); + wij[1][l][k] = wij[1][k][l]; + wij[2][k][l] = Double.parseDouble(dataSet.getString("w3")); + wij[2][l][k] = wij[2][k][l]; - /** - * Setter for property CalcEOSInteractionParameters. - * - * @param CalcEOSInteractionParameters2 New value of property CalcEOSInteractionParameters. - */ - @Override - public void setCalcEOSInteractionParameters(boolean CalcEOSInteractionParameters2) { - calcEOSInteractionParameters = CalcEOSInteractionParameters2; - } + classicOrWS[k][l] = dataSet.getString("WSTYPE").trim(); + classicOrWS[l][k] = classicOrWS[k][l]; - /** {@inheritDoc} */ - @Override - public void setnEOSkij(double n) { - nEOSkij = n; - } + WSintparam[k][l] = Double.parseDouble(dataSet.getString("kijWS")); + WSintparam[k][l] = Double.parseDouble(dataSet.getString("KIJWSunifac")); + WSintparam[l][k] = WSintparam[k][l]; - public double getA() { - return Atot; - } + NRTLalpha[k][l] = Double.parseDouble(dataSet.getString("NRTLalpha")); + NRTLalpha[l][k] = NRTLalpha[k][l]; - public double getB() { - return Btot; - } + NRTLDij[tempk][templ] = Double.parseDouble(dataSet.getString("NRTLgij")); + NRTLDij[templ][tempk] = Double.parseDouble(dataSet.getString("NRTLgji")); - /** {@inheritDoc} */ - @Override - public double calcA(PhaseInterface phase, double temperature, double pressure, int numbcomp) { - double aij = 0.0; - double A = 0.0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + HVDijT[tempk][templ] = Double.parseDouble(dataSet.getString("HVgijT")); + HVDijT[templ][tempk] = Double.parseDouble(dataSet.getString("HVgjiT")); - for (int i = 0; i < numbcomp; i++) { - for (int j = 0; j < numbcomp; j++) { - aij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()); - A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() - * aij; - } - } - Atot = A; - return A; - } + NRTLDijT[tempk][templ] = Double.parseDouble(dataSet.getString("WSgijT")); + NRTLDijT[templ][tempk] = Double.parseDouble(dataSet.getString("WSgjiT")); + } catch (Exception ex) { + // System.out.println("err in thermo mix....."); + // System.out.println(ex.toString()); + if (isCalcEOSInteractionParameters()) { + intparam[k][l] = 1.0 - Math.pow( + (2.0 * Math.sqrt(Math.pow(phase.getComponent(l).getCriticalVolume(), 1.0 / 3.0) + * Math.pow(phase.getComponent(k).getCriticalVolume(), 1.0 / 3.0)) + / (Math.pow(phase.getComponent(l).getCriticalVolume(), 1.0 / 3.0) + + Math.pow(phase.getComponent(k).getCriticalVolume(), 1.0 / 3.0))), + nEOSkij); + // System.out.println("intparam not defined .... CALCULATING intparam + // between " + // +component_name2 + " and " + + // component_name+ " to " + + // intparam[k][l]); + } else if ((component_name.equals("CO2") && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("CO2") && phase.getComponent(k).isIsTBPfraction())) { + intparam[k][l] = 0.1; + } else if ((component_name.equals("nitrogen") + && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("nitrogen") + && phase.getComponent(k).isIsTBPfraction())) { + intparam[k][l] = 0.08; + } else if ((component_name.equals("water") && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("water") && phase.getComponent(k).isIsTBPfraction())) { + intparam[k][l] = 0.2; - /** {@inheritDoc} */ - @Override - public double calcB(PhaseInterface phase, double temperature, double pressure, int numbcomp) { - B = 0.0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + // intparam[k][l] = -0.0685; // taken from Riaz et a. 2012 - for (int i = 0; i < numbcomp; i++) { - for (int j = 0; j < numbcomp; j++) { - B += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() - * getbij(compArray[i], compArray[j]); // (compArray[i].getb()+compArray[j].getb())/2; - } - } - B /= phase.getNumberOfMolesInPhase(); - Btot = B; - return B; - } + double molmassPC = phase.getComponent(l).getMolarMass(); + if (phase.getComponent(k).isIsTBPfraction()) { + molmassPC = phase.getComponents()[k].getMolarMass(); + } + double intparamkPC = -0.1533 * Math.log(1000.0 * molmassPC) + 0.7055; + intparam[k][l] = intparamkPC; + // System.out.println("kij water-HC " + intparam[k][l]); - /** {@inheritDoc} */ - @Override - public double calcAi(int compNumb, PhaseInterface phase, double temperature, double pressure, - int numbcomp) { - double aij = 0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + intparamT[k][l] = 0.0; + } + } else if ((component_name.equals("MEG") && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("MEG") + && phase.getComponents()[k].isIsTBPfraction())) { + intparam[k][l] = 0.2; + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + double molmassPC = phase.getComponent(l).getMolarMass(); + if (phase.getComponents()[k].isIsTBPfraction()) { + molmassPC = phase.getComponents()[k].getMolarMass(); + } + double intparamkPC = -0.0701 * Math.log(1000.0 * molmassPC) + 0.3521; + intparam[k][l] = intparamkPC; + // System.out.println("kij MEG-HC " + intparam[k][l]); + // intparam[k][l] = 0.01; + intparamT[k][l] = 0.0; + } + } else if ((component_name.equals("ethanol") + && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("ethanol") + && phase.getComponents()[k].isIsTBPfraction())) { + intparam[k][l] = 0.0; + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + intparam[k][l] = -0.05; + intparamT[k][l] = 0.0; + if (phase.getComponents()[k].getMolarMass() > (200.0 / 1000.0) + || phase.getComponent(l).getMolarMass() > (200.0 / 1000.0)) { + intparam[k][l] = -0.1; + } + } + } else if ((component_name.equals("methanol") + && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("methanol") + && phase.getComponents()[k].isIsTBPfraction())) { + intparam[k][l] = 0.0; + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + intparam[k][l] = -0.1; + intparamT[k][l] = 0.0; + if (phase.getComponents()[k].getMolarMass() > (200.0 / 1000.0) + || phase.getComponent(l).getMolarMass() > (200.0 / 1000.0)) { + intparam[k][l] = -0.2; + } + } + } else if ((component_name.equals("TEG") && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("TEG") + && phase.getComponents()[k].isIsTBPfraction())) { + intparam[k][l] = 0.12; + if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") + || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") + || phase.getClass().getName() + .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { + intparam[k][l] = 0.12; + intparamT[k][l] = 0.0; + } + } else if ((component_name.equals("S8") && phase.getComponent(l).isIsTBPfraction()) + || (component_name2.equals("S8") && phase.getComponents()[k].isIsTBPfraction())) { + intparam[k][l] = 0.05; + } else { + // if((component_name2.equals("CO2") || + // component_name.equals("CO2")) && k!=l) + // intparam[k][l] = 0.1; + // else if((component_name2.equals("H2S") || + // component_name.equals("H2S")) && k!=l) + // intparam[k][l] = 0.2; + // else if((component_name2.equals("water") + // || + // component_name.equals("water")) && k!=l) + // intparam[k][l] = 0.5; + // else intparam[k][l] = 0.0; + // System.out.println("intparam not defined .... setting intparam + // between " + + // component_name2 + " and " + + // component_name + " to " + + // intparam[k][l]); + } - Ai = 0.0; - for (int j = 0; j < numbcomp; j++) { - aij = Math.sqrt(compArray[compNumb].getaT() * compArray[j].getaT()); - Ai += compArray[j].getNumberOfMolesInPhase() * aij; - } + // intparam[l][k] = intparam[k][l]; + // intparamT[l][k] = intparamT[k][l]; + intparamij[k][l] = intparam[k][l]; + intparamij[l][k] = intparam[k][l]; + intparamji[k][l] = intparam[k][l]; + intparamji[l][k] = intparam[k][l]; + // System.out.println("kij set to " + intparam[l][k] + " " + + // component_name2 + " " + + // component_name); - return 2.0 * Ai; - } + classicOrHV[k][l] = "Classic"; + classicOrHV[l][k] = classicOrHV[k][l]; - /** {@inheritDoc} */ - @Override - public double calcBi(int compNumb, PhaseInterface phase, double temperature, double pressure, - int numbcomp) { - double Bi = 0.0; + classicOrWS[k][l] = "Classic"; + classicOrWS[l][k] = classicOrWS[k][l]; + } finally { + intparam[l][k] = intparam[k][l]; + intparamT[l][k] = intparamT[k][l]; + try { + if (dataSet != null) { + dataSet.close(); + } + } catch (Exception ex) { + logger.error("err closing dataSet IN MIX...", ex); + } + } + } + } + } + } catch (Exception ex) { + logger.error("error reading from database", ex); + } - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + return resetMixingRule(mr, phase); + } - for (int j = 0; j < numbcomp; j++) { - Bi += compArray[j].getNumberOfMolesInPhase() * getbij(compArray[compNumb], compArray[j]); + /** + *+ * resetMixingRule. + *
+ * + * @param i a int + * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object + * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object + */ + public EosMixingRulesInterface resetMixingRule(int i, PhaseInterface phase) { + if (i == 1) { + mixingRuleName = "no (kij=0)"; + return new ClassicVdW(); + } else if (i == 2) { + mixingRuleName = "classic"; + return new ClassicSRK(); + } else if (i == 3) { + // Classic Huron-Vidal + mixingRuleName = "Huron-Vidal"; + return new SRKHuronVidal2(phase, HValpha, HVDij, classicOrHV); + } else if (i == 4) { + mixingRuleName = "Huron-Vidal"; + return new SRKHuronVidal2(phase, HValpha, HVDij, HVDijT, classicOrHV); + } else if (i == 5) { + mixingRuleName = "Wong-Sandler"; + return new WongSandlerMixingRule(phase, NRTLalpha, NRTLDij, NRTLDijT, classicOrWS); + } else if (i == 6) { + // Exactly the same as 5 + mixingRuleName = "Wong-Sandler"; + return new WongSandlerMixingRule(phase, NRTLalpha, NRTLDij, NRTLDijT, classicOrWS); + } else if (i == 7) { + mixingRuleName = "classic-CPA"; + return new ClassicSRK(); + } else if (i == 8) { + mixingRuleName = "classic-T"; + return new ClassicSRKT(); + } else if (i == 9) { + mixingRuleName = "classic-CPA_T"; + return new ClassicSRKT2(); + } else if (i == 10) { + // return new ElectrolyteMixRule(phase, HValpha, HVgij, HVgii, + // classicOrHV,wij);} + org.ejml.simple.SimpleMatrix mat1 = new org.ejml.simple.SimpleMatrix(intparamij); + org.ejml.simple.SimpleMatrix mat2 = new org.ejml.simple.SimpleMatrix(intparamji); + org.ejml.simple.SimpleMatrix mat3 = new org.ejml.simple.SimpleMatrix(intparamT); + if (mat1.isIdentical(mat2, 1e-8)) { + if (mat3.elementMaxAbs() < 1e-8) { + mixingRuleName = "classic-CPA"; + return new ClassicSRK(); + } + mixingRuleName = "classic-CPA_T"; + return new ClassicSRKT2(); + } else { + mixingRuleName = "classic-CPA_Tx"; + return new ClassicSRKT2x(); } + } else { + return new ClassicVdW(); + } + } - Bi = (2.0 * Bi - getB()) / phase.getNumberOfMolesInPhase(); - return Bi; + /** {@inheritDoc} */ + @Override + public EosMixingRuleHandler clone() { + EosMixingRuleHandler clonedSystem = null; + try { + clonedSystem = (EosMixingRuleHandler) super.clone(); + } catch (Exception ex) { + logger.error("Cloning failed.", ex); } - public double calcBi2(int compNumb, PhaseInterface phase, double temperature, double pressure, - int numbcomp) { - double Bi = 0.0; + // clonedSystem.intparam = (double[][]) intparam.clone(); + // clonedSystem.wij = (double[][][]) wij.clone(); + // clonedSystem.WSintparam = (double[][]) WSintparam.clone() ; + // clonedSystem.HVDij = (double[][]) HVDij.clone(); + // clonedSystem.HValpha = (double[][]) HValpha.clone(); + // clonedSystem.HVDijT = (double[][]) HVDijT.clone(); + // clonedSystem.NRTLDij = (double[][]) NRTLDij.clone(); + // clonedSystem.NRTLalpha = (double[][]) NRTLalpha.clone(); + // clonedSystem.NRTLDijT = (double[][]) NRTLDijT.clone(); + // clonedSystem.classicOrHV = (String[][]) classicOrHV.clone(); + return clonedSystem; + } - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); - double sumk = 0; - for (int j = 0; j < numbcomp; j++) { - Bi += compArray[j].getNumberOfMolesInPhase() * getbij(compArray[compNumb], compArray[j]); - for (int k = 0; k < numbcomp; k++) { - sumk += compArray[j].getNumberOfMolesInPhase() * compArray[k].getNumberOfMolesInPhase() - * getbij(compArray[j], compArray[k]); - } - } - double ans1 = phase.getNumberOfMolesInPhase() * Bi - sumk; + public class ClassicVdW implements EosMixingRulesInterface { + /** Serialization version UID. */ + private static final long serialVersionUID = 1000; - return ans1 / (phase.getNumberOfMolesInPhase() * phase.getNumberOfMolesInPhase()); + /** {@inheritDoc} */ + @Override + public String getName() { + return mixingRuleName; } /** {@inheritDoc} */ @Override - public double calcBij(int compNumb, int compNumbj, PhaseInterface phase, double temperature, - double pressure, int numbcomp) { - double bij = 0.0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); - - bij = getbij(compArray[compNumb], compArray[compNumbj]); - return (2.0 * bij - compArray[compNumb].getBi() - compArray[compNumbj].getBi()) - / phase.getNumberOfMolesInPhase(); + public PhaseInterface getGEPhase() { + return null; } /** {@inheritDoc} */ @Override - public double calcAiT(int compNumb, PhaseInterface phase, double temperature, double pressure, - int numbcomp) { - double A = 0.0; - double aij = 0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + public void setMixingRuleGEModel(java.lang.String GEmodel) { + mixingRuleGEModel = GEmodel; + } - for (int j = 0; j < numbcomp; j++) { - aij = 0.5 / Math.sqrt(compArray[compNumb].getaT() * compArray[j].getaT()) - * (compArray[compNumb].getaT() * compArray[j].getaDiffT() - + compArray[j].getaT() * compArray[compNumb].getaDiffT()); - A += compArray[j].getNumberOfMolesInPhase() * aij; + /** {@inheritDoc} */ + @Override + public double getBinaryInteractionParameter(int i, int j) { + if (i == j) { + return 0.0; } - - return 2.0 * A; + return intparam[i][j]; } /** {@inheritDoc} */ @Override - public double calcAij(int compNumb, int compNumbj, PhaseInterface phase, double temperature, - double pressure, int numbcomp) { - double aij = 0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); - - aij = Math.sqrt(compArray[compNumb].getaT() * compArray[compNumbj].getaT()); - - return 2.0 * aij; + public double[][] getBinaryInteractionParameters() { + return intparam; } + public void prettyPrintKij() {} + /** {@inheritDoc} */ @Override - public double calcAT(PhaseInterface phase, double temperature, double pressure, int numbcomp) { - double A = 0.0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); - - for (int i = 0; i < numbcomp; i++) { - A += compArray[i].getNumberOfMolesInPhase() - * phase.calcAiT(i, phase, temperature, pressure, numbcomp); + public double getBinaryInteractionParameterT1(int i, int j) { + if (i == j) { + return 0.0; } + return intparamT[i][j]; + } - return 0.5 * A; + /** + * @return the bmixType + */ + @Override + public int getBmixType() { + return bmixType; } - /** {@inheritDoc} */ + /** + * @param bmixType2 the bmixType to set + */ @Override - public double calcATT(PhaseInterface phase, double temperature, double pressure, int numbcomp) { - double aij = 0; - double sqrtaij = 0; - double tempPow = 0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + public void setBmixType(int bmixType2) { + bmixType = bmixType2; + } - A = 0.0; - for (int i = 0; i < numbcomp; i++) { - for (int j = 0; j < numbcomp; j++) { - sqrtaij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()); - tempPow = compArray[i].getaT() * compArray[j].getaDiffT() - + compArray[j].getaT() * compArray[i].getaDiffT(); - aij = 0.5 * ((2.0 * compArray[i].getaDiffT() * compArray[j].getaDiffT() - + compArray[i].getaT() * compArray[j].getaDiffDiffT() - + compArray[j].getaT() * compArray[i].getaDiffDiffT()) / sqrtaij - - tempPow * tempPow / (2.0 * sqrtaij * compArray[i].getaT() * compArray[j].getaT())); - A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() - * aij; - } + public double getbij(ComponentEosInterface compi, ComponentEosInterface compj) { + switch (getBmixType()) { + case 0: + return (compi.getb() + compj.getb()) * 0.5; + case 1: + // return (compi.getb() + compj.getb()) * 0.5; + double temp = (Math.sqrt(compi.getb()) + Math.sqrt(compj.getb())) * 0.5; + return temp * temp; + // return Math.pow((Math.sqrt(compi.getb())+Math.sqrt(compj.getb()))/2.0, 2.0); + // return + // Math.pow(0.5*(Math.pow(compi.getb(),1.0/3.0)+Math.pow(compj.getb(),1.0/3.0)),3.0); + // return + // Math.sqrt(compi.getb()*compj.getb())*(1.0-intparam[compi.getComponentNumber()][compj.getComponentNumber()]); + // return + // Math.pow(0.5*(Math.pow(compi.getb(),3.0/4.0)+Math.pow(compj.getb(),3.0/4.0)),4.0/3.0); + default: + return (compi.getb() + compj.getb()) * 0.5; } - return A; } /** {@inheritDoc} */ @Override - public ClassicVdW clone() { - ClassicVdW clonedSystem = null; - try { - clonedSystem = (ClassicVdW) super.clone(); - } catch (Exception ex) { - logger.error("Cloning failed.", ex); - } - - return clonedSystem; + public void setBinaryInteractionParameter(int i, int j, double value) { + // System.out.println("intparam: " + intparam[i][j] + " value " + value); + intparam[i][j] = value; + intparam[j][i] = value; } - } - - public class ClassicSRK extends ClassicVdW { - /** Serialization version UID. */ - private static final long serialVersionUID = 1000; - public double getkij(double temp, int i, int j) { - // System.out.println("kij " +intparam[i][j] ); - return intparam[i][j]; + /** {@inheritDoc} */ + @Override + public void setBinaryInteractionParameterij(int i, int j, double value) { + intparamij[i][j] = value; + intparamji[j][i] = value; } /** {@inheritDoc} */ @Override - public double calcA(PhaseInterface phase, double temperature, double pressure, int numbcomp) { - double aij = 0; - ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); - - A = 0.0; - for (int i = 0; i < numbcomp; i++) { - for (int j = 0; j < numbcomp; j++) { - aij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()) - * (1.0 - getkij(temperature, i, j)); - A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() - * aij; - } - } - Atot = A; - return A; + public void setBinaryInteractionParameterji(int i, int j, double value) { + // System.out.println("intparam: " + intparam[i][j] + " value " + value); + intparamji[i][j] = value; + intparamij[j][i] = value; } - // public double calcB(PhaseInterface phase, double temperature, double - // pressure, int numbcomp){ + /** {@inheritDoc} */ + @Override + public void setBinaryInteractionParameterT1(int i, int j, double value) { + // System.out.println("intparam: " + intparam[i][j] + " value " + value); + intparamT[i][j] = value; + intparamT[j][i] = value; + } + + /** + * Setter for property CalcEOSInteractionParameters. + * + * @param CalcEOSInteractionParameters2 New value of property CalcEOSInteractionParameters. + */ + @Override + public void setCalcEOSInteractionParameters(boolean CalcEOSInteractionParameters2) { + calcEOSInteractionParameters = CalcEOSInteractionParameters2; + } + + /** {@inheritDoc} */ + @Override + public void setnEOSkij(double n) { + nEOSkij = n; + } + + public double getA() { + return Atot; + } + + public double getB() { + return Btot; + } + + /** {@inheritDoc} */ + @Override + public double calcA(PhaseInterface phase, double temperature, double pressure, int numbcomp) { + double aij = 0.0; + double A = 0.0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + for (int i = 0; i < numbcomp; i++) { + for (int j = 0; j < numbcomp; j++) { + aij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()); + A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() + * aij; + } + } + Atot = A; + return A; + } + + /** {@inheritDoc} */ + @Override + public double calcB(PhaseInterface phase, double temperature, double pressure, int numbcomp) { + B = 0.0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + for (int i = 0; i < numbcomp; i++) { + for (int j = 0; j < numbcomp; j++) { + B += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() + * getbij(compArray[i], compArray[j]); // (compArray[i].getb()+compArray[j].getb())/2; + } + } + B /= phase.getNumberOfMolesInPhase(); + Btot = B; + return B; + } + + /** {@inheritDoc} */ + @Override + public double calcAi(int compNumb, PhaseInterface phase, double temperature, double pressure, + int numbcomp) { + double aij = 0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + Ai = 0.0; + for (int j = 0; j < numbcomp; j++) { + aij = Math.sqrt(compArray[compNumb].getaT() * compArray[j].getaT()); + Ai += compArray[j].getNumberOfMolesInPhase() * aij; + } + + return 2.0 * Ai; + } + + /** {@inheritDoc} */ + @Override + public double calcBi(int compNumb, PhaseInterface phase, double temperature, double pressure, + int numbcomp) { + double Bi = 0.0; + + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + for (int j = 0; j < numbcomp; j++) { + Bi += compArray[j].getNumberOfMolesInPhase() * getbij(compArray[compNumb], compArray[j]); + } + + Bi = (2.0 * Bi - getB()) / phase.getNumberOfMolesInPhase(); + return Bi; + } + + public double calcBi2(int compNumb, PhaseInterface phase, double temperature, double pressure, + int numbcomp) { + double Bi = 0.0; + + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + double sumk = 0; + for (int j = 0; j < numbcomp; j++) { + Bi += compArray[j].getNumberOfMolesInPhase() * getbij(compArray[compNumb], compArray[j]); + for (int k = 0; k < numbcomp; k++) { + sumk += compArray[j].getNumberOfMolesInPhase() * compArray[k].getNumberOfMolesInPhase() + * getbij(compArray[j], compArray[k]); + } + } + double ans1 = phase.getNumberOfMolesInPhase() * Bi - sumk; + + return ans1 / (phase.getNumberOfMolesInPhase() * phase.getNumberOfMolesInPhase()); + } + + /** {@inheritDoc} */ + @Override + public double calcBij(int compNumb, int compNumbj, PhaseInterface phase, double temperature, + double pressure, int numbcomp) { + double bij = 0.0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + bij = getbij(compArray[compNumb], compArray[compNumbj]); + return (2.0 * bij - compArray[compNumb].getBi() - compArray[compNumbj].getBi()) + / phase.getNumberOfMolesInPhase(); + } + + /** {@inheritDoc} */ + @Override + public double calcAiT(int compNumb, PhaseInterface phase, double temperature, double pressure, + int numbcomp) { + double A = 0.0; + double aij = 0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + for (int j = 0; j < numbcomp; j++) { + aij = 0.5 / Math.sqrt(compArray[compNumb].getaT() * compArray[j].getaT()) + * (compArray[compNumb].getaT() * compArray[j].getaDiffT() + + compArray[j].getaT() * compArray[compNumb].getaDiffT()); + A += compArray[j].getNumberOfMolesInPhase() * aij; + } + + return 2.0 * A; + } + + /** {@inheritDoc} */ + @Override + public double calcAij(int compNumb, int compNumbj, PhaseInterface phase, double temperature, + double pressure, int numbcomp) { + double aij = 0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + aij = Math.sqrt(compArray[compNumb].getaT() * compArray[compNumbj].getaT()); + + return 2.0 * aij; + } + + /** {@inheritDoc} */ + @Override + public double calcAT(PhaseInterface phase, double temperature, double pressure, int numbcomp) { + double A = 0.0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + for (int i = 0; i < numbcomp; i++) { + A += compArray[i].getNumberOfMolesInPhase() + * phase.calcAiT(i, phase, temperature, pressure, numbcomp); + } + + return 0.5 * A; + } + + /** {@inheritDoc} */ + @Override + public double calcATT(PhaseInterface phase, double temperature, double pressure, int numbcomp) { + double aij = 0; + double sqrtaij = 0; + double tempPow = 0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + A = 0.0; + for (int i = 0; i < numbcomp; i++) { + for (int j = 0; j < numbcomp; j++) { + sqrtaij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()); + tempPow = compArray[i].getaT() * compArray[j].getaDiffT() + + compArray[j].getaT() * compArray[i].getaDiffT(); + aij = 0.5 * ((2.0 * compArray[i].getaDiffT() * compArray[j].getaDiffT() + + compArray[i].getaT() * compArray[j].getaDiffDiffT() + + compArray[j].getaT() * compArray[i].getaDiffDiffT()) / sqrtaij + - tempPow * tempPow / (2.0 * sqrtaij * compArray[i].getaT() * compArray[j].getaT())); + A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() + * aij; + } + } + return A; + } + + /** {@inheritDoc} */ + @Override + public ClassicVdW clone() { + ClassicVdW clonedSystem = null; + try { + clonedSystem = (ClassicVdW) super.clone(); + } catch (Exception ex) { + logger.error("Cloning failed.", ex); + } + + return clonedSystem; + } + } + + public class ClassicSRK extends ClassicVdW { + /** Serialization version UID. */ + private static final long serialVersionUID = 1000; + + public double getkij(double temp, int i, int j) { + // System.out.println("kij " +intparam[i][j] ); + return intparam[i][j]; + } + + /** {@inheritDoc} */ + @Override + public double calcA(PhaseInterface phase, double temperature, double pressure, int numbcomp) { + double aij = 0; + ComponentEosInterface[] compArray = (ComponentEosInterface[]) phase.getcomponentArray(); + + A = 0.0; + for (int i = 0; i < numbcomp; i++) { + for (int j = 0; j < numbcomp; j++) { + aij = Math.sqrt(compArray[i].getaT() * compArray[j].getaT()) + * (1.0 - getkij(temperature, i, j)); + A += compArray[i].getNumberOfMolesInPhase() * compArray[j].getNumberOfMolesInPhase() + * aij; + } + } + Atot = A; + return A; + } + + // public double calcB(PhaseInterface phase, double temperature, double + // pressure, int numbcomp){ // B = 0.0; // ComponentEosInterface[] compArray = (ComponentEosInterface[]) // phase.getcomponentArray(); @@ -2179,425 +2597,6 @@ public double calcWTT(PhaseInterface phase, double temperature, double pressure, } } - /** - *- * getMixingRule. - *
- * - * @param mr a int - * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object - */ - public EosMixingRulesInterface getMixingRule(int mr) { - if (mr == 1) { - return new ClassicVdW(); - } else if (mr == 2) { - return new ClassicSRK(); - } else if (mr == 3) { - return new ClassicVdW(); - } else { - // TODO: not matching the initialization in getMixingRule(int mr, PhaseInterface phase) - return new ClassicVdW(); - } - } - - /** - *- * getMixingRule. - *
- * - * @param mr a int - * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object - * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object - */ - public EosMixingRulesInterface getMixingRule(int mr, PhaseInterface phase) { - this.wij = new double[3][phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - intparam = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - - if (mr == 1) { - mixingRuleName = "no (kij=0)"; - return new ClassicVdW(); - } - intparamji = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - intparamij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - intparamT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - intparamTType = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - HVDij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - HVDijT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - NRTLDij = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - NRTLDijT = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - WSintparam = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - HValpha = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - NRTLalpha = new double[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - classicOrHV = new String[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - classicOrWS = new String[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - wijCalcOrFitted = new int[phase.getNumberOfComponents()][phase.getNumberOfComponents()]; - try (neqsim.util.database.NeqSimDataBase database = new neqsim.util.database.NeqSimDataBase()) { - for (int k = 0; k < phase.getNumberOfComponents(); k++) { - String component_name = phase.getComponent(k).getComponentName(); - - for (int l = k; l < phase.getNumberOfComponents(); l++) { - String component_name2 = phase.getComponent(l).getComponentName(); - if (k == l) { - classicOrHV[k][l] = "Classic"; - classicOrWS[k][l] = "Classic"; - classicOrHV[l][k] = classicOrHV[k][l]; - classicOrWS[l][k] = classicOrWS[k][l]; - } else { - java.sql.ResultSet dataSet = null; - try { - int underscoreIndex = component_name.indexOf("__"); // double underscore - if (underscoreIndex != -1) { - component_name = component_name.substring(0, underscoreIndex); - } - int underscoreIndex2 = component_name2.indexOf("__"); - if (underscoreIndex2 != -1) { - component_name2 = component_name2.substring(0, underscoreIndex2); - } - if (phase.getComponent(k).isIsTBPfraction() - || phase.getComponent(l).isIsTBPfraction()) { - throw new Exception("no interaction coefficient for TBP fractions"); - } - int templ = l; - int tempk = k; - - if (NeqSimDataBase.createTemporaryTables()) { - dataSet = database.getResultSet("SELECT * FROM intertemp WHERE (comp1='" - + component_name + "' AND comp2='" + component_name2 + "') OR (comp1='" - + component_name2 + "' AND comp2='" + component_name + "')"); - } else { - dataSet = database.getResultSet("SELECT * FROM inter WHERE (comp1='" - + component_name + "' AND comp2='" + component_name2 + "') OR (comp1='" - + component_name2 + "' AND comp2='" + component_name + "')"); - } - dataSet.next(); - if (dataSet.getString("comp1").trim().equals(component_name2)) { - templ = k; - tempk = l; - } - - classicOrHV[k][l] = dataSet.getString("HVTYPE").trim(); - classicOrHV[l][k] = classicOrHV[k][l]; - - if (isCalcEOSInteractionParameters()) { - intparam[k][l] = - 1.0 - Math.pow( - (2.0 * Math.sqrt(Math.pow(phase.getComponent(l).getCriticalVolume(), 1 / 3) - * Math.pow(phase.getComponent(k).getCriticalVolume(), 1 / 3)) - / (Math.pow(phase.getComponent(l).getCriticalVolume(), 1 / 3) - + Math.pow(phase.getComponent(k).getCriticalVolume(), 1 / 3))), - nEOSkij); - intparamT[k][l] = 0.0; - // System.out.println("kij " + intparam[k][l]); - } else { - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePrEos")) { - // System.out.println("using PR intparams"); - intparam[k][l] = Double.parseDouble(dataSet.getString("kijpr")); - intparamT[k][l] = Double.parseDouble(dataSet.getString("KIJTpr")); - } else { - intparam[k][l] = Double.parseDouble(dataSet.getString("kijsrk")); - intparamT[k][l] = Double.parseDouble(dataSet.getString("KIJTSRK")); - } - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePrCPA")) { - intparam[k][l] = Double.parseDouble(dataSet.getString("cpakij_PR")); - intparamT[k][l] = 0.0; - } else if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - intparam[k][l] = Double.parseDouble(dataSet.getString("cpakij_SRK")); - intparamT[k][l] = Double.parseDouble(dataSet.getString("cpakijT_SRK")); - - intparamij[tempk][templ] = Double.parseDouble(dataSet.getString("cpakijx_SRK")); - intparamji[templ][tempk] = intparamij[tempk][templ]; - - intparamji[tempk][templ] = Double.parseDouble(dataSet.getString("cpakjix_SRK")); - intparamij[templ][tempk] = intparamji[tempk][templ]; - } - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFTRahmat") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFT") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhasePCSAFTa")) { - intparam[k][l] = Double.parseDouble(dataSet.getString("KIJPCSAFT")); - intparamT[k][l] = 0.0; - } - } - - java.sql.ResultSetMetaData dataSetMD = dataSet.getMetaData(); - int cols = dataSetMD.getColumnCount(); - boolean hasKIJTTypeCPAcol = false; - String colname = "KIJTTypeCPA"; - for (int x = 1; x <= cols; x++) { - if (colname.equals(dataSetMD.getColumnName(x))) { - hasKIJTTypeCPAcol = true; - } - } - - // System.out.println("class name " + phase.getClass().getName()); - if (!phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || !hasKIJTTypeCPAcol) { - intparamTType[k][l] = Integer.parseInt(dataSet.getString("KIJTType")); - } else { - intparamTType[k][l] = Integer.parseInt(dataSet.getString("KIJTTypeCPA")); - // TODO: implement in all dbs - } - intparamTType[l][k] = intparamTType[k][l]; - - HValpha[k][l] = Double.parseDouble(dataSet.getString("HValpha")); - HValpha[l][k] = HValpha[k][l]; - - HVDij[tempk][templ] = Double.parseDouble(dataSet.getString("HVgij")); - HVDij[templ][tempk] = Double.parseDouble(dataSet.getString("HVgji")); - - wijCalcOrFitted[k][l] = Integer.parseInt(dataSet.getString("CalcWij")); - wijCalcOrFitted[l][k] = wijCalcOrFitted[k][l]; - - wij[0][k][l] = Double.parseDouble(dataSet.getString("w1")); - wij[0][l][k] = wij[0][k][l]; - wij[1][k][l] = Double.parseDouble(dataSet.getString("w2")); - wij[1][l][k] = wij[1][k][l]; - wij[2][k][l] = Double.parseDouble(dataSet.getString("w3")); - wij[2][l][k] = wij[2][k][l]; - - classicOrWS[k][l] = dataSet.getString("WSTYPE").trim(); - classicOrWS[l][k] = classicOrWS[k][l]; - - WSintparam[k][l] = Double.parseDouble(dataSet.getString("kijWS")); - WSintparam[k][l] = Double.parseDouble(dataSet.getString("KIJWSunifac")); - WSintparam[l][k] = WSintparam[k][l]; - - NRTLalpha[k][l] = Double.parseDouble(dataSet.getString("NRTLalpha")); - NRTLalpha[l][k] = NRTLalpha[k][l]; - - NRTLDij[tempk][templ] = Double.parseDouble(dataSet.getString("NRTLgij")); - NRTLDij[templ][tempk] = Double.parseDouble(dataSet.getString("NRTLgji")); - - HVDijT[tempk][templ] = Double.parseDouble(dataSet.getString("HVgijT")); - HVDijT[templ][tempk] = Double.parseDouble(dataSet.getString("HVgjiT")); - - NRTLDijT[tempk][templ] = Double.parseDouble(dataSet.getString("WSgijT")); - NRTLDijT[templ][tempk] = Double.parseDouble(dataSet.getString("WSgjiT")); - } catch (Exception ex) { - // System.out.println("err in thermo mix....."); - // System.out.println(ex.toString()); - if (isCalcEOSInteractionParameters()) { - intparam[k][l] = 1.0 - Math.pow( - (2.0 * Math.sqrt(Math.pow(phase.getComponent(l).getCriticalVolume(), 1.0 / 3.0) - * Math.pow(phase.getComponent(k).getCriticalVolume(), 1.0 / 3.0)) - / (Math.pow(phase.getComponent(l).getCriticalVolume(), 1.0 / 3.0) - + Math.pow(phase.getComponent(k).getCriticalVolume(), 1.0 / 3.0))), - nEOSkij); - // System.out.println("intparam not defined .... CALCULATING intparam - // between " - // +component_name2 + " and " + - // component_name+ " to " + - // intparam[k][l]); - } else if ((component_name.equals("CO2") && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("CO2") && phase.getComponent(k).isIsTBPfraction())) { - intparam[k][l] = 0.1; - } else if ((component_name.equals("nitrogen") - && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("nitrogen") - && phase.getComponent(k).isIsTBPfraction())) { - intparam[k][l] = 0.08; - } else if ((component_name.equals("water") && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("water") && phase.getComponent(k).isIsTBPfraction())) { - intparam[k][l] = 0.2; - - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - // intparam[k][l] = -0.0685; // taken from Riaz et a. 2012 - - double molmassPC = phase.getComponent(l).getMolarMass(); - if (phase.getComponent(k).isIsTBPfraction()) { - molmassPC = phase.getComponents()[k].getMolarMass(); - } - double intparamkPC = -0.1533 * Math.log(1000.0 * molmassPC) + 0.7055; - intparam[k][l] = intparamkPC; - // System.out.println("kij water-HC " + intparam[k][l]); - - intparamT[k][l] = 0.0; - } - } else if ((component_name.equals("MEG") && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("MEG") - && phase.getComponents()[k].isIsTBPfraction())) { - intparam[k][l] = 0.2; - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - double molmassPC = phase.getComponent(l).getMolarMass(); - if (phase.getComponents()[k].isIsTBPfraction()) { - molmassPC = phase.getComponents()[k].getMolarMass(); - } - double intparamkPC = -0.0701 * Math.log(1000.0 * molmassPC) + 0.3521; - intparam[k][l] = intparamkPC; - // System.out.println("kij MEG-HC " + intparam[k][l]); - // intparam[k][l] = 0.01; - intparamT[k][l] = 0.0; - } - } else if ((component_name.equals("ethanol") - && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("ethanol") - && phase.getComponents()[k].isIsTBPfraction())) { - intparam[k][l] = 0.0; - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - intparam[k][l] = -0.05; - intparamT[k][l] = 0.0; - if (phase.getComponents()[k].getMolarMass() > (200.0 / 1000.0) - || phase.getComponent(l).getMolarMass() > (200.0 / 1000.0)) { - intparam[k][l] = -0.1; - } - } - } else if ((component_name.equals("methanol") - && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("methanol") - && phase.getComponents()[k].isIsTBPfraction())) { - intparam[k][l] = 0.0; - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - intparam[k][l] = -0.1; - intparamT[k][l] = 0.0; - if (phase.getComponents()[k].getMolarMass() > (200.0 / 1000.0) - || phase.getComponent(l).getMolarMass() > (200.0 / 1000.0)) { - intparam[k][l] = -0.2; - } - } - } else if ((component_name.equals("TEG") && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("TEG") - && phase.getComponents()[k].isIsTBPfraction())) { - intparam[k][l] = 0.12; - if (phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPA") - || phase.getClass().getName().equals("neqsim.thermo.phase.PhaseSrkCPAs") - || phase.getClass().getName() - .equals("neqsim.thermo.phase.PhaseElectrolyteCPAstatoil")) { - intparam[k][l] = 0.12; - intparamT[k][l] = 0.0; - } - } else if ((component_name.equals("S8") && phase.getComponent(l).isIsTBPfraction()) - || (component_name2.equals("S8") && phase.getComponents()[k].isIsTBPfraction())) { - intparam[k][l] = 0.05; - } else { - // if((component_name2.equals("CO2") || - // component_name.equals("CO2")) && k!=l) - // intparam[k][l] = 0.1; - // else if((component_name2.equals("H2S") || - // component_name.equals("H2S")) && k!=l) - // intparam[k][l] = 0.2; - // else if((component_name2.equals("water") - // || - // component_name.equals("water")) && k!=l) - // intparam[k][l] = 0.5; - // else intparam[k][l] = 0.0; - // System.out.println("intparam not defined .... setting intparam - // between " + - // component_name2 + " and " + - // component_name + " to " + - // intparam[k][l]); - } - - // intparam[l][k] = intparam[k][l]; - // intparamT[l][k] = intparamT[k][l]; - intparamij[k][l] = intparam[k][l]; - intparamij[l][k] = intparam[k][l]; - intparamji[k][l] = intparam[k][l]; - intparamji[l][k] = intparam[k][l]; - // System.out.println("kij set to " + intparam[l][k] + " " + - // component_name2 + " " + - // component_name); - - classicOrHV[k][l] = "Classic"; - classicOrHV[l][k] = classicOrHV[k][l]; - - classicOrWS[k][l] = "Classic"; - classicOrWS[l][k] = classicOrWS[k][l]; - } finally { - intparam[l][k] = intparam[k][l]; - intparamT[l][k] = intparamT[k][l]; - try { - if (dataSet != null) { - dataSet.close(); - } - } catch (Exception ex) { - logger.error("err closing dataSet IN MIX...", ex); - } - } - } - } - } - } catch (Exception ex) { - logger.error("error reading from database", ex); - } - - return resetMixingRule(mr, phase); - } - - /** - *- * resetMixingRule. - *
- * - * @param i a int - * @param phase a {@link neqsim.thermo.phase.PhaseInterface} object - * @return a {@link neqsim.thermo.mixingrule.EosMixingRulesInterface} object - */ - public EosMixingRulesInterface resetMixingRule(int i, PhaseInterface phase) { - if (i == 1) { - mixingRuleName = "no (kij=0)"; - return new ClassicVdW(); - } else if (i == 2) { - mixingRuleName = "classic"; - return new ClassicSRK(); - } else if (i == 3) { - // Classic Huron-Vidal - mixingRuleName = "Huron-Vidal"; - return new SRKHuronVidal2(phase, HValpha, HVDij, classicOrHV); - } else if (i == 4) { - mixingRuleName = "Huron-Vidal"; - return new SRKHuronVidal2(phase, HValpha, HVDij, HVDijT, classicOrHV); - } else if (i == 5) { - mixingRuleName = "Wong-Sandler"; - return new WongSandlerMixingRule(phase, NRTLalpha, NRTLDij, NRTLDijT, classicOrWS); - } else if (i == 6) { - // Exactly the same as 5 - mixingRuleName = "Wong-Sandler"; - return new WongSandlerMixingRule(phase, NRTLalpha, NRTLDij, NRTLDijT, classicOrWS); - } else if (i == 7) { - mixingRuleName = "classic-CPA"; - return new ClassicSRK(); - } else if (i == 8) { - mixingRuleName = "classic-T"; - return new ClassicSRKT(); - } else if (i == 9) { - mixingRuleName = "classic-CPA_T"; - return new ClassicSRKT2(); - } else if (i == 10) { - // return new ElectrolyteMixRule(phase, HValpha, HVgij, HVgii, - // classicOrHV,wij);} - org.ejml.simple.SimpleMatrix mat1 = new org.ejml.simple.SimpleMatrix(intparamij); - org.ejml.simple.SimpleMatrix mat2 = new org.ejml.simple.SimpleMatrix(intparamji); - org.ejml.simple.SimpleMatrix mat3 = new org.ejml.simple.SimpleMatrix(intparamT); - if (mat1.isIdentical(mat2, 1e-8)) { - if (mat3.elementMaxAbs() < 1e-8) { - mixingRuleName = "classic-CPA"; - return new ClassicSRK(); - } - mixingRuleName = "classic-CPA_T"; - return new ClassicSRKT2(); - } else { - mixingRuleName = "classic-CPA_Tx"; - return new ClassicSRKT2x(); - } - } else { - return new ClassicVdW(); - } - } - /** ** getElectrolyteMixingRule. diff --git a/src/main/java/neqsim/thermo/mixingrule/MixingRuleHandler.java b/src/main/java/neqsim/thermo/mixingrule/MixingRuleHandler.java new file mode 100644 index 000000000..1c8036eff --- /dev/null +++ b/src/main/java/neqsim/thermo/mixingrule/MixingRuleHandler.java @@ -0,0 +1,13 @@ +package neqsim.thermo.mixingrule; + +import neqsim.thermo.ThermodynamicConstantsInterface; + + +public abstract class MixingRuleHandler implements ThermodynamicConstantsInterface { + + protected String mixingRuleName; + + public String getName() { + return mixingRuleName; + } +} diff --git a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java index c588a5990..f6fd959c6 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPA.java @@ -8,7 +8,7 @@ import org.ejml.simple.SimpleMatrix; import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentElectrolyteCPA; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -27,7 +27,7 @@ public class PhaseElectrolyteCPA extends PhaseModifiedFurstElectrolyteEos /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseElectrolyteCPA.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double gcpavv = 0.0; double gcpavvv = 0.0; diff --git a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java index b4d860504..6b1ff7cc5 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java +++ b/src/main/java/neqsim/thermo/phase/PhaseElectrolyteCPAOld.java @@ -5,7 +5,7 @@ import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentElectrolyteCPA; import neqsim.thermo.component.ComponentEosInterface; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -24,7 +24,7 @@ public class PhaseElectrolyteCPAOld extends PhaseModifiedFurstElectrolyteEos /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseElectrolyteCPAOld.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); int totalNumberOfAccociationSites = 0; public CPAMixingRulesInterface cpamix; diff --git a/src/main/java/neqsim/thermo/phase/PhaseEos.java b/src/main/java/neqsim/thermo/phase/PhaseEos.java index 8c0c6293e..f4f6660bd 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseEos.java +++ b/src/main/java/neqsim/thermo/phase/PhaseEos.java @@ -10,8 +10,8 @@ import org.apache.logging.log4j.Logger; import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentEosInterface; +import neqsim.thermo.mixingrule.EosMixingRuleHandler; import neqsim.thermo.mixingrule.EosMixingRuleType; -import neqsim.thermo.mixingrule.EosMixingRules; import neqsim.thermo.mixingrule.EosMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; import neqsim.util.ExcludeFromJacocoGeneratedReport; @@ -36,7 +36,7 @@ public abstract class PhaseEos extends Phase implements PhaseEosInterface { public double delta1 = 0; public double delta2 = 0; - protected EosMixingRules mixSelect = new EosMixingRules(); + protected EosMixingRuleHandler mixSelect = new EosMixingRuleHandler(); protected EosMixingRulesInterface mixRule = null; double uEOS = 0; double wEOS = 0; diff --git a/src/main/java/neqsim/thermo/phase/PhaseGE.java b/src/main/java/neqsim/thermo/phase/PhaseGE.java index bc5e696a9..7da2d35f9 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseGE.java +++ b/src/main/java/neqsim/thermo/phase/PhaseGE.java @@ -11,14 +11,14 @@ import neqsim.thermo.ThermodynamicConstantsInterface; import neqsim.thermo.ThermodynamicModelSettings; import neqsim.thermo.component.ComponentGEInterface; +import neqsim.thermo.mixingrule.EosMixingRuleHandler; import neqsim.thermo.mixingrule.EosMixingRuleType; -import neqsim.thermo.mixingrule.EosMixingRules; import neqsim.thermo.mixingrule.EosMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; /** *
- * PhaseGE class. + * Abstract class PhaseGE. *
* * @author Even Solbraa @@ -30,7 +30,7 @@ public abstract class PhaseGE extends Phase implements PhaseGEInterface { /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseGE.class); - EosMixingRules mixSelect = new EosMixingRules(); + EosMixingRuleHandler mixSelect = new EosMixingRuleHandler(); EosMixingRulesInterface mixRule; /** diff --git a/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java b/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java index 95d65b4f0..fdef4d2e0 100644 --- a/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java +++ b/src/main/java/neqsim/thermo/phase/PhasePCSAFTa.java @@ -4,7 +4,7 @@ import org.apache.logging.log4j.Logger; import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentPCSAFTa; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -22,7 +22,7 @@ public class PhasePCSAFTa extends PhasePCSAFT implements PhaseCPAInterface { /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhasePCSAFTa.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double hcpatot = 1.0; double hcpatotdT = 0.0; diff --git a/src/main/java/neqsim/thermo/phase/PhasePrCPA.java b/src/main/java/neqsim/thermo/phase/PhasePrCPA.java index b481cb361..868970cd6 100644 --- a/src/main/java/neqsim/thermo/phase/PhasePrCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhasePrCPA.java @@ -2,7 +2,7 @@ import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentSrkCPA; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; /** @@ -18,7 +18,7 @@ public class PhasePrCPA extends PhasePrEos implements PhaseCPAInterface { private static final long serialVersionUID = 1000; int totalNumberOfAccociationSites = 0; - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double hcpatot = 1.0; double hcpatotdT = 0.0; diff --git a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java index ce0ac31d3..db8055e48 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA.java @@ -8,7 +8,7 @@ import org.ejml.simple.SimpleMatrix; import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentSrkCPA; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -26,7 +26,7 @@ public class PhaseSrkCPA extends PhaseSrkEos implements PhaseCPAInterface { /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseSrkCPA.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double gcpavv = 0.0; double gcpavvv = 0.0; diff --git a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java index 7e5a7e621..f2d76d02a 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java +++ b/src/main/java/neqsim/thermo/phase/PhaseSrkCPA_proceduralMatrices.java @@ -7,7 +7,7 @@ import org.ejml.dense.row.NormOps_DDRM; import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentSrkCPA; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -25,7 +25,7 @@ public class PhaseSrkCPA_proceduralMatrices extends PhaseSrkEos implements Phase /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseSrkCPA_proceduralMatrices.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double gcpavv = 0.0; double gcpavvv = 0.0; diff --git a/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java b/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java index a1f5e2f79..a6c3736f1 100644 --- a/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java +++ b/src/main/java/neqsim/thermo/phase/PhaseUMRCPA.java @@ -9,7 +9,7 @@ // import org.ejml.data.DenseMatrix64F; import neqsim.thermo.component.ComponentCPAInterface; import neqsim.thermo.component.ComponentUMRCPA; -import neqsim.thermo.mixingrule.CPAMixingRules; +import neqsim.thermo.mixingrule.CPAMixingRuleHandler; import neqsim.thermo.mixingrule.CPAMixingRulesInterface; import neqsim.thermo.mixingrule.MixingRuleTypeInterface; @@ -27,7 +27,7 @@ public class PhaseUMRCPA extends PhasePrEos implements PhaseCPAInterface { /** Logger object for class. */ static Logger logger = LogManager.getLogger(PhaseUMRCPA.class); - public CPAMixingRules cpaSelect = new CPAMixingRules(); + public CPAMixingRuleHandler cpaSelect = new CPAMixingRuleHandler(); public CPAMixingRulesInterface cpamix; double gcpavv = 0.0; double gcpavvv = 0.0; diff --git a/src/main/java/neqsim/thermo/system/SystemThermo.java b/src/main/java/neqsim/thermo/system/SystemThermo.java index 41b995693..ad42cdb05 100644 --- a/src/main/java/neqsim/thermo/system/SystemThermo.java +++ b/src/main/java/neqsim/thermo/system/SystemThermo.java @@ -1287,7 +1287,7 @@ public void calcInterfaceProperties() { /** {@inheritDoc} */ @Override public void calcKIJ(boolean ok) { - neqsim.thermo.mixingrule.EosMixingRules.calcEOSInteractionParameters = ok; + neqsim.thermo.mixingrule.EosMixingRuleHandler.calcEOSInteractionParameters = ok; for (int i = 0; i < numberOfPhases; i++) { ((PhaseEosInterface) getPhase(i)).getEosMixingRule().setCalcEOSInteractionParameters(ok); }