Gas Lift Optimization Using Python and Prosper Well Models
Description
Full text not available
Abstract
Arbeidet utført i denne masteroppgaven har hatt som mål å maksimere produksjon av olje innenfor begresninger på trykk, gassløftrate og andre prosessbegrensninger. Brønn-modellen, som beskriver oppførselen til en brønn når det blir utført gassløft, er levert av Prosper. Dette er en programvare for analyse av flerfasestrømning i brønner og rørledninger. Optimaliseringen blir utført ved brukt av Python algoritmer, noe som gir grunnlag for arbeid med å importere og manipulere data levert fra Prosper. Brønnmodellen består av noen frie variabler som bunnhullstrykk, forholdet mellom gass og olje, vannkutt, gassløft injeksjonsrate og væskerate. I tillegg er det noen utregnede variabler i filen, som brønnhodetrykk og -temperatur. Før dataen er klar for optimalisering blir den importert til Python og interpolert. Før interpoleringen blir det også utført enhetskonvertering av dataen.
Gjennom arbeidet med denne oppgaven er det produsert en Python-kode som leser inn brønnmodellen til Python på en effektiv måte. Koden takler så mange frie og utregnede variabler som ønsket. Den stiller allikevel noen krav til formen på filen, for å sikre at riktige verdier blir lest inn. Ved å kjøre koden for interpolasjon blir den flerdimensjonale interpolasjonen av datapunktene utført. Koden utfører og enhetskonvertering for at man kan få resultater med korrekt norsk standard for verdiene. Interpolasjonen tar høyde for at antall frie variabler er mellom 0 og 6, mens antall utregnede variabler kan være så mange som nødvendig. Antall frie variabler tillatt kan økes ved å endre litt på koden som er skrevet, dersom dette er nødvendig.
Tre optimaliseringsproblemer er løst gjennom dette arbeidet. Det inkluderer to optimaliseringersproblemer for en brønn, og et problem for flere brønner. Problemene for en brønn ble løst for å sikre at optimaliseringsløseren, scipy.optimize.minimize, ga resultat som stemte overens med grafer for oppførselen til brønnen (for eksempel brønnhodetrykk mot gassløft injeksjonsrate). For å representere et reelt nettverk av brønner og undersøke ytelsen, ble det laget en kode for optimalisering av flere brønner. Koden som ble utviklet takler så mange brønner som nødvendig. Brønnmodellen for en brønn ble også brukt i dette optimaliseringsproblemet, men for å skille på de forskjellige brønnene ble det brukt forskjellige verdier for vannkutt.
Resultatet av arbeidet er at både importeringen av brønn-modellen og den flerdimensjonale interpolasjonen ble utført effektivt og med tilfredsstillende ytelse. De to optimaliseringsproblemene for en brønn ble løst på en god måte hvor resultatene stemte overens med teori og grafer. For optimaliseringsproblemet med flere brønner viser resultatene god ytelse for 1-5 brønner. Kjøretiden øker tilnærmet kvadratisk med økende antall brønner, hvor problemet med fem brønner har kjøretid på omtrent 10 sekunder. Maksimalt antall brønner testet i dette arbeidet er åtte. De resulterende verdiene for optimal gassløftrate og oljeproduksjon stemte også overens med grafer og teori. Det er derimot noe usikkerhet tilknyttet optimaliseringsproblemet når grensen for total gassløft-injeksjonsrate innskrenkes, hvor resultatene ikke stemmer helt med teorien.
Optimaliseringsløseren produsert kan blir brukt til å teste forskjellige optimaliseringsproblem. Denne er brukervennlig ettersom input-verdiene enkelt kan endres. Det er potensial for å bruke denne koden til å optimalisere et brønn-nettverk hvor alle brønner har sin egen brønn-modell. The work in this master's thesis aims to solve the problem of maximizing oil production, subject to various constraints like pressure, gas lift injection rate and other process variables. The well-model describing the behaviour of one well, when injecting gas lift, is delivered by Prosper. This is a software for multi-phase well and pipeline analysis. The optimization is done using Python algorithms, which gives rise for some work for importing and manipulating the data. The well-model consists of some free variables like bottom hole pressure, gas oil ratio, water cut, gas lift injection rate and liquid rate, and some calculated variables that depends on the free variables. These calculated variables include wellhead pressure and temperature. Before optimizing the data it is necessary to import it into Python, convert the units and interpolate the data-points.
A code that reads the well-model into Python in an efficient manner has been produced in this work. It accounts for and can handle any number of free and calculated variables. The code for reading data to Python have some requirements to the form of the well-model-file, to work optimally. A multidimensional interpolation of the data-points from the well-model are performed by running the class for interpolation. The code also converts units to follow correct Norwegian standard. The code for interpolation accounts for 0-6 number of free variables, but as many calculated variables as necessary are handled. Number of free variables can be increased by adding some lines of code in the method.
Three optimization problems have been solved throughout the work with this thesis, including two cases for one well and a more complex optimization case for multiple wells. The optimization problems for one well was solved to verify that the optimizer used, scipy.optimize.minimize, gave results that corresponded with plots made for the well-behaviour (wellhead pressure versus gas lift injection rate, e.g.). The optimization case for multiple wells can handle any number of wells, and was solved to represent a real well network and investigate the performance. Each well was represented by the same well-model, but they were separated by different constants for water cut.
The results of the work are that both the importing of the well-model to Python, and the multidimensional interpolation of the data-points are done in an efficient and satisfying way. The two optimization cases for one well show good performance and the results are verified sufficiently. When it comes to optimization for multiple wells, the results show good performance for 1-5 wells. The running time increases approximately quadratic with increased number of wells, where the case of five wells has running time of approximately 10 seconds. Number of wells tested in this work is eight. The resulting values also seem reasonable and correct. There are some uncertainty when the constraint on total gas lift injection tightens, where the results does not agree with the theory.
The solver made can be used to test different optimization cases, where it is easy to manage the input variables for the user, and has potential to be used for an optimization case with real well-models for each well.