Capillary Pressure Calculator: Leverett J Function and Height Above Free Water

Report

Heading to the field? Install this site from your browser menu and this tool works with no signal. See how

Capillary Pressure and Saturation Height Studio

Convert laboratory capillary pressure data to reservoir conditions, build a Leverett J function, fit a saturation height model and map water saturation above the free water level.

Rock properties
Laboratory system
Reservoir system
Laboratory capillary pressure data

Enter measured laboratory capillary pressure against water saturation. The tool converts each point to a J value and fits the power law J equals a times Sw raised to minus b. Leave a row blank to skip it.

PointWater saturation (fraction)Lab capillary pressure (psi)
Saturation height model
Diagram showing capillary rise in pore throats of decreasing radius, reservoir fluid zones from the water leg through the transition zone, and water saturation against height above the free water level for permeabilities of 10, 50 and 200 mD
Pore throat radius controls entry pressure, which sets the height hydrocarbon reaches above the free water level. Tighter rock holds a thicker transition zone.

Why capillary pressure decides where the oil sits

Two wells can penetrate the same reservoir at the same depth and log completely different water saturations. Nothing is wrong with either log. The difference is rock quality, and capillary pressure is the physics that connects the two. It is the reason a tight sand can sit a hundred feet above the free water level and still log seventy percent water, while a clean sand at the same height logs twenty.

Capillary pressure is the pressure difference across the curved interface between two fluids that do not mix. In a reservoir it is the difference between the pressure in the hydrocarbon phase and the pressure in the water phase at the same point. The Young Laplace relationship ties that difference to the size of the opening the interface sits in: Pc equals 2 sigma cos theta divided by r, where sigma is interfacial tension, theta is the contact angle and r is the pore throat radius.

The important word in that equation is throat. Hydrocarbon migrating upward does not need to fit through the pore bodies, it needs to squeeze through the narrow constrictions between them. Those constrictions set the entry pressure. Narrow throats demand more pressure, and pressure in a buoyant column is bought with height. That is the whole story in one sentence: smaller throats mean more height needed before hydrocarbon can displace water.

Laboratory data does not describe your reservoir

Core laboratories rarely measure capillary pressure with the fluids that are actually in the ground. Mercury injection is fast, repeatable and destructive, so a great deal of published capillary pressure data is air and mercury. Mercury has an interfacial tension near 480 dyne/cm and a contact angle near 140 degrees against most minerals. A reservoir oil and brine pair might have an interfacial tension near 26 dyne/cm and a contact angle near 30 degrees. Those numbers are not close.

Because capillary pressure scales directly with the interfacial term, the conversion is a simple ratio. Multiply the laboratory value by the reservoir sigma cos theta and divide by the laboratory sigma cos theta. For the systems above, the laboratory term is 367.70 dyne/cm and the reservoir term is 22.52 dyne/cm, so the conversion ratio is 0.0612. A laboratory pressure of 100 psi becomes roughly 6 psi in the reservoir. Skip that step and every height you calculate will be too large by a factor of sixteen.

One detail catches people out. The contact angle for mercury exceeds 90 degrees, so its cosine is negative. That sign is a statement about which fluid wets the rock, not a licence to report negative capillary pressures. Take the magnitude of sigma cos theta when you convert between systems, which is what this tool does.

The Leverett J function puts every sample on one curve

Converting fluid systems solves half the problem. The other half is that every core plug has its own permeability and porosity, so every plug produces its own capillary pressure curve. Plotting thirty plugs gives thirty curves and no obvious way to apply them to an interval that was never cored.

Leverett proposed a dimensionless group that removes most of that scatter. The J function is the capillary pressure divided by the interfacial term, multiplied by the square root of permeability over porosity. In field units, with pressure in psi, interfacial tension in dyne/cm and permeability in millidarcies, the grouping carries a constant of 0.21660. Plugs of very different quality that share a pore geometry collapse onto a single J against water saturation trend.

The square root of permeability over porosity is standing in for a characteristic pore throat size. It is a crude proxy, and it fails when a data set mixes genuinely different rock types, for example a clean shoreface with a cemented, microporous equivalent. When J against water saturation refuses to collapse, that is not a defect in the method. It is the data telling you that you have more than one rock type and should be fitting them separately.

Free water level is not the oil water contact

The free water level is the depth at which capillary pressure equals zero. It is a property of the fluid system, not something a log sees directly. The oil water contact, the shallowest depth at which hydrocarbon actually appears, sits above the free water level by exactly the height needed to overcome the entry pressure of the rock.

In the worked example below, the entry pressure is 0.94 psi and the buoyancy gradient is 0.1084 psi/ft, so the contact sits about 8.6 ft above the free water level. In a tighter rock that separation grows. This is why two wells in the same accumulation can report contacts that differ by tens of feet with no faulting involved. They are seeing the same free water level through different rock.

Height above the free water level follows from dividing capillary pressure by the buoyancy gradient, which is the water gradient minus the hydrocarbon gradient. Water at a specific gravity of 1.03 gives 0.4465 psi/ft and oil at 0.78 gives 0.3381 psi/ft, so the difference is 0.1084 psi/ft. A light oil under a heavy brine produces a large difference and a short transition. A heavy oil under a fresh water leg produces a small difference and a transition that can swallow the entire reservoir.

