Waxman-Smits
On this page
Summary
The Waxman-Smits model adds to the conductivity of the formation water the extra conductivity of the exchangeable cations on the clay, which is proportional to the cation exchange capacity per unit pore volume (Cation exchange capacity per unit pore volume). It works on total porosity and gives the total Water saturation, with the counterion conductance B from temperature and Rw. Use it when core measurements of Qv and m* are available, which makes it the best calibrated of the shaly-sand models.
Inputs and outputs
| Item | Units | |
|---|---|---|
| Input | True formation resistivity | ohm·m |
| Input | Formation water resistivity | ohm·m |
| Input | Total porosity | v/v |
| Input | Cation exchange capacity per unit pore volume | meq/mL |
| Input | Formation temperature | °F |
| Input | Shaly-sand cementation exponent | dimensionless |
| Input | Tortuosity factor | dimensionless |
| Input | Saturation exponent | dimensionless |
| Output | Water saturation | v/v |
| Output | Equivalent counterion conductance | (S/m)/(meq/mL) |
| Output | Archie water saturation | v/v |
Equations
The conductivity of the rock is a water term and a clay-counterion term that rises as the water saturation falls:
Multiplying by \(\Rw\) and rearranging gives the form that is solved for \(\Sw\):
Write \(x = \Bws\,\Qv\,\Rw\) and \(k = \aTort\,\Rw / (\phit^{\,\mStar}\,\Rt)\). The left side, \(\Sw^{\,n} + x\,\Sw^{\,n-1}\), rises steadily with \(\Sw\), so the equation has one root in 0 to 1. The calculator finds it by 60 bisection steps on the interval 0 to 1 and returns \(\Sw = 1\) when the root is above 1. For \(n = 2\) the root has the closed form:
The counterion conductance \(\Bws\) (in S/m per meq/mL) depends on temperature and on \(\Rw\). The Juhasz fit, with \(T\) the formation temperature \(\Tform\) converted to degrees Celsius and \(\Rw\) in ohm·m at that temperature, is:
The clay term needs \(\Qv\) from core, or from a cation exchange capacity measurement (Cation exchange capacity, in meq per gram of dry rock):
The model uses the total saturation \(\SwT\) of the total pore volume. In the calculator, the shaly-sand saturation exponent \(n^{*}\) is taken equal to \(n\). With \(\Qv = 0\) the clay term vanishes and the equation reduces to Archie with \(m = \mStar\).
| Symbol | Variable | Units | Typical range |
|---|---|---|---|
| \(R_t\) | True formation resistivity | ohm·m | 0.2 to 2000 |
| \(R_w\) | Formation water resistivity | ohm·m | 0.02 to 2 |
| \(\phi_t\) | Total porosity | v/v | 0 to 0.40 |
| \(Q_v\) | Cation exchange capacity per unit pore volume | meq/mL | 0.0 to 1.5 |
| \(B\) | Equivalent counterion conductance | (S/m)/(meq/mL) | 3 to 25 |
| \(T_f\) | Formation temperature | °F | 75 to 350 |
| \(m^{*}\) | Shaly-sand cementation exponent | dimensionless | 1.6 to 2.4 |
| \(a\) | Tortuosity factor | dimensionless | 0.6 to 1.0 |
| \(n\) | Saturation exponent | dimensionless | 1.6 to 2.5 |
| \(S_{w,t}\) | Total water saturation | v/v | 0 to 1 |
| \(S_w\) | Water saturation | v/v | 0 to 1 |
| \(\mathrm{CEC}\) | Cation exchange capacity | meq/g | 0.05 to 1.0 (clay minerals) |
Single-value calculator
Behavior
Water saturation falls steadily as \(Q_v\) rises, and the effect is larger at higher resistivity. At \(R_w\) = 0.05 ohm·m, 22% total porosity, \(m^*\) = 2 and 150 °F (\(B\) = 10.9), a rock reading 10 ohm·m has an Archie saturation of 0.321. The Waxman-Smits saturation is 0.271, 0.230, 0.170 and 0.131 at \(Q_v\) of 0.2, 0.4, 0.8 and 1.2 meq/mL. At 5 ohm·m the same \(Q_v\) values give 0.403, 0.358, 0.286 and 0.233 against Archie 0.455, and at 20 ohm·m they give 0.179, 0.143, 0.097 and 0.071 against 0.227. The dashed Archie lines are flat because they ignore \(Q_v\). Temperature matters through \(B\): at \(Q_v\) = 0.4 and 10 ohm·m, 100, 150 and 250 °F give \(B\) of 6.4, 10.9 and 17.6 and saturations of 0.264, 0.230 and 0.190.
Parameter guidance
Qv is the key input and should come from core: cation exchange capacity measured by a wet-chemistry or titration method and converted with the equation above. Without core, Qv is often estimated from the clay volume and the clay type, which turns the model into one of the empirical clay-volume models, with an extra input that nobody checked. A normalized Qv relation (for example from the Juhasz approach, which links Qv to the clay volume and total porosity) exists for this case, but treat it as an approximation. Typical rock values are 0.05 to 1.0 meq/mL. m* is measured on shaly core. It is slightly larger than the clean-rock m. B is calculated from the temperature and Rw, as above. Rw and temperature: see Rw Determination. The clean-rock exponent a, n and m: Cementation and Saturation Exponents. Total porosity comes from the Porosity step (see Total vs Effective Porosity). The model gives the total saturation, so convert to effective with Total vs Effective Sw when the next step needs it.
Worked example
A shaly sand with \(R_t\) = 10 ohm·m, \(R_w\) = 0.05 ohm·m, total porosity 0.22, \(m^*\) = 2, at 150 °F, with a cation exchange capacity of 0.045 meq/g of dry rock and a grain density of 2.65 g/cm³. The block converts CEC to \(Q_v\), computes \(B\), solves by bisection, checks against the closed form for \(n = 2\), and checks the clean-sand limit:
import math
def juhasz_b(temp_f, rw):
tc = (temp_f - 32.0) * 5.0 / 9.0
return (-1.28 + 0.225 * tc - 0.0004059 * tc ** 2) / (1.0 + rw ** 1.23 * (0.045 * tc - 0.027))
def waxman_smits(rt, rw, phit, qv, b, mstar, a=1.0, n=2.0):
x = b * qv * rw
k = a * rw / (phit ** mstar * rt)
if 1.0 + x <= k:
return 1.0
lo, hi = 0.0, 1.0
for _ in range(60):
mid = 0.5 * (lo + hi)
if mid ** n + x * mid ** (n - 1.0) < k:
lo = mid
else:
hi = mid
return 0.5 * (lo + hi)
rt, rw, phit, mstar, temp = 10.0, 0.05, 0.22, 2.0, 150.0
cec, rho_ma = 0.045, 2.65
qv = cec * rho_ma * (1.0 - phit) / phit
b = juhasz_b(temp, rw)
sw = waxman_smits(rt, rw, phit, qv, b, mstar)
archie = (rw / (phit ** mstar * rt)) ** 0.5
print(f"Qv = {cec:g} x {rho_ma:g} x (1 - {phit:g}) / {phit:g} = {qv:.3f} meq/mL")
print(f"B at {temp:g} F = {b:.2f} (check, B at 77 F and Rw = 0.1: {juhasz_b(77.0, 0.1):.2f})")
print(f"Archie Sw (phit, m*) = {archie:.3f}")
print(f"Waxman-Smits Sw = {sw:.3f}")
# closed form for n = 2
x, k = b * qv * rw, rw / (phit ** mstar * rt)
closed = (-x + math.sqrt(x * x + 4.0 * k)) / 2.0
print(f"closed form (n = 2) = {closed:.3f} difference = {abs(closed - sw):.1e}")
# clean-sand limit: Qv = 0 gives Archie for any n
worst = 0.0
for n in (1.8, 2.0, 2.4):
for r in (2.0, 10.0, 50.0):
arch = (rw / (phit ** mstar * r)) ** (1.0 / n)
worst = max(worst, abs(waxman_smits(r, rw, phit, 0.0, b, mstar, n=n) - min(1.0, arch)))
print(f"clean-sand check: largest |Waxman-Smits(Qv=0) - Archie| = {worst:.1e}")
Output
Qv = 0.045 x 2.65 x (1 - 0.22) / 0.22 = 0.423 meq/mL
B at 150 F = 10.92 (check, B at 77 F and Rw = 0.1: 3.84)
Archie Sw (phit, m*) = 0.321
Waxman-Smits Sw = 0.226
closed form (n = 2) = 0.226 difference = 0.0e+00
clean-sand check: largest |Waxman-Smits(Qv=0) - Archie| = 5.6e-17
Assumptions and limitations
- The excess conductivity of the clay is proportional to Qv, and the counterion conductance B is the same for all clay in the rock. Mixed clay types with different counterions break this.
- The cementation and saturation exponents m and n are measured on shaly core in the same experiment as Qv. Using clean-rock m with core Qv, or the reverse, mixes two calibrations.
- The calculator sets n* = n. In the laboratory model the two are separate quantities and may differ.
- Total porosity is used and the saturation returned is the total saturation.
- The B fit applies to sodium chloride brines over the temperature and salinity range it was fitted on. At very high or very low salinity, check the fit.
QC checks
- At Qv = 0 the result equals the Archie value with m = m*. The worked example runs this check.
- Sw never exceeds the Archie value at the same m* and falls monotonically as Qv rises.
- Qv from core compares with Qv calculated from log clay volume: a large mismatch means the clay volume or the clay type is wrong, not that the model is.
- Core Sw (Dean-Stark, centrifuge or capillary pressure) agrees with the calculated total Sw at the same depths.
- The result in the water leg is close to 1, with the same B and Rw as the hydrocarbon zone.
Going Deeper
Waxman and Smits published the model in 1968, from laboratory measurements on shaly sands, as a physical description of the extra conductivity that comes from the counterions of the clay in the electrical double layer. Their central point was that the extra conductivity depends on the cation exchange capacity of the rock per unit of pore volume, so \(Q_v\) increases as the water saturation falls and the counterions are concentrated into a smaller water volume. That behaviour is why the equation is not quadratic in \(S_w\) for a general \(n\) and has to be solved by iteration. The model is calibrated in the laboratory but needs a \(Q_v\) log in the field, which is why normalized Qv methods and the dual-water model, which expresses the same physics with a bound-water volume rather than a cation exchange capacity, are widely used. Typical practice is to calibrate \(Q_v\) or the clay volume transform against core and then run the model across the well.
References
- Waxman, M.H. and Smits, L.J.M., 1968. Electrical conductivities in oil-bearing shaly sands. SPE Journal, 8(2), 107–122.
- Juhasz, I., 1981. Normalised Qv: the key to shaly sand evaluation using the Waxman-Smits equation in the absence of core data. Transactions of the SPWLA 22nd Annual Logging Symposium, Paper Z.
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.