Skip to content

sintefmath/JutulDarcy.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DOI Dev Build Status

Jutul Darcy logo

Reservoir simulation in Julia

JutulDarcy.jl: Darcy-scale and subsurface flow (CO2 sequestration, gas/H2 storage, oil/gas fields) using Jutul.jl developed by the Applied Computational Science group at SINTEF Digital.

Key features

JutulDarcy is a general purpose porous media simulator with high performance written in Julia. It is fully differentiable with respect to forces and discretization parameters.

Physical systems

  • Immiscible multi-phase flow
  • Black-oil type models with support for both dissolved vapor (Rs) and vaporized liquid (Rv)
  • Equation-of-state compositional flow with up to three phases and any number of components

All solvers can incorporate general multisegment wells with rigorous mass balance, friction pressure loss, complex well limits and time-dependent controls.

Architecture

  • Written in pure Julia, with automatic differentiation and dynamic sparsity detection
  • Support for sensitivities with respect to any model parameters using the adjoint method
  • High performance assembly and linear solvers, with support for two-stage CPR BILU(0)-CPR Krylov solvers
  • MPI support with domain decomposition and BoomerAMG-CPR solver with automatic METIS partitioning

Input/output and workflow tools

  • Unstructured grids and complex cases input from the Matlab Reservoir Simulation Toolbox (MRST) using the jutul module
  • Experimental support for reading in and running .DATA files with corner point grids
  • 3D visualization of grids and wells by loading a Makie.jl backend (requires Julia 1.9, GLMakie for interactivity)
  • Interactive plotting of well curves

The compositional simulator has been matched against commercial offerings, AD-GPRS and MRST. The blackoil simulator has been validated on the standard SPE benchmarks (SPE1, SPE9, ...).

Example run times on benchmarks

Name Cells Report steps Preconditioner Time [s]
SPE1CASE2 300 120 block-ILU(0) 0.30
SPE9 9000 35 block-ILU(0) 3.41
Egg 18553 123 CPR-block-ILU(0) 8.60

Simulated with default julia, no threads. Runtime with single-threaded HYPRE on the full SPE10 model 2 model is about 20 minutes with default settings and strict mass-balance tolerances and less than 4 minutes for realization 1 of the OLYMPUS optimization benchmark challenge.

A few of the packages used by Jutul and JutulDarcy

Jutul builds upon many of the excellent packages in the Julia ecosystem. Here are a few of them, and what they are used for:

...and many more, both directly in the Project.toml file and indirectly!

Getting started

Install Julia and add the package to your environment of choice:

using Pkg
Pkg.add("CairoMakie")
Pkg.add("Jutul")
Pkg.add("JutulDarcy")

You can then run any of the examples in the examples directory by including them.

Additional examples and further reading

The documentation is still work in progress, but contains a fair bit of useful information. In addition, see the examples folder for more information. Some functionality is also demonstrated in the tests.

Internals and undocumented functions are subject to change at this time. However, the main interface for the reservoir simulator itself seen in the examples should be fairly stable.