A worked example, start to finish

Take a sand with 50 mD permeability and 0.18 porosity. Laboratory capillary pressure came from mercury injection, so the laboratory system is 480 dyne/cm at 140 degrees. The reservoir pair is oil and brine at 26 dyne/cm and 30 degrees. Formation water specific gravity is 1.03, oil is 0.78, and the free water level has been picked at 8200 ft. The saturation height model fitted to the core data is J equals 0.15 times Sw raised to minus 1.8, with irreducible water saturation of 0.18. The question is what saturation to expect, and at what depth, for a water saturation of 0.35.

  1. Evaluate the model. J equals 0.15 times 0.35 raised to minus 1.8, which is 0.9926.
  2. Form the rock term. The square root of 50 divided by 0.18 is 16.667.
  3. Back out reservoir capillary pressure. Pc equals J times 22.52 divided by 0.21660 times 16.667, giving 6.19 psi.
  4. For reference, the same J in the mercury system corresponds to 101.10 psi, which is what the laboratory would have reported.
  5. Form the buoyancy gradient. 0.4465 minus 0.3381 gives 0.1084 psi/ft.
  6. Divide. 6.19 divided by 0.1084 gives 57.13 ft above the free water level.
  7. Convert to depth. 8200 minus 57.13 places that saturation at 8142.87 ft.

It is worth checking that number a second way. Instead of gradients, use densities directly: height equals 144 times capillary pressure divided by the density difference in pounds per cubic foot. With water at 64.27 and oil at 48.67 lb/ft3, that route gives 57.15 ft against 57.13 ft from the gradient route. The 0.02 ft gap is not an error in either calculation. It is the difference between taking a fresh water gradient of 0.4335 psi/ft and deriving it from 62.4 divided by 144, which is 0.43333. Two defensible conventions, a difference of four hundredths of a percent. The tool uses the 0.4335 convention throughout, and both routes are shown here so you can see the size of the disagreement rather than wonder about it.

Running the same model across the full saturation range gives the transition zone. Hydrocarbon first enters at 8.6 ft above the free water level, and saturation approaches irreducible around 182 ft. That is a transition roughly 174 ft thick. If the sand is only 60 ft thick, the entire interval sits in transition and no part of it is at irreducible saturation, which has obvious consequences for both volumetrics and expected water cut.

Fitting the saturation height model to your own data

The power law form J equals a times Sw raised to minus b is the workhorse of saturation height modelling. It is not the only option, and it behaves badly as saturation approaches irreducible, which is why the tool clamps the curve at the irreducible value you supply. Within the transition zone it fits most clastic data well.

Fitting is a straight line problem in disguise. Taking logs of both sides gives the natural log of J equals the natural log of a minus b times the natural log of Sw, so ordinary least squares on log log axes returns both coefficients. Enter your laboratory pressures and saturations in the table, press the fit button, and the tool converts each point to reservoir conditions, computes J, runs the regression and reports the coefficient of determination. A value above roughly 0.95 suggests one consistent rock type. Anything much lower is a prompt to split the data.

The sample data loaded by default converts as follows. A laboratory pressure of 8 psi at a water saturation of 0.95 becomes 0.49 psi in the reservoir, a J of 0.079 and a height of 4.5 ft. A laboratory pressure of 140 psi at a saturation of 0.24 becomes 8.57 psi, a J of 1.375 and a height of 79.1 ft. That spread of heights across a realistic mercury data set is what the transition zone looks like in practice.

Mistakes that cost real barrels

  • Using laboratory pressures without conversion. The single most common error, and it inflates every height by more than an order of magnitude when the laboratory data is mercury.
  • Confusing the free water level with the oil water contact. They differ by the entry height, which grows as rock quality falls.
  • Mixing rock types in one J fit. A poor coefficient of determination is information, not noise to be averaged away.
  • Entering porosity as a percentage. A value of 18 instead of 0.18 changes the square root term by a factor of ten. The tool flags this.
  • Ignoring the buoyancy gradient. Gas columns and oil columns behave completely differently because the density contrast, not the capillary pressure, sets the height scale.
  • Assuming the reservoir is at irreducible saturation. In tight rock with a light density contrast, the transition zone can be taller than the trap.

Using the tool

Enter permeability, porosity and irreducible saturation for the rock type you are modelling, then pick the laboratory and reservoir fluid systems from the presets or type your own values. Supply the fluid specific gravities and the free water level depth. If you have laboratory data, enter it in the table and fit the coefficients. If you do not, type coefficients from an analogue and read the curves.

The left plot shows capillary pressure against water saturation on a logarithmic pressure axis, with the reservoir curve, the laboratory curve and your data points together so the conversion is visible rather than implied. The right plot is the saturation height profile with the free water level marked. Every number in the summary cards is reproduced in the table and in the step listing beneath it, so the arithmetic can be checked by hand or lifted into a report. The export row will download the plot as an image, the table as a CSV file, or send the whole panel to print.

Related Calculators and Reference