Triangulation
On this page
Summary
Triangulation splits the Shale volume of a log sample into Laminated shale volume, Structural shale volume and Dispersed shale volume from its position on the Thomas-Stieber diagram. A sample above the laminated line is described as a mixture of clean sand, pure shale and the structural end member, and a sample below it as a mixture of clean sand, pure shale and the dispersed end member. Use it to get the laminated shale volume that the sand-only porosity and resistivity need.
Inputs and outputs
| Item | Units | |
|---|---|---|
| Input | Total porosity | v/v |
| Input | Shale volume | v/v |
| Input | Clean-sand porosity | v/v |
| Input | Shale total porosity | v/v |
| Output | Triangulation weight | dimensionless |
| Output | Structural shale volume | v/v |
| Output | Dispersed shale volume | v/v |
| Output | Laminated shale volume | v/v |
Equations
The laminated line gives the porosity the sample would have if all of its shale were laminated:
A sample on this line is all laminated shale. A sample above it lies inside the triangle of clean sand, pure shale and the structural vertex. A sample below it lies inside the triangle of clean sand, pure shale and the dispersed vertex. In both triangles the sample is a weighted mixture of the three corners. The weight of the third corner follows from where the sample lies relative to the sand-shale edge. For the two triangles of the diagram it reduces to the same expression:
The shale carried by the third corner is its weight times the shale volume at that vertex, \(1 - \phiSa\) for the structural vertex and \(\phiSa\) for the dispersed vertex:
Each is limited to the shale volume of the sample. The laminated shale is what is left:
The weight above is the barycentric coordinate of the sample for the third corner. In general form, for a sample at \((\phi, V)\) and a triangle with corners 1 (sand), 2 (shale) and \(c\), \(\wTri = \dfrac{(\phi_2-\phi_1)(V-V_1)-(\phi-\phi_1)(V_2-V_1)}{(\phi_2-\phi_1)(V_c-V_1)-(\phi_c-\phi_1)(V_2-V_1)}\). For the sand and shale corners used here, this reduces to the expression for \(\wTri\) above.
| Symbol | Variable | Units | Typical range |
|---|---|---|---|
| \(\phi_t\) | Total porosity | v/v | 0 to 0.40 |
| \(V_{sh}\) | Shale volume | v/v | 0 to 1 |
| \(\phi_{sa}\) | Clean-sand porosity | v/v | 0.15 to 0.35 |
| \(\phi_{sh}\) | Shale total porosity | v/v | 0.05 to 0.35 |
| \(\phi_{t,lam}\) | Total porosity, laminated shale | v/v | 0 to 0.4 |
| \(w_c\) | Triangulation weight | dimensionless | 0 to 1 |
| \(V_{str}\) | Structural shale volume | v/v | 0 to 1 |
| \(V_{disp}\) | Dispersed shale volume | v/v | 0 to 1 |
| \(V_{lam}\) | Laminated shale volume | v/v | 0 to 1 |
Single-value calculator
Behavior
The plot holds shale volume at 0.30, the clean-sand porosity at 0.25 and the shale porosity at 0.10, so the laminated line is at 0.205, and sweeps the measured porosity. At that porosity the sample is all laminated shale. Below it the sample is read as partly dispersed: dispersed shale is 0.21 at a porosity of 0.05, 0.14 at 0.10, 0.073 at 0.15 and 0.007 at 0.20, and laminated shale makes up the rest (0.09, 0.16, 0.23 and 0.29). Above it the sample is partly structural: 0.08 at a porosity of 0.225, 0.18 at 0.25 and 0.28 at 0.275, with laminated shale falling to 0.22, 0.12 and 0.02. At 0.30 the porosity is above the structural line (0.28) and the sample is all structural, so the structural volume is limited to the shale volume of 0.30.
Parameter guidance
The two end-member porosities are the same ones used on the Thomas-Stieber page. Picking them from the cross-plot is the main step. The clean-sand porosity is the porosity at the top of the cloud at low shale volume, and the shale porosity is the porosity in thick shale. The shale volume for each sample comes from one of the options on the Shale Volume Options page. Where there are intervals with and without laminated shale, the triangulation is applied only in the laminated zones and the conventional shale correction is used outside them.
Worked example
Two samples with a shale volume of 0.30, a clean-sand porosity of 0.25 and a shale porosity of 0.10. One has a total porosity of 0.23, which is above the laminated line (0.205), and one has 0.15, which is below it. The last lines rebuild the porosity from the three components as a check:
ps, ph, vsh = 0.25, 0.10, 0.30
lam = ps + vsh * (ph - ps)
print(f"laminated line at Vsh = {vsh}: {lam:.4f}")
for phit in (0.23, 0.15):
w = min(1.0, abs(phit - lam) / (ps * (1 - ps)))
if phit > lam:
v_str, v_disp, vtx_phi = (1 - ps) * w, 0.0, ps + (1 - ps) * ph
vtx_v, corner = 1 - ps, 'structural'
else:
v_str, v_disp, vtx_phi = 0.0, ps * w, ps * ph
vtx_v, corner = ps, 'dispersed'
v_lam = vsh - v_str - v_disp
# rebuild porosity: sand, laminae and the third corner, weights from the shale-volume balance
w_sh = v_lam # weight of pure shale
w_sand = 1 - w_sh - w
rebuilt = w_sand * ps + w_sh * ph + w * vtx_phi
print(f"phit = {phit:.2f}: {corner} side, w = {w:.4f}")
print(f" Vstr = {v_str:.4f} Vdisp = {v_disp:.4f} Vlam = {v_lam:.4f} sand = {w_sand:.4f}")
print(f" rebuilt porosity = {rebuilt:.4f} (measured {phit:.2f}); rebuilt Vsh = {w_sh + w * vtx_v:.4f}")
Output
laminated line at Vsh = 0.3: 0.2050
phit = 0.23: structural side, w = 0.1333
Vstr = 0.1000 Vdisp = 0.0000 Vlam = 0.2000 sand = 0.6667
rebuilt porosity = 0.2300 (measured 0.23); rebuilt Vsh = 0.3000
phit = 0.15: dispersed side, w = 0.2933
Vstr = 0.0000 Vdisp = 0.0733 Vlam = 0.2267 sand = 0.4800
rebuilt porosity = 0.1500 (measured 0.15); rebuilt Vsh = 0.3000
Assumptions and limitations
- The sample is a mixture of clean sand, pure shale and one of the two end-member rocks. A sample can be both structural and dispersed in nature, but the analysis assigns it to one side of the laminated line.
- The end-member porosities are right. A wrong clean-sand porosity moves the laminated line and changes every result.
- Shale volume is right. The triangulation uses it directly and a shale volume error shifts the sample along the vertical axis.
- The sample lies inside the triangle. Samples outside it have a weight above 1 or a negative sand fraction, and the weight and the volumes are limited.
- Total porosity is not affected by hydrocarbon, gas or washout. Gas lowers a neutron-density porosity and moves a sample below the laminated line, where it is read as dispersed shale.
QC checks
- Zero shale and the clean-sand porosity returns all components equal to zero. A sample on the shale point (shale volume 1, shale porosity) returns laminated shale of 1.
- The structural, dispersed and laminated volumes are not negative and add up to the shale volume.
- On a log, the dispersed and structural curves are mostly small where a laminated sand is expected, and the laminated curve follows the shale volume.
- Rebuild the porosity from the three components and compare with the measured porosity, as in the worked example.
- A large dispersed or structural volume in clean, thick sands points to wrong end members or to gas effect.
Going Deeper
A graphical reading of the diagram only places a sample as above or below the laminated line. Triangulation turns that position into volumes. The result is a decomposition into three end-member components, and it depends on the choice of triangle: the sand-shale-structural triangle for samples above the laminated line, and the sand-shale-dispersed triangle for samples below. Other schemes use distance along the lines, or solve a least squares mixture with all four end members at once. The weights here come from the geometry alone, so they have no uncertainty estimate. Where the triangle corners are well separated the answer is stable, and where they are close (for example clean-sand and shale porosities that are nearly equal) a small error in a log moves the sample a long way in the weight. The ratio of the porosity difference to \(\phiSa(1-\phiSa)\) shows this: a sand with low porosity is poorly resolved.
References
- Thomas, E.C. and Stieber, S.J., 1975. The distribution of shale in sandstones and its effect upon porosity. Transactions of the SPWLA 16th Annual Logging Symposium, Paper T.
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.