Til hovedinnhold
Norsk English

Hurtig prototyping av deriverbare simulatorer

For å forske på nye beregningsmetoder og modne dem til et nivå som egner seg for kommersiell bruk eller implementering, er det avgjørende å utvikle og vedlikeholde effektive og fleksible økosystemer for eksperimentell programmering, rask prototyping, grundig testing og validering i realistiske miljøer.

Kontaktpersoner

Deriverbare simulatorer kan integreres sømløst med moderne datadrevne metoder og optimeringsteknikker for å øke tempoet i både vitenskapelige oppdagelser og ingeniørdesign. Ikke bare predikerer de oppførsel, men kan også beregne gradienter av resultatene med hensyn til inngangsdata eller modellparametre. Dette er avgjørende for optimering, sensitivitetsanalyser og usikkerhetskvantifisering, fordi det muliggjør bruk av gradientbasert optimering og metoder fra maskinlæring til å utforske parameterrommet mer effektivt og ta bedre beslutninger.

Hva gjør vi?

Vi forsker på hvordan man kan bygge gode rammeverk for rask prototyping og deriverbare simulatorer, gjennom utviklingen av MRST og OPM Flow for strømning i porøse medier, BattMo for elektrokjemiske systemer og prosesser, og Jutul for flerfysikk-applikasjoner.

Dette innebærer:

  1. Å utvikle hensiktsmessige programvareabstraksjoner og modularitet som skjuler detaljer (f.eks. et generelt ustrukturert format for alle grid), og tydelig skiller ulike kontekster som fysiske modeller, diskretiseringer og operatorer, tidssteging og ikke-lineære løsere, samt lineariserings- og løsningsmetoder for ligningssystemer.
  2. Å bruke automatisk derivasjon (AD) til å beregne deriverte, gradienter og Jacobian-matriser. Prinsippet er enkelt: man implementerer de diskretiserte modell­ligningene i residualform, og AD-biblioteket beregner de nødvendige deriverte for å linearisere systemet og finne Jacobianen som trengs i den ikke-lineære løseren. Dette er spesielt nyttig når man raskt vil legge til nye funksjonelle avhengigheter eller koble sammen flere delmodeller.
  3. Å definere beregningsgrafer som sporer og håndterer funksjonelle avhengigheter. Dette reduserer unødvendige beregninger og gir mer effektiv utnyttelse av cache og "lazy evaluation". Sammen med automatisk derivasjon åpner dette for bruk av generiske funksjonelle grensesnitt, som forenkler integrasjonen av nye parametere og variabler. Konseptene er realisert på litt ulike måter i MRST (og Jutul) og i BattMo.
  4. Å bruke adjungerte metoder til å beregne gradienter av kostnadsfunksjoner med hensyn til modellparametere. Dette gjøres ved å løse adjungerte ligninger utledet fra den opprinnelige PDE-modellen, for å bestemme hvordan endringer i input påvirker kostnadsfunksjonen. Denne «bakoverpropageringen» gjennom beregningsgrafen kan sammenlignes med backpropagation i maskinlæring, men adjungerte metoder er mer generelle og kan brukes på PDE-baserte modeller i både vitenskap og ingeniørfag.
discrete-operators.png
Illustrasjon av konseptet med abstrakte derivasjonsoperatorer. Disse konstrueres først ut fra topologien til gridet (koblinger mellom celler og deres flater, og mellom flater og naboceller) og kan deretter brukes i koden til å skjule grid-detaljer og skrive de diskrete modell­ligningene i en form som ligger nært den kontinuerlige PDE-modellen.

Automatisk derivasjon

Vi har forsket på ulike AD-tilnærminger:

  • AD-biblioteket i MRST organiserer data rundt variabler og behandler typisk én variabel eller mellomstørrelse om gangen, der verdier og deriverte oppdateres over alle celler i domenet. Dette muliggjør vektorisering og gir en mer naturlig representasjon av fysiske størrelser og ligninger i koden, tett opp mot PDE-formuleringen. Ulempen er redundante beregninger og høyt minnebruk. For å motvirke dette har vi utviklet mer minneoptimaliserte backends skrevet i kompilert språk.
  • AD-biblioteket i OPM Flow er i motsetning organisert rundt gridceller og oppdaterer alle verdier/deriverte knyttet til en celle før det går videre til neste. Dette gir bedre minnetilgang og cache-utnyttelse, men en noe mindre intuitiv kode.
  • Jutul har et svært optimalisert AD-bibliotek som bruker statiske, forhåndsdefinerte stensiler for rask montering av lineariserte systemer. Programvaren kan også benytte AD-funksjonalitet fra Julia-språket.

Les mer

Software

BattMo

BattMo

BattMo is an open source simulation code for continuum modelling of electrochemical devices written in Matlab and Julia

Jutul

Jutul

Experimental Julia framework for fully differentiable multiphysics simulators based on implicit finite-volume methods with automatic differentiation.

MRST - MATLAB Reservoir Simulation Toolbox

MRST - MATLAB Reservoir Simulation Toolbox

A free open-source community code for rapid prototyping of new methods for modelling and simulation of flow in porous media. Has a large user community from all over the world.

Open Porous Media (OPM)

Open Porous Media (OPM)

The Open Porous Media (OPM) initiative provides open-source software for simulation, upscaling and visualization of porous media processes, in particular subsurface reservoirs.