Time-of-flight
To study how heterogeneity affects flow patterns and define natural time-lines in the reservoir, it is common to study the so-called time-of-flight (TOF), i.e., the time it takes an imaginary particle released at an inflow boundary or at a perforation of an injector to reach a given point in the reservoir. Time-of-flight are usually associated with streamline methods, but can also be computed from linear steady-state transport equations on the form,
In this example, we will show how to compute time-of-flight from a given flux field.
Contents
Setup model
As our model, we will use a logically Cartesian grid in which the node perturbed so that grid lines form curves and not lines. For simplicity, we assume unit permeability and porosity and use a set of source and sink terms to emulate a quater five-point setup.
G = cartGrid([50,50]); G = twister(G); G = computeGeometry(G); rock.perm = ones(G.cells.num, 1); rock.poro = ones(G.cells.num, 1); fluid = initSimpleFluid('mu' , [ 1, 10]*centi*poise , ... 'rho', [1014, 859]*kilogram/meter^3, ... 'n' , [ 2, 2]); src = addSource([], 1, sum(poreVolume(G,rock)), 'sat', 1); src = addSource(src, G.cells.num, -sum(poreVolume(G, rock)), 'sat', 1);
Solve pressure equation
Compute transmissibilities and solve pressure equation
trans = computeTrans(G, rock);
xr = incompTPFA(initResSol(G, 0), G, trans, fluid, 'src', src);
Compute time-of-flight
Once the fluxes are given, the time-of-flight equation is discretized with a standard upwind finite-volume method
t0 = tic; T = computeTimeOfFlight(xr, G, rock, 'src',src); toc(t0) clf, plotCellData(G, T, 'edgecolor','k','edgealpha',0.05); title('time of flight'); caxis([0,0.8]);axis equal tight;colormap jet colorbar
Elapsed time is 0.085745 seconds.
