Skip to content

Commit

Permalink
Merge pull request #62 from equinor/may2020
Browse files Browse the repository at this point in the history
added possibility to tune the wax model
  • Loading branch information
EvenSol authored May 6, 2020
2 parents eb165fa + fea64e7 commit 57aadc8
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
13 changes: 13 additions & 0 deletions examples/waxFlash.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,16 @@
waxTemp = WAT(fluid1)-273.15
#printFrame(fluid1)
print("WAT ", waxTemp, " °C")


# The following code illustrates how we can fit the neqsim wax model to experimental wax precipitation data
# THe experimental data will be wt fraction of wax formed as function of temperature (wax precipitation curve)
experimentaldata = {'temperature': [20.0, 10.0],
'pressure': [50.0, 50.0],
'experiment': [0.04, 0.06]
}

results2 = tunewaxmodel(fluid1, experimentaldata)
print(results2)


31 changes: 31 additions & 0 deletions src/neqsim/thermo/thermoTools.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,38 @@ def addOilFractions(fluid, charNames,molefractions,molarMass, density, lastIsPl

def newdatabase(system):
system.createDatabase(1)

def tunewaxmodel(fluid, experimentaldata):
gateway = javaGateway.JavaGateway()
double_class = gateway.jvm.double
tempList = experimentaldata['temperature']
presList = experimentaldata['pressure']
expList = experimentaldata['experiment']
numberofdata =len(tempList)
temperatureJavaArray = gateway.new_array(double_class,numberofdata)
pressureJavaArray = gateway.new_array(double_class,numberofdata)
experimentJavaArray = gateway.new_array(double_class,numberofdata, 1)
i = 0
for i in range(0,numberofdata):
temperatureJavaArray[i] = tempList[i]+273.15
pressureJavaArray[i] = presList[i]
experimentJavaArray[i][0] = expList[i]*100
waxsim = neqsim.PVTsimulation.simulation.WaxFractionSim(fluid)
waxsim.setTemperaturesAndPressures(temperatureJavaArray, pressureJavaArray)
waxsim.setExperimentalData(experimentJavaArray)
waxsim.getOptimizer().setNumberOfTuningParameters(3)
waxsim.getOptimizer().setMaxNumberOfIterations(20)
waxsim.runTuning()
waxsim.runCalc()

results = {'temperature': [20.0, 10.0],
'pressure': [50.0, 50.0],
'experiment': [0.01, 0.02],
'results': list(waxsim.getWaxFraction()),
'parameters': list(waxsim.getOptimizer().getSampleSet().getSample(0).getFunction().getFittingParams())
}
return results

def data(system):
a = system.getResultTable()
return a
Expand Down

0 comments on commit 57aadc8

Please sign in to comment.