Skip to content

Ioc api #306

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 61 commits into from
Feb 16, 2022
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
1b7a3ab
wip
fannemel Jan 6, 2022
fe86553
feat: added IOC api code
fannemel Jan 13, 2022
9b0ce68
first draft IOC api refactor
fannemel Jan 13, 2022
a50d641
wip
fannemel Jan 17, 2022
920eb6c
bugfix: overload
fannemel Jan 18, 2022
4251061
style
fannemel Jan 18, 2022
756c9b2
moved from fluidproperties to thermodynamicoperations
fannemel Jan 20, 2022
0fd65fb
wip
fannemel Jan 20, 2022
731345c
wip
fannemel Jan 20, 2022
7d86950
wip
fannemel Jan 20, 2022
7ff776c
Merge branch 'master' into IOC_api
fannemel Jan 20, 2022
e4088e8
rm unused files
fannemel Jan 21, 2022
15bc148
wip
fannemel Jan 21, 2022
39bfea0
wip
fannemel Jan 23, 2022
23ea12f
chore: removed unused variables
fannemel Jan 24, 2022
17233ed
Merge branch 'master' into IOC_api
fannemel Jan 24, 2022
1e43762
revert
fannemel Jan 24, 2022
9672bec
Merge branch 'master' into IOC_api
fannemel Jan 24, 2022
596274f
Merge branch 'master' into IOC_api
fannemel Jan 24, 2022
6a5d6e3
Merge branch 'master' into IOC_api
fannemel Jan 24, 2022
836d571
bugfix: k++
fannemel Jan 24, 2022
353bef9
test
fannemel Jan 24, 2022
88f451c
5% tolerance
fannemel Jan 24, 2022
4218c6c
stuff
fannemel Jan 24, 2022
fb36112
bugfix: addComponent missed one component
fannemel Jan 24, 2022
0d6cc0f
Merge branch 'master' into IOC_api
asmfstatoil Jan 31, 2022
a29cbdf
Merge branch 'master' into IOC_api
asmfstatoil Jan 31, 2022
a4416cf
Merge branch 'master' into IOC_api
asmfstatoil Feb 8, 2022
537de88
refact: addComponents
asmfstatoil Feb 8, 2022
1cbc45b
docfix
asmfstatoil Feb 8, 2022
3be0727
Merge branch 'master' into IOC_api
asmfstatoil Feb 9, 2022
31cb405
Merge branch 'master' into addComponent
asmfstatoil Feb 9, 2022
c47a0d6
Merge branch 'master' into addComponent
asmfstatoil Feb 9, 2022
8b7a4c7
docfix
asmfstatoil Feb 9, 2022
20f05b7
docfix
asmfstatoil Feb 9, 2022
85cd226
Merge branch 'master' into IOC_api
asmfstatoil Feb 9, 2022
5340fc8
docfix
asmfstatoil Feb 9, 2022
93f6648
Merge branch 'master' into addComponent
asmfstatoil Feb 10, 2022
850d01b
Merge remote-tracking branch 'upstream/master'
asmfstatoil Feb 10, 2022
f4be3a6
Merge branch 'master' into IOC_api
asmfstatoil Feb 10, 2022
acb6016
Merge branch 'master' into addComponent
asmfstatoil Feb 10, 2022
85919e9
Merge branch 'master' into IOC_api
asmfstatoil Feb 10, 2022
9237bd9
Merge branch 'master' into addComponent
asmfstatoil Feb 10, 2022
81bc240
Merge branch 'master' into IOC_api
asmfstatoil Feb 11, 2022
94f5670
Merge branch 'master' into addComponent
asmfstatoil Feb 11, 2022
2d47e3b
Merge branch 'master' into addComponent
asmfstatoil Feb 15, 2022
ce32c06
mergefix: call exception with error message
asmfstatoil Feb 15, 2022
7232dba
fix
asmfstatoil Feb 15, 2022
ca14abc
Merge branch 'master' into IOC_api
asmfstatoil Feb 15, 2022
63d87dd
Merge branch 'addComponent' into IOC_api
asmfstatoil Feb 15, 2022
040a5c0
new function
asmfstatoil Feb 15, 2022
dc96f5a
test to be implemented
asmfstatoil Feb 15, 2022
a6c57bb
Merge branch 'master' into IOC_api
asmfstatoil Feb 15, 2022
8a57872
revert
asmfstatoil Feb 15, 2022
581bc3d
cleanup
asmfstatoil Feb 15, 2022
d205714
Merge branch 'master' into IOC_api
asmfstatoil Feb 15, 2022
2b3a3cb
Update ThermodynamicOperationsTest.java
asmfstatoil Feb 16, 2022
0895881
Merge branch 'master' into IOC_api
asmfstatoil Feb 16, 2022
8c6b5c6
revert
asmfstatoil Feb 16, 2022
4f399c0
fix
asmfstatoil Feb 16, 2022
61646c9
fix
asmfstatoil Feb 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/main/java/neqsim/api/ioc/CalculationResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package neqsim.api.ioc;

