dc.contributor.advisor | Lie, Knut-Andreas | |
dc.contributor.author | Grøstad, Sindre | |
dc.date.accessioned | 2019-10-26T14:01:11Z | |
dc.date.available | 2019-10-26T14:01:11Z | |
dc.date.issued | 2019 | |
dc.identifier.uri | http://hdl.handle.net/11250/2624618 | |
dc.description.abstract | Denne masteroppgaven gir en introduksjon til automatisk derivasjon (AD) og hvordan det kan
benyttes til å beregne den deriverte til hvilken som helst funksjon, med samme presisjon som et
analytisk uttrykk, men uten å innføre beregningskrevende operasjoner. Dette har blitt brukt til å
effektivt løse partielle differensialligninger som beskriver flyt i porøse medier, ved bruk av en endelig
volummetode og diskretisering av gradient- og divergensoperatoren. Målet med avhandlingen har
vært å undersøke om det nye programmeringsspråket Julia kan brukes både som et språk for å raskt
lage prototyper av nye oljeutvinningssimulatorer, samt implementere svært effektive industrielle
simulatorer.
Tre forskjellige AD-biblioteker har blitt implementert i Julia og sammenlignetmed implementasjoner
fra “the MATLAB Reservoir Simulation Toolbox” (MRST) (MRST Homepage, n.d.), laget av “the
Computational Geosciences group” ved institutt for matematikk og kybernetikk ved SINTEF
Digital. MRST er et bibliotek som er designet for å raskt kunne lage nye prototyper
av oljeutvinningssimulatorer med høynivå- og brukervennlige AD verktøy. De to første
implementasjonene i Julia, ForwardAutoDiff (FAD) og CustomJacobianAutoDiff (CJAD),
er inspirert av AD-verktøyene i MRST. Den tredje implementasjonen, lokal AD, er inspirert av
implementasjonen av AD i “Open Porous Media (OPM) Flow simulator” (Open Porous Media
Homepage, n.d.). OPM er et bibliotek, utviklet av den samme gruppen hos SINTEF, for å lage effektive
industrielle simulatorer i C og C++.
For å sammenligne AD metodene har det blitt utviklet to simuleringer. Den første implementasjonen
var en en-fase trykkløser, som simulerer trykkfallet i et reservoar når man utvinner olje. FAD var den
tregeste AD-metoden, omtrent dobbelt så treg som både CJAD og implementasjonen i MRST. Mens
CJAD og MRST hadde lignende ytelse, var derimot metoden for lokal AD ca. seks ganger raskere
enn disse to. Den andre simuleringen var en to-fase metning- og trykkløser, som simulerer hvordan
vann strømmer inn i oljefeltet når det injiseres inn i midten av reservoaret. Lignende den første
simuleringen hadde CJAD og MRST lik ytelse, mens metoden som brukte lokal AD var omtrent fem
ganger raskere.
Sammenligningstestene viser lovende resultater som tyder på at Julia kan være et språk som gjør det
mulig å lage både prototyper av simulatorer, ved hjelp av et brukervennlig AD-verktøy som CJAD,
samt å skape høyytelses industrielle simulatorer, ved hjelp av et AD-verktøy som lokal AD. | |
dc.description.abstract | This thesis provides an introduction to Automatic Differentiation (AD) and how it can be utilized
to calculate the derivatives of any function with the same precision as an analytic expression, with
very little computational effort. It has been used to elegantly solve Partial Differential Equations
(PDEs) describing flow in porous media, by using a finite volume method and a discretization of the
gradient- and the divergence operator. The goal of the thesis has been to investigate whether the new
programming language called Julia can be used both as a language for quickly prototyping new oil
recovery simulators, as well as implementing highly efficient industrial simulators.
Three different AD libraries have been implemented in Julia and compared to implementations
from the MATLAB Reservoir Simulation Toolbox (MRST) (MRST Homepage, n.d.), created by
the Computational Geosciences group at the department of Mathematics and Cybernetics at
SINTEF Digital. MRST is a toolbox designed for quick prototyping with high-level- and
user-friendly AD tools. The first two implementations in Julia, ForwardAutoDiff(FAD)
and CustomJacobianAutoDiff(CJAD), were inspired by the AD tools in MRST. The third
implementation, local AD, was inspired by the implementation of AD in the Open Porous Media
(OPM) Flow Simulator (Open Porous Media Homepage, n.d.). OPM is a toolbox developed by the
same group at SINTEF for creating efficient industrial simulators in C and C++.
To benchmark the ADmethods, two simulations were implemented. The first one was a single-phase
flow solver, simulating the pressure drop in a reservoir when producing oil. FAD was the slowest
method being approximately two times slower than both CJAD and the implementation in MRST.
While CJAD and MRST exhibited similar performance, the method of Local AD was approximately
six times faster than these two. The second simulation was a two-phase flow solver, simulating how
water flows when injected into a reservoir. Analogous to the first simulation, CJAD andMRST yielded
similar performance, while the method using local AD was approximately five times faster.
The benchmarks show promising results suggesting that Julia may be a language enabling making
prototypes of simulators, using a user-friendly AD tool like CJAD, as well as creating high
performance industrial simulators, using an AD tool like local AD. | |
dc.language | eng | |
dc.publisher | NTNU | |
dc.title | Automatic Differentiation in Julia with Applications to Numerical Solution of PDEs | |
dc.type | Master thesis | |