Density Porosity
On this page
Summary
Density porosity converts the bulk density log to porosity by treating the rock as a mixture of a matrix of known density and a pore fluid of known density. It needs only the density log and two assumed densities. Use it where the lithology is known and fairly constant, and as the first check on any other porosity method.
Inputs and outputs
| Item | Units | |
|---|---|---|
| Input | Bulk density | g/cm³ |
| Input | Matrix density | g/cm³ |
| Input | Pore fluid density | g/cm³ |
| Output | Density porosity | v/v |
Equations
Bulk density is the volume-weighted mean of the matrix and fluid densities:
Solving for porosity gives the density porosity:
The result is limited to the interval 0 to 1. Many workflows also impose an upper limit that is physically reasonable for the formation.
| Symbol | Variable | Units | Typical range |
|---|---|---|---|
| \(\rho_b\) | Bulk density | g/cm³ | 1.8 to 3.0 |
| \(\rho_{ma}\) | Matrix density | g/cm³ | 2.65 to 2.87 |
| \(\rho_f\) | Pore fluid density | g/cm³ | 0.2 to 1.2 |
| \(\phi_t\) | Total porosity | v/v | 0 to 0.40 |
| \(\phi_D\) | Density porosity | v/v | 0 to 0.40 |
Single-value calculator
Behavior
Density porosity falls in a straight line as bulk density rises. With a fluid density of 1.0 g/cm³ the slope is \(-1/(\rho_{ma} - \rho_f)\): 0.61 porosity units per g/cm³ for a sandstone matrix of 2.65, so a bulk density error of 0.05 g/cm³ is a porosity error of about 0.03. The three curves show the effect of the matrix. At a bulk density of 2.40 g/cm³ the same log reads 0.152 in a 2.65 matrix, 0.181 in a 2.71 matrix and 0.251 in a 2.87 matrix, so assuming the wrong lithology can shift porosity by 0.10.
Parameter guidance
Matrix density. Use the grain density of the dominant mineral: about 2.65 g/cm³ for quartz sandstone, 2.71 for limestone and 2.87 for dolomite. In a mixed lithology use the volume-weighted mean of the minerals present, or a grain density derived from core or from a mineral inversion. A matrix density error of 0.01 g/cm³ moves porosity by about 0.005 at a bulk density of 2.45.
Fluid density. The density tool reads a shallow zone, so the fluid is mud filtrate in the flushed zone: close to 1.0 g/cm³ for fresh filtrate and up to about 1.1 or 1.2 for salty filtrate. Residual hydrocarbon lowers it; gas lowers it a lot (see Gas and Organic-Matter Corrections). Changing the fluid from 1.00 to 1.10 raises porosity from 0.121 to 0.129 at a bulk density of 2.45.
Matrix and fluid densities are shared with the neutron-density method. Choose them once, as described on the Porosity page.
Worked example
A bulk density of 2.45 g/cm³ read against different matrix and fluid assumptions:
def phi_d(rhob, rho_ma, rho_f):
return (rho_ma - rhob) / (rho_ma - rho_f)
rhob = 2.45
base = phi_d(rhob, 2.65, 1.00)
print(f"sandstone matrix 2.65, water 1.00: phi_D = (2.65 - {rhob}) / (2.65 - 1.00) = {base:.4f}")
print(f"limestone matrix 2.71: phi_D = {phi_d(rhob, 2.71, 1.00):.4f}")
print(f"dolomite matrix 2.87: phi_D = {phi_d(rhob, 2.87, 1.00):.4f}")
print(f"fluid 1.10 instead of 1.00: phi_D = {phi_d(rhob, 2.65, 1.10):.4f}")
print()
print("Effect of a 0.01 g/cm3 error in the matrix density (matrix 2.65, fluid 1.00):")
print(f" d(phi_D) = {phi_d(rhob, 2.66, 1.0) - base:+.4f}")
print("Effect of a 0.05 g/cm3 error in the bulk density measurement:")
print(f" d(phi_D) = {phi_d(rhob - 0.05, 2.65, 1.0) - base:+.4f}")
Output
sandstone matrix 2.65, water 1.00: phi_D = (2.65 - 2.45) / (2.65 - 1.00) = 0.1212
limestone matrix 2.71: phi_D = 0.1520
dolomite matrix 2.87: phi_D = 0.2246
fluid 1.10 instead of 1.00: phi_D = 0.1290
Effect of a 0.01 g/cm3 error in the matrix density (matrix 2.65, fluid 1.00):
d(phi_D) = +0.0053
Effect of a 0.05 g/cm3 error in the bulk density measurement:
d(phi_D) = +0.0303
Assumptions and limitations
- The rock is two components, a matrix of one known density and a fluid of one known density. Any other component (clay, kerogen, pyrite, salt) is read as porosity or as matrix error.
- The fluid in the zone the tool reads is known. Shallow gas or light hydrocarbon in the flushed zone lowers it and makes the porosity read high.
- The bulk density log is accurate. Washouts, rugose holes and mud cake bias it, usually low.
- The matrix density is constant over the interval being evaluated.
- In clay-bearing rock the result is a total porosity that includes clay-bound water, provided the matrix density includes the clay solids.
QC checks
- Porosity is positive and below a sensible maximum. Many zero values mean the matrix density is too low, and values above the physical maximum mean it is too high or the hole is bad.
- Compare with core porosity at the same depths. A constant offset means the matrix density; a slope means the fluid density.
- Compare with the neutron porosity. A neutron that is lower than density porosity in clean rock suggests gas, and a large separation in the other direction suggests clay or a lithology change.
- Density porosity does not spike where the caliper shows washouts or where the density correction curve is large.
Going Deeper
The density tool measures electron density from gamma ray scattering and converts it to an apparent bulk density that is calibrated on a limestone saturated with fresh water. For common reservoir minerals the two are close, and for some evaporites they differ slightly, which is one reason salt and anhydrite need special handling. The relation above is the simplest member of a family of volumetric mixing models: replace the single matrix by a sum of mineral volumes and it becomes the density equation of a mineral inversion, where the matrix density is a result and not an input.
References
- Asquith, G. and Krygowski, D., 2004. Basic Well Log Analysis, 2nd edition. AAPG Methods in Exploration Series 16, American Association of Petroleum Geologists, Tulsa, OK.
- Schlumberger, Log Interpretation Charts. Schlumberger, Houston, Texas (updated periodically).
Python reference implementation
Python reference implementation
The Python reference implementation is available to registered users with a verified email address. Register or sign in to view it.