/**
*
* @author jo.lyshoel
*/
public class CalculationResult {

public Double[][] fluidProperties;
public String[] calculationError;

public CalculationResult() {}

public CalculationResult(Double[][] fluidProperties, String[] calculationError) {
this.fluidProperties = fluidProperties;
this.calculationError = calculationError;
}
}
21 changes: 20 additions & 1 deletion src/main/java/neqsim/thermo/system/SystemInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void addPhaseFractionToPhase(double fraction, String specification,
public void setComponentNameTag(String nameTag);

/**
* add components to a fluid. If component already exists, it will be added to the component
* add components to a fluid. If component already exists, nothing changes.
*
* @param names Names of the components to be added. See NeqSim database for available
* components in the database.
Expand All @@ -100,6 +100,19 @@ default public void addComponents(String[] names) {
}
}


/**
* add components to a fluid. If component already exists, it will be added to the component
*
* @param names
* @param values
*/
default public void addComponents(String[] names, double[] values) {
for (int i = 0; i < names.length; i++) {
addComponent(names[i], values[i]);
}
}

/**
* <p>
* calcResultTable.
Expand Down Expand Up @@ -2459,4 +2472,10 @@ public void setImplementedCompositionDeriativesofFugacity(
* @param propertyName a {@link java.lang.String} object
*/
public void addCapeOpenProperty(String propertyName);

/**
*
* @return Double
*/
public SystemProperties getProperties();
}
184 changes: 184 additions & 0 deletions src/main/java/neqsim/thermo/system/SystemProperties.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
package neqsim.thermo.system;

import java.util.Objects;
import neqsim.thermo.phase.PhaseInterface;

