Automatic Differentiation in Julia with Applications to Numerical Solution of PDEs
Master thesis
Permanent lenke
http://hdl.handle.net/11250/2624618Utgivelsesdato
2019Metadata
Vis full innførselSamlinger
Sammendrag
Denne masteroppgaven gir en introduksjon til automatisk derivasjon (AD) og hvordan det kanbenyttes til å beregne den deriverte til hvilken som helst funksjon, med samme presisjon som etanalytisk 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 endeligvolummetode og diskretisering av gradient- og divergensoperatoren. Målet med avhandlingen harvært å undersøke om det nye programmeringsspråket Julia kan brukes både som et språk for å rasktlage prototyper av nye oljeutvinningssimulatorer, samt implementere svært effektive industriellesimulatorer.
Tre forskjellige AD-biblioteker har blitt implementert i Julia og sammenlignetmed implementasjonerfra “the MATLAB Reservoir Simulation Toolbox” (MRST) (MRST Homepage, n.d.), laget av “theComputational Geosciences group” ved institutt for matematikk og kybernetikk ved SINTEFDigital. MRST er et bibliotek som er designet for å raskt kunne lage nye prototyperav oljeutvinningssimulatorer med høynivå- og brukervennlige AD verktøy. De to førsteimplementasjonene i Julia, ForwardAutoDiff (FAD) og CustomJacobianAutoDiff (CJAD),er inspirert av AD-verktøyene i MRST. Den tredje implementasjonen, lokal AD, er inspirert avimplementasjonen av AD i “Open Porous Media (OPM) Flow simulator” (Open Porous MediaHomepage, n.d.). OPM er et bibliotek, utviklet av den samme gruppen hos SINTEF, for å lage effektiveindustrielle simulatorer i C og C++.
For å sammenligne AD metodene har det blitt utviklet to simuleringer. Den første implementasjonenvar en en-fase trykkløser, som simulerer trykkfallet i et reservoar når man utvinner olje. FAD var dentregeste AD-metoden, omtrent dobbelt så treg som både CJAD og implementasjonen i MRST. MensCJAD og MRST hadde lignende ytelse, var derimot metoden for lokal AD ca. seks ganger raskereenn disse to. Den andre simuleringen var en to-fase metning- og trykkløser, som simulerer hvordanvann strømmer inn i oljefeltet når det injiseres inn i midten av reservoaret. Lignende den førstesimuleringen hadde CJAD og MRST lik ytelse, mens metoden som brukte lokal AD var omtrent femganger raskere.
Sammenligningstestene viser lovende resultater som tyder på at Julia kan være et språk som gjør detmulig å 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. This thesis provides an introduction to Automatic Differentiation (AD) and how it can be utilizedto calculate the derivatives of any function with the same precision as an analytic expression, withvery 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 thegradient- and the divergence operator. The goal of the thesis has been to investigate whether the newprogramming language called Julia can be used both as a language for quickly prototyping new oilrecovery simulators, as well as implementing highly efficient industrial simulators.
Three different AD libraries have been implemented in Julia and compared to implementationsfrom the MATLAB Reservoir Simulation Toolbox (MRST) (MRST Homepage, n.d.), created bythe Computational Geosciences group at the department of Mathematics and Cybernetics atSINTEF Digital. MRST is a toolbox designed for quick prototyping with high-level- anduser-friendly AD tools. The first two implementations in Julia, ForwardAutoDiff(FAD)and CustomJacobianAutoDiff(CJAD), were inspired by the AD tools in MRST. The thirdimplementation, 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 thesame 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-phaseflow solver, simulating the pressure drop in a reservoir when producing oil. FAD was the slowestmethod 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 approximatelysix times faster than these two. The second simulation was a two-phase flow solver, simulating howwater flows when injected into a reservoir. Analogous to the first simulation, CJAD andMRST yieldedsimilar 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 makingprototypes of simulators, using a user-friendly AD tool like CJAD, as well as creating highperformance industrial simulators, using an AD tool like local AD.