A complete physics-informed machine-learning workflow for three-phase black-oil reservoir simulation on the Norne field: a neural-operator forward surrogate, a mixture-of-experts well-rate model and an adaptive ensemble Kalman inversion for history matching, built on NVIDIA PhysicsNeMo.
The Norne example in PhysicsNeMo couples three learned components into a complete reservoir-engineering workflow on a real field model: a Fourier or physics-informed neural operator that advances the black-oil state, a Cluster-Classify-Regress mixture of experts for the well rates, and an adaptive regularised ensemble Kalman inversion that recovers permeability, porosity and fault multipliers from production data.
A neural operator maps permeability, porosity, fault multipliers and controls to pressure and saturations at every report step, trained with data and the PDE residual.
Cluster-Classify-Regress, a mixture of experts built for discontinuous responses, maps the predicted state at the wells to oil, water and gas rates.
Adaptive regularised ensemble Kalman inversion, or the ensemble smoother with multiple data assimilation, with covariance localisation, conditions the ensemble on the field history.
Autoregressive training on the model's own predictions removes the exposure bias of teacher forcing over long rollouts.
Black-oil mass conservation for water, oil and gas, with dissolved gas and Peaceman well terms.
Autoregressive data loss plus the discretised PDE residual R: the physics-informed neural operator objective.
The ensemble Kalman update with the surrogate in place of the simulator. alpha-REKI chooses alpha_i = min(n_d / (2 Phi_i), rho alpha_(i-1)) from the mean data misfit Phi_i and stops when the sum of 1/alpha_i reaches one; ES-MDA uses alpha_i = N_a for N_a assimilations.
The workflow of the paper, end to end, in your browser, on a five-spot with a Gaussian permeability prior. The forward model has two stages, as in the paper: an FNO or a PINO (the same operator trained with the discrete mass-balance residual of the simulator as an extra loss) predicts pressure and water saturation at every report time; the states at each producer are then indexed and passed to the Peaceman well model, learned either by a 1-D FNO over time or by CCR (cluster-classify-regress). The surrogate drives history matching with alpha-REKI or ES-MDA against noisy data from a hidden field; you can also use the mixed-precision simulator itself as the forward model and compare the cost. The simulator then checks the matched model.
Pick a preset to set the controls for a meaningful experiment; the note says what to watch.
Interactive demonstration on a 16 x 16 synthetic model, computed in JavaScript on your CPU. The Norne results on this page come from the full PhysicsNeMo implementation on GPUs.
16 x 16 cells, two-phase, six Gaussian geological parameters, a five-spot (injector in the centre, a producer in each corner), 20 report times of the water cut of every producer, the field oil rate and the injector pressure. The FNO, the PINO and the 1-D FNO were trained offline on 900 runs of the same simulator; their inference runs on this page, and CCR is trained here on the well-cell states of 250 of those runs. With the simulator as the forward model every ensemble member is a full simulation, so the ensemble is capped at 40. Localisation tapers the cross-covariance on the grid with a Gaspari-Cohn function of the distance to the well of each datum and projects the update back onto the six basis functions; with six global parameters and a Gaussian prior the plain update is already well posed, so it is off by default. Inflation (off by default) rescales the ensemble about its mean when its spread falls below half the prior spread; for this Gaussian problem the shrinking spread is the information the data add, so it is a safeguard rather than a necessity. Everything runs in JavaScript on your CPU.
The inverse problem of the paper as a game. A sand channel is hidden under an inverted nine-spot (one injector in the centre, eight producers at the corners and edge midpoints), and the simulator reports what the producers saw. Three contestants try to find it with alpha-REKI or ES-MDA, driven by the paper's forward model: an FNO predicts pressure and saturation, and the Peaceman well model is replaced by either a second FNO or CCR (cluster-classify-regress). The first works directly on the 256 grid-cell values of ln K with a Gaussian prior ensemble and no exotic prior at all; the second uses a truncated DCT basis (36 of 256 coefficients); the third a VCAE, a convolutional variational autoencoder trained on channel images, so its updates stay on the channel manifold. You can paint your own guess and send it to the simulator.
Pick a preset to set the controls for a meaningful experiment; the note says what to watch.
Interactive demonstration on a 16 x 16 synthetic model, computed in JavaScript on your CPU. The Norne results on this page come from the full PhysicsNeMo implementation on GPUs.
16 x 16 cells, two-phase. The observations are the oil and water rates of the eight producers and the injector pressure at 12 report times, from the in-browser simulator plus Gaussian noise with a diagonal C_d: sigma_d is the chosen percentage of each value plus a floor (0.01 for rates, 0.02 for pressure). Localisation tapers C_md with a Gaspari-Cohn function of the distance from each cell to the well that measured each datum; it applies to the grid-cell and DCT contestants (for DCT the update is made on the grid and projected back onto the basis); the VCAE's 8 latent variables are global, so it is updated in latent space without a taper. Inflation scales the deviations from the ensemble mean by beta after an update whenever the spread has fallen below half of the prior spread; the log reports the ensemble spread so a collapse is visible. The two FNOs and the VCAE were trained offline on 600 simulator runs and 4,000 channel images; inference, CCR training, the ensemble updates and every simulator run happen on this page, in JavaScript on your CPU. The final check runs the simulator on the posterior mean, on 16 posterior members and on the same 16 members of the starting ensemble.
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
movieclick to enlarge
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoom
click to zoomA two-phase waterflood, solved in your browser with IMPES: an implicit pressure equation on a heterogeneous permeability field, then an explicit upwind saturation update. This is the kind of forward problem the neural operator learns to replace, at a much smaller scale than Norne. Change the geology and watch the front, the breakthrough time and the recovery change.
A teaching example (IMPES on a 56 x 56 grid), computed in your browser.
56 x 56 cells, quarter five-spot, Corey relative permeability, unit injection rate.