public class SystemProperties {
public Double[] values;
protected String[] names;

public static final int nCols = 70;

public SystemProperties(Double[] values, String[] names) {
this.names = names;
this.values = values;
}

public SystemProperties(SystemInterface fluid) {
final String[] phaseName = {"gas", "oil", "aqueous"};

values = new Double[nCols];
names = new String[nCols];
int k = 0;

names[k] = "Mix Number of Phases";
values[k] = (double) fluid.getNumberOfPhases();
names[k++] = "Mix Pressure [Pa]";
values[k] = fluid.getPressure("Pa");
names[k++] = "Mix Temperature [K]";
values[k] = fluid.getTemperature("K");
names[k++] = "Mix Mole Percent";
values[k] = fluid.getNumberOfMoles() * 100;
names[k++] = "Mix Weight Percent";
values[k] = 100.0;
names[k++] = "Mix Molar Volume [m3/mol]";
values[k] = 1.0 / fluid.getDensity("mol/m3");
names[k++] = "Mix Volume Percent";
values[k] = 100.0;
names[k++] = "Mix Density [kg/m3]";
values[k] = fluid.getDensity("kg/m3");
names[k++] = "Mix Z Factor";
values[k] = fluid.getZ();
names[k++] = "Mix Molecular Weight [g/mol]";
values[k] = fluid.getMolarMass() * 1000;
names[k++] = "Mix Enthalpy [J/mol]";
values[k] = fluid.getEnthalpy("J/mol");
names[k++] = "Mix Entropy [J/molK]";
values[k] = fluid.getEntropy("J/molK");
names[k++] = "Mix Heat Capacity-Cp [J/molK]";
values[k] = fluid.getCp("J/molK");
names[k++] = "Mix Heat Capacity-Cv [J/molK]";
values[k] = fluid.getCv("J/molK");
names[k++] = "Mix Gamma (Cp/Cv)";
// values[k] = getCp()/getCv();
values[k] = fluid.getGamma();
names[k++] = "Mix JT Coefficient [K/Pa]";
values[k] = Double.NaN;
names[k++] = "Mix Velocity of Sound [m/s]";
values[k] = Double.NaN;
names[k++] = "Mix Viscosity [Pa s] or [kg/(m*s)]";
values[k] = fluid.getViscosity("kg/msec");
names[k++] = "Mix Thermal Conductivity [W/mK]";
values[k] = fluid.getThermalConductivity("W/mK");

// Phase properties (phase: gas=0, liquid=1, Aqueous=2)
for (int j = 0; j < 3; j++) {
String currPhaseName = phaseName[j];

if (fluid.hasPhaseType(phaseName[j])) {
int phaseNumber = fluid.getPhaseNumberOfPhase(phaseName[j]);
PhaseInterface currPhase = fluid.getPhase(phaseNumber);
names[k++] = currPhaseName + " Mole Percent";
values[k] = fluid.getMoleFraction(phaseNumber) * 100;
names[k++] = currPhaseName + " Weight Percent";
values[k] = fluid.getWtFraction(phaseNumber) * 100;
names[k++] = currPhaseName + " Molar Volume [m3/mol]";
values[k] = 1.0 / currPhase.getDensity("mol/m3");
names[k++] = currPhaseName + " Volume Percent";
values[k] = fluid.getCorrectedVolumeFraction(phaseNumber) * 100;
names[k++] = currPhaseName + " Density [kg/m3]";
values[k] = currPhase.getDensity("kg/m3");

names[k++] = currPhaseName + " Z Factor";
if (Objects.equals(phaseName[j], "oil")
|| Objects.equals(phaseName[j], "aqueous")) {
// Phase doesn't calculate correct result for these properties. See specs
values[k] = Double.NaN;
} else {
values[k] = currPhase.getZ();
}

names[k++] = currPhaseName + "Molecular Weight [g/mol]";
values[k] = currPhase.getMolarMass() * 1000;
// values[k] = currPhase.getEnthalpy() /
// currPhase.getNumberOfMolesInPhase();
names[k++] = currPhaseName + "Enthalpy [J/mol]";
values[k] = currPhase.getEnthalpy("J/mol");
names[k++] = currPhaseName + "Entropy [J/molK]";
// values[k] = currPhase.getEntropy() / currPhase.getNumberOfMolesInPhase();
values[k] = currPhase.getEntropy("J/molK");
names[k++] = currPhaseName + "Heat Capacity-Cp [J/molK]";
// values[k] = currPhase.getCp() / currPhase.getNumberOfMolesInPhase();
values[k] = currPhase.getCp("J/molK");
names[k++] = currPhaseName + " Heat Capacity-Cv [J/molK]";
// values[k] = currPhase.getCv() / currPhase.getNumberOfMolesInPhase();
values[k] = currPhase.getCv("J/molK");
names[k++] = currPhaseName + " Gamma (Cp/Cv)";
// values[k] = currPhase.getCp() / currPhase.getCv();
values[k] = currPhase.getGamma();

names[k++] = currPhaseName + " JT Coefficient [K/Pa]";
if (Objects.equals(phaseName[j], "oil")
|| Objects.equals(phaseName[j], "aqueous")) {
// Phase doesn't calculate correct result for these properties. See specs
values[k] = Double.NaN;
names[k++] = currPhaseName + " Velocity of Sound [m/s]";
values[k] = Double.NaN;
} else {
values[k] = currPhase.getJouleThomsonCoefficient() / 1e5;
names[k++] = currPhaseName + " Velocity of Sound [m/s]";
values[k] = currPhase.getSoundSpeed();
}

names[k++] = currPhaseName + " Viscosity [Pa s] or [kg/msec]";
values[k] = currPhase.getViscosity("kg/msec");
names[k++] = currPhaseName + " Thermal Conductivity [W/mK]";
values[k] = currPhase.getConductivity("W/mK");
} else {
names[k++] = currPhaseName + " Mole Percent";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Weight Percent";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Molar Volume [m3/mol]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Volume Percent";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Density [kg/m3]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Z Factor";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Molecular Weight [g/mol]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Enthalpy [J/mol]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Entropy [J/molK]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Heat Capacity-Cp [J/molK]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Heat Capacity-Cv [J/molK]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Kappa (Cp/Cv)";
values[k] = Double.NaN;
names[k++] = currPhaseName + " JT Coefficient K/Pa]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Velocity of Sound [m/s]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Viscosity [Pa s]";
values[k] = Double.NaN;
names[k++] = currPhaseName + " Thermal Conductivity [W/mK]";
values[k] = Double.NaN;
}
}

names[k++] = "Interfacial Tension Gas/Oil [N/m]";
if (fluid.hasPhaseType("gas") && fluid.hasPhaseType("oil")) {
values[k] = fluid.getInterfacialTension("gas", "oil");
} else {
values[k] = Double.NaN;
}

names[k++] = "Interfacial Tension Gas/Aqueous [N/m]";
if (fluid.hasPhaseType("gas") && fluid.hasPhaseType("aqueous")) {
values[k] = fluid.getInterfacialTension("gas", "aqueous");
} else {
values[k] = Double.NaN;
}

names[k++] = "Interfacial Tension Oil/Aqueous [N/m]";
if (fluid.hasPhaseType("oil") && fluid.hasPhaseType("aqueous")) {
values[k] = fluid.getInterfacialTension("oil", "aqueous");
} else {
values[k] = Double.NaN;
}
}
}
Loading