Validation
Where a published source states the result of a worked example, this page puts that result beside the one StrataPlot computes. Every number in the right-hand columns is asserted by automated tests that run in CI on every change to this site’s code, against the same modules the site loads, so the two columns cannot drift apart without the build going red. Where a comparison is weaker than it looks — a digitised figure rather than a published table, an input the source never stated, a value the source never printed — it is said so under the table rather than left for a reader to discover.
- Published is the value as the source prints it, at the precision the source prints it to.
- StrataPlot is what the tool computes, quoted to one more figure than the source where that is meaningful.
- Test tolerance is the bound the automated test enforces. It is the real strength of each claim, and it is stated even where it is embarrassing.
Hoek-Brown Envelopes
Open the toolThe 2002 paper closes with a worked example, and both halves of it — a tunnel at 100 m and a disturbed 100 m slope in the same rock — are reproduced end to end, through the same code path the tool uses. Row 1 of the dataset the tool ships with is that example, so opening the page and changing nothing puts the paper on screen.
The worked example of §7 — tunnel and slope
- Source.
- Hoek, E., Carranza-Torres, C. & Corkum, B. (2002). Hoek-Brown failure criterion — 2002 edition. In: Hammah, R., Bawden, W., Curran, J. & Telesnicki, M. (eds), Proceedings of NARMS-TAC 2002, Mining Innovation and Technology, Toronto, 10 July 2002, pp. 267–273. University of Toronto.
- Method.
- σci = 50 MPa, mi = 10 and GSI = 45 entered as the paper states them; the equivalent Mohr-Coulomb fit taken over 0 < σ′3 < σ′3max with σ′3max from the paper’s own equation 18 for the tunnel and equation 19 for the slope.
| Quantity | Published | StrataPlot | Test tolerance |
|---|---|---|---|
| Tunnel, D = 0 — friction angle φ′ | 47.16° | 47.155° | ± 0.05° |
| Tunnel, D = 0 — cohesion c′ | 0.58 MPa | 0.5834 MPa | ± 0.005 MPa |
| Slope, D = 1 — friction angle φ′ | 27.61° | 27.610° | ± 0.05° |
| Slope, D = 1 — cohesion c′ | 0.35 MPa | 0.3480 MPa | ± 0.005 MPa |
| Constant | Paper equation | StrataPlot | Test tolerance |
|---|---|---|---|
| mb (D = 0) | eq 3 | 1.402560 | ± 5×10⁻⁶ |
| s (D = 0) | eq 4 | 0.00221808 | ± 5×10⁻⁹ |
| a | eq 5 | 0.508086 | ± 5×10⁻⁶ |
| mb (D = 1) | eq 3 | 0.196718 | ± 5×10⁻⁷ |
| s (D = 1) | eq 4 | 1.04464×10⁻⁴ | ± 5×10⁻¹⁰ |
| Global rock mass strength σ′cm | eq 17 | 7.8098 MPa | ± 0.005 MPa |
| σ′3max, tunnel at γH = 2.7 MPa | eq 18 | 1.3525 MPa | ± 0.005 MPa |
| Leading coefficient, tunnel relation | eq 18 | 0.47 | ± 5×10⁻¹¹ |
| Leading coefficient, slope relation | eq 19 | 0.72 | ± 5×10⁻¹¹ |
- The paper does not state the unit weight it used, and equations 18 and 19 both need one. 0.027 MN/m³ — the usual default for rock — reproduces both halves of the example, which is what confirms the reading. That inference is the one soft spot in this comparison and it is named in the test rather than buried.
- Rows 2 and 3 of the shipped dataset are invented, and so is the intact modulus on row 1: the paper gives no modulus, and none is needed for c′ or φ′. Only row 1 is the published example.
- The figure itself prints φ′ to one decimal and c′ to three — 47.2 and 0.583 — because that is the precision the numbers deserve on a drawing. The table above is the underlying computation.
- The rock-mass modulus (Hoek & Diederichs, 2006) is implemented and tested for its limits, its routing and one known typographical error in the 2018 preprint, but there is no published worked example behind it. No agreement is claimed for it here.
Asserted by src/plots/hoek-brown/__tests__/compute.test.ts
Ground Reaction Curve
Open the toolThree separate published sources, checked separately: a fully worked circular-shaft example, the support-capacity table that example draws on, and a second worked example from a different publication with different ground. The closed-form solution underneath all three is Duncan Fama (1993).
The circular shaft of Figure 9.6
- Source.
- Hoek, E., Kaiser, P.K. & Bawden, W.F. (1995). Support of Underground Excavations in Hard Rock, chapter 9. The worked example printed as Figure 9.6. · Duncan Fama, M.E. (1993). Numerical modelling of yield zones in weak rock. In: Comprehensive Rock Engineering (ed. J.A. Hudson), 2, 49–75. Pergamon, Oxford.
- Method.
- A 6 m diameter shaft (ro = 3 m) in blocky sandstone, c = 2.6 MPa, φ = 30°, po = 10 MPa, with E = 1000 MPa and ν = 0.25 as printed in the figure. All eleven plotted points are checked; three are shown here.
| Quantity | Published | StrataPlot | Test tolerance |
|---|---|---|---|
| Rock mass strength σcm | 9.01 MPa | 9.007 MPa | ± 0.005 MPa |
| Ratio k | 3.00 | 3.000 | ± 5×10⁻⁷ |
| Critical pressure pcr | 2.75 MPa | 2.748 MPa | ± 0.005 MPa |
| Plastic radius at pi = 0 | 3.81 m | 3.807 m | ± 0.05 m |
| Wall displacement at pi = 0 | 47 mm | 46.9 mm | ± 0.5 mm |
| Plastic radius at pi = 1.374 MPa | 3.33 m | 3.332 m | ± 0.05 m |
| Wall displacement at pi = 1.374 MPa | 34 mm | 34.2 mm | ± 0.5 mm |
| Plastic radius at pi = 2.749 MPa | 3.00 m | 3.000 m | ± 0.05 m |
| Wall displacement at pi = 2.749 MPa | 27 mm | 27.2 mm | ± 0.5 mm |
| Equilibrium support pressure | about 0.3 MPa | 0.298 MPa | ± 0.05 MPa |
| Equilibrium displacement | approximately 43 mm | 43.4 mm | ± 0.5 mm |
- The eleven-point table is checked at ± 0.05 m on the plastic radius. That is ten times looser than the two decimals the figure prints, and it is the weakest tolerance anywhere on this page. The displacement bound of ± 0.5 mm is the figure’s own printed precision.
- The equilibrium point is computed with the bolt capacity and elastic range taken as Table 9.1 prints them — psm = 0.34 MPa, usm = 21 mm — so it exercises the ground curve and the equilibrium solver, not the bolt-capacity calculation.
- One number does not reproduce. The text puts the ratio of bolt capacity to the pressure required for equilibrium at "approximately 2"; this implementation computes 1.14 for the same intersection. The intersection itself — pressure and displacement — reproduces, and the disagreement in the derived ratio is recorded by the test rather than tuned away.
Asserted by src/plots/grc/__tests__/physics.test.ts
The support capacities of Table 9.1
- Source.
- Hoek, E., Kaiser, P.K. & Bawden, W.F. (1995). Support of Underground Excavations in Hard Rock, chapter 9. Table 9.1, and its note 1 on bolt length and spacing.
- Method.
- Every capacity entry in Table 9.1 for the two support types this tool offers is recomputed from geometry and material properties and compared with the printed value. Thirty-five entries in total.
| Entries | What is compared | Agreement |
|---|---|---|
| 15 — shotcrete and concrete rings, 3 configurations × 5 tunnel diameters | Maximum support pressure psm | within 0.006 MPa of the printed value |
| The same 15 | Maximum elastic displacement usm | 14 within the table’s own ± 0.5 mm rounding; the fifteenth, one-day shotcrete at 12 m, computes 9.4 mm against a printed 10 |
| 20 — mechanically anchored rockbolts, 4 bolt sizes × 5 tunnel diameters | Maximum support pressure psm | within 0.005 MPa plus 2 % of the printed value |
- Poisson’s ratio for the ring is taken as 0.2. The table does not print it, and it is what sets the displacement agreement above.
- Bolt elastic displacements are not claimed. Table 9.1 prints them to the nearest millimetre, and inverting different rows implies an anchor constant anywhere between about 0.03 and 0.06 m/MN — there is nothing precise enough there to test against.
- The 34 mm bolt is entered at a 0.34 MN pull-out load rather than the 0.35 its own row label carries. Taking the label literally puts the whole row about 3 % out; the table’s capacity entries are only consistent with 0.34.
Asserted by src/plots/grc/__tests__/physics.test.ts
The weak-rock tunnel of Practical Rock Engineering, chapter 12
- Source.
- Hoek, E. Tunnels in weak rock. Practical Rock Engineering, chapter 12 — equations 5 to 7 and the spreadsheet printed as Figure 4 of that chapter.
- Method.
- ro = 3.0 m, po = 2.0 MPa, ν = 0.30, E = 749.9 MPa, pi = 0, driven from the chapter’s own fitted strength (c′ = 0.22 MPa, φ′ = 24.72°).
| Quantity | Published | StrataPlot | Test tolerance |
|---|---|---|---|
| σcm | 0.69 MPa | 0.687 MPa | ± 0.005 MPa |
| Ratio k | 2.44 | 2.438 | ± 0.005 |
| Critical pressure pcr | 0.96 MPa | 0.964 MPa | ± 0.005 MPa |
| Plastic radius at pi = 0 | 6.43 m | 6.467 m | within 1.5 % |
| Wall displacement at pi = 0 | 30.60 mm | 30.90 mm | within 1.5 % |
- This comparison is deliberately not end to end. The chapter’s spreadsheet fits Mohr-Coulomb by an eight-point least-squares regression under the 1997 criterion, and this tool uses the 2002 closed form instead. Feeding it the chapter’s own c′ and φ′ isolates the part under test — the Duncan Fama solution — from the part that has legitimately moved on since. The chapter’s σci, GSI and mi are not used.
- The 1.5 % band is not a matter of taste. The chapter prints c′ and φ′ to two decimals and the solution is sensitive to them: ± 0.005 MPa on the cohesion alone moves the plastic radius by about 0.4 %.
Asserted by src/plots/grc/__tests__/physics.test.ts
Kinematic Analysis
Open the toolThere is no published worked example behind this tool, and none is claimed. Kinematic analysis has no worked numerical example in the literature the way the Hoek-Brown criterion does — what the references supply is the definition of each criterion and the drawing convention for each construction. So what is validated here is the geometry: two independent derivations of the same envelope held against each other, and every threshold checked against arithmetic written out longhand.
The daylight envelope, derived two ways
- Source.
- Goodman, R.E. (1989). Introduction to Rock Mechanics, 2nd edn, Wiley, chapter 8 — daylighting, and the Goodman & Bray interlayer-slip condition. · Rocscience Dips v8 documentation, Planes → Display Daylight Envelope — the construction and the drawing convention.
- Method.
- The envelope is drawn as Dips documents it: walk the slope great circle and map each (trend, plunge) to (trend + 180, 90 − plunge). The zone arithmetic does not use that curve — it uses the algebraic form θ(Δ) = arctan(tan ψf · cos Δ). Both are evaluated at 720 points around a 135/60 face and compared. If either is wrong, they disagree.
| Property | Expected | Worst disagreement found |
|---|---|---|
| Envelope polar angle at 720 points around the face | the two constructions coincide | below 1×10⁻⁹ degrees |
| Both ends of the envelope | close on the centre of the net | within 5×10⁻¹⁰ degrees |
| Far extreme of the envelope | the pole of the slope face itself, 315/30 | within 5×10⁻¹⁰ degrees in trend and in plunge |
| The identity Dips states, dip vector (t, p) → pole (t + 180, 90 − p) | holds exactly | within 5×10⁻¹⁰ degrees |
- This is an internal cross-check between two independent formulations, not a comparison against published output. What it proves is that the envelope drawn on the figure and the envelope the classification arithmetic uses are the same curve — which is the failure mode that would otherwise produce a plot where the points and the shading disagree.
Asserted by src/plots/kinematic/__tests__/compute.test.ts
Every threshold, against hand arithmetic
- Source.
- Wyllie, D.C. & Mah, C.W. (2004). Rock Slope Engineering: Civil and Mining, 4th edn, Spon Press, §2.5 — the conditions for planar sliding (ψf > ψp > φ, within ±20° of the face dip direction), wedge sliding (ψfi > ψi > φ) and flexural toppling ((90 − ψp) + φ < ψf). · Goodman, R.E. (1989). Introduction to Rock Mechanics, 2nd edn, Wiley, chapter 8. · Hudson, J.A. & Harrison, J.P. (1997). Engineering Rock Mechanics — the direct-toppling test. · Rocscience Dips v8 documentation, Kinematic Analysis pages — planar sliding, wedge sliding, flexural toppling, direct toppling.
- Method.
- A reference slope of 135/60 with φ = 35° and lateral limits of ± 20°. Each threshold is computed longhand in the test, written out in the comment beside it, and the engine is required to land on it.
| Quantity | Hand calculation | StrataPlot | Test tolerance |
|---|---|---|---|
| Apparent dip of the face at Δ = 20° | arctan(tan 60° · cos 20°) | 58.4333° | ± 0.0005° |
| Apparent dip of the face at Δ = 60° | arctan(tan 60° · cos 60°) | 40.8934° | ± 0.0005° |
| Daylight envelope / friction cone crossing | cos Δc = tan 35° / tan 60° = 0.40427 | 66.16° | ± 0.05° |
| Flexural toppling slip limit | ψf − φ = 25° | 25.000° | ± 5×10⁻¹⁰° |
| Flexural toppling threshold on the dip axis | 90 + φ − ψf = 65° | critical at 66°, not at 64° | the correct side of the boundary |
| Equal-area plotting radius at 35° from centre | √2 · sin(35°/2) | 0.42526 | ± 5×10⁻⁵ |
| Equal-angle plotting radius at 35° from centre | tan(35°/2) | 0.31530 | ± 5×10⁻⁵ |
- No page or figure numbers are given for the textbook references, because the implementation records none. What those sources supply is the criterion; it is the criterion that is tested.
- Every classification boundary is tested from both sides — a joint at φ + 0.1° is critical and one at φ − 0.1° is not — including the case a "dip flatter than the face" shortcut gets wrong, where the face’s apparent dip off-axis is what governs.
- The dataset the tool ships with is synthetic: nineteen planes chosen so that each one lands on a known side of a known construction. It is not field data and it is not from a publication.
Asserted by src/plots/kinematic/__tests__/compute.test.ts, src/plots/kinematic/__tests__/render.test.tsx
Plasticity Chart
Open the toolThe fine-grained branch of the Unified Soil Classification System is defined by two straight lines and three thresholds, so there is nothing to approximate: every boundary is tested from both sides, including the ones that only bite in the sixteenth decimal place.
Boundary cases of the Casagrande chart
- Source.
- ASTM D2487, Standard Practice for Classification of Soils for Engineering Purposes (Unified Soil Classification System), Figure 3 — the fine-grained branch.
- Method.
- Each boundary is approached from both sides and landed on exactly: the A-line, the U-line, the LL = 50 divide, and the PI 4–7 band above the A-line where D2487 assigns the dual symbol CL-ML.
| Boundary case | LL, PI | D2487 | StrataPlot |
|---|---|---|---|
| Exactly on the A-line | 40, 14.6 | CL | CL |
| A hair below the A-line | 40, 14.5 | ML | ML |
| Exactly on LL = 50, above the A-line | 50, 22 | CH | CH |
| Exactly on LL = 50, below the A-line | 50, 21 | MH | MH |
| A hair below the LL = 50 divide | 49.9, 22 | CL | CL |
| Bottom of the CL-ML band | 20, 4 | CL-ML | CL-ML |
| Top of the CL-ML band | 20, 7 | CL-ML | CL-ML |
| A hair below the band | 20, 3.9 | ML | ML |
| A hair above the band | 20, 7.1 | CL | CL |
| Where the A-line rises through the band | 32, 4.5 | ML | ML |
| Still inside the band, A-line at 6.57 | 29, 6.9 | CL-ML | CL-ML |
| PI above 7 but below the A-line | 38, 8 | ML | ML |
| High plasticity, below the A-line | 62, 24 | MH | MH |
| Line | D2487 equation | PI at LL = 50 | Test tolerance |
|---|---|---|---|
| A-line | PI = 0.73 (LL − 20) | 21.9 | ± 5×10⁻¹¹ |
| U-line | PI = 0.9 (LL − 8) | 37.8 | ± 5×10⁻¹¹ |
- Only the fine-grained branch is implemented: CL, CH, ML, MH and the CL-ML dual symbol. The chart cannot separate organic soils from ML and MH — D2487 does that with the oven-dried liquid-limit ratio, which is not a plot input — and the coarse-grained branch needs a grading rather than an Atterberg pair. CL-ML is the only dual symbol produced.
- The implementation cites ASTM D2487 without an edition year, so no edition is claimed here.
- A point sitting exactly on the A-line is classified onto the clay side, and that convention is tested at the level of the floating-point representation: 0.73 × 20 evaluates to 14.599999999999998, and without an explicit tolerance that sample would come back ML instead of CL. It is the kind of defect that produces one wrong row in a hundred and is never noticed.
- A physically impossible sample — above the U-line — is classified and flagged rather than refused, because a laboratory result that plots there is usually a transcription error worth seeing on the chart.
Asserted by src/plots/atterberg/__tests__/compute.test.ts, src/plots/atterberg/__tests__/render.test.tsx
CPT Profile
Open the toolTwo very different claims sit in this tool, and they are worth separating. The soil behaviour type chart is a digitisation of a printed figure, and everything below says so. The soil behaviour type index is a published equation with exactly one right answer, and is asserted as tightly as arithmetic allows.
The soil behaviour type chart — a digitisation, and what that is worth
- Source.
- Robertson, P.K., Campanella, R.G., Gillespie, D. & Greig, J. (1986). Use of Piezometer Cone Data. In: Use of In Situ Tests in Geotechnical Engineering (In Situ ’86), ASCE Geotechnical Special Publication No. 6, Blacksburg, Virginia, pp. 1263–1280. · The same chart is reproduced as the simplified soil behaviour type classification chart in Lunne, T., Robertson, P.K. & Powell, J.J.M. (1997), Cone Penetration Testing in Geotechnical Practice.
- Method.
- Robertson et al. published a figure, not a table of vertices. The zone boundaries here are explicit straight lines in log-log space defined by named anchor points, so that a reviewer can read what was assumed instead of reverse-engineering a list of coordinates. What is tested is what a digitisation can honestly promise.
| Check | Expected | Result |
|---|---|---|
| Fifteen readings, each unambiguously inside one zone | the published zone | all fifteen correct |
| Every point of a 41 × 41 grid across the chart | a zone for every point — no hole in the chart | 1,681 of 1,681 classified |
| Zones reached across a 121 × 121 sweep | all twelve | twelve |
| Friction ratio increasing at constant cone resistance | the zone number never increases | monotonic across eight steps, six distinct zones |
| A reading off the edge of the chart | clamped to the edge and flagged as clamped | flagged |
| Chart domain the boundaries were digitised inside | Rf 0.1–10 %, qc 0.1–100 MPa | as stated |
| Reading | qc (MPa) | Rf (%) | Zone |
|---|---|---|---|
| Quick clay — very low friction at very low resistance | 0.5 | 0.4 | 1 |
| Sensitive silty clay | 0.35 | 0.7 | 1 |
| Peat | 0.3 | 8.3 | 2 |
| Organic clay | 0.8 | 7.5 | 2 |
| Stiff clay | 2.0 | 4.5 | 3 |
| Soft marine clay | 0.6 | 4.6 | 3 |
| Silty clay | 1.2 | 3.5 | 4 |
| Clayey silt | 2.2 | 2.6 | 5 |
| Sandy silt | 3.0 | 1.8 | 6 |
| Silty sand | 8.0 | 1.15 | 7 |
| Slightly silty sand | 12.0 | 0.75 | 8 |
| Dense clean sand | 25.0 | 0.48 | 9 |
| Gravelly sand | 40.0 | 0.2 | 10 |
| Very stiff overconsolidated clay | 25.0 | 5.0 | 11 |
| Cemented sand | 30.0 | 2.0 | 12 |
- A reading that plots well inside a zone is classified reliably. A reading within roughly one printed line-width of a boundary — about ± 0.05 of a log cycle, or about 12 % in Rf — may fall either side of it here and in the original. The figure this tool draws carries that caveat in its own footer: "zone boundaries digitised from the published chart — a reading within one line-width of a boundary may fall either side of it." Do not build an argument on a single reading sitting on a zone edge; that is what the interpreted layer summary is for.
- Every implementation of this chart, including the commercial ones, is somebody’s digitisation of a printed curve. This one is no exception. The digitisation constants — the eight separator positions at qc = 1 MPa, the constant 25 % lean per decade of qc, and the two overconsolidation lines — are written out in the source. They are disclosed, not validated: there is nothing published to validate them against.
- It is a soil behaviour type chart, not a grading. It reports how the ground behaved against a cone, which is usually but not always what a sieve would have said. Robertson says so himself, repeatedly.
- The zones overlap by design — the two overconsolidation bands sit over the others — and a fixed precedence order resolves which one wins. That precedence is part of the digitisation, not a property of the published figure.
Asserted by src/plots/cpt/__tests__/robertson.test.ts, src/plots/cpt/__tests__/render.test.tsx
The soil behaviour type index Ic
- Source.
- Robertson, P.K. & Wride, C.E. (1998). Evaluating cyclic liquefaction potential using the cone penetration test. Canadian Geotechnical Journal 35(3), 442–459, eq. (4) and Table 1. · Restated with the same constants in Robertson, P.K. (2009). Canadian Geotechnical Journal 46(11), 1337–1355.
- Method.
- One reading worked through the published expression by hand in the test — the arithmetic is written out line by line in the comment above it, so the assertion is a check and not a tautology — and every zone boundary of Table 1 approached from both sides.
| Quantity | Hand calculation | StrataPlot | Test tolerance |
|---|---|---|---|
| Corrected resistance qt | 5000 + 200(1 − 0.80) = 5040 kPa | 5040 kPa | ± 5×10⁻⁷ |
| Normalised resistance Qt | 4860 / 120 = 40.5 | 40.5 | ± 5×10⁻⁷ |
| Normalised friction ratio Fr | 60 / 4860 × 100 = 1.2346 % | 1.234568 % | ± 5×10⁻⁶ |
| Soil behaviour type index Ic | 2.2775 | 2.2780 | ± 0.0005 |
| SBTn zone | 5 — sand mixtures | 5 | exact |
| Ic | Zone | Description |
|---|---|---|
| below 1.31 | 7 | Gravelly sand to dense sand |
| 1.31 to 2.05 | 6 | Sands — clean sand to silty sand |
| 2.05 to 2.60 | 5 | Sand mixtures |
| 2.60 to 2.95 | 4 | Silt mixtures |
| 2.95 to 3.60 | 3 | Clays |
| 3.60 and above | 2 | Organic soils |
- Ic needs a vertical stress, which a cone does not measure. It is computed here from a constant bulk unit weight the user types in and a water-table depth, not from anything measured, and the figure says so where the Ic track is switched on.
- Robertson notes that Ic does not define zones 1, 8 or 9. A reading whose real behaviour is one of those three still gets an Ic here, and the zone it maps to will be wrong.
- There is no unit-weight correlation in this tool. Unit weight is an input, clamped to 10–24 kN/m³.
Asserted by src/plots/cpt/__tests__/robertson.test.ts
Soil Texture Triangle
Open the toolThe twelve USDA texture classes are defined by inequalities on sand, silt and clay per cent, so they can be transcribed rather than digitised. What is proved is coverage: no composition anywhere in the triangle is left without a class, and the polygons drawn on the figure are the polygons the classifier uses.
Complete coverage of the texture triangle
- Source.
- Soil Survey Manual, USDA Agriculture Handbook 18 — the twelve soil texture classes and the rules that generate the published triangle.
- Method.
- The class definitions are transcribed as inequalities (for example, sand: sand ≥ 85 and silt + 1.5 × clay < 15). Coverage is then checked exhaustively rather than by sampling.
| Check | Expected | Result |
|---|---|---|
| Every composition on a 1 % lattice — 5,151 points | a class for every one | 0 unclassified |
| Classes reached across the triangle | all twelve | twelve |
| The drawn polygons, sampled at every field label | the field the classifier names | agree at all twelve labels |
| More than 1,000 compositions on a 2 % lattice | the single drawn field containing the point is the field the classifier names | agree |
| Every field polygon | vertices sum to 100 % | within 5×10⁻⁷ |
| Sand | Silt | Clay | Class |
|---|---|---|---|
| 90 | 5 | 5 | sand |
| 100 | 0 | 0 | sand |
| 82 | 13 | 5 | loamy sand |
| 80 | 15 | 5 | loamy sand |
| 65 | 25 | 10 | sandy loam |
| 40 | 40 | 20 | loam |
| 20 | 65 | 15 | silt loam |
| 5 | 88 | 7 | silt |
| 0 | 100 | 0 | silt |
| 60 | 15 | 25 | sandy clay loam |
| 33 | 33 | 34 | clay loam |
| 10 | 57 | 33 | silty clay loam |
| 52 | 8 | 40 | sandy clay |
| 8 | 45 | 47 | silty clay |
| 20 | 20 | 60 | clay |
| 0 | 0 | 100 | clay |
- This is a coverage and self-consistency proof, not a measurement against a published figure. The Handbook prints rules and a triangle; the rules are what is transcribed, and the triangle is what those rules draw.
- A composition landing exactly on a line has to go somewhere, and the order the rules are evaluated in decides where: the finer class on the clay boundaries, the coarser class on the sand boundaries. That is the order that reproduces the published triangle. It is a stated convention, not a tested one.
- The implementation cites Agriculture Handbook 18 without a year, edition or page, so none is claimed here.
Asserted by src/plots/ternary/__tests__/compute.test.ts
QFL Diagram
Open the toolThe seven Dickinson provenance fields, and the five boundary segments that close them. This is a digitisation and is described as one: Dickinson et al. published a figure, so the coordinates below are somebody’s reading of a printed line, and the coordinates used are stated in full so that a reviewer can disagree with them.
The five published boundary segments
- Source.
- Dickinson, W.R. et al. (1983). Provenance of North American Phanerozoic sandstones in relation to tectonic setting. Geological Society of America Bulletin 94, 222–235.
- Method.
- The five boundary segments are held as endpoint coordinates in Q-F-L per cent, taken from the digitisation distributed as ProvenanceTernary.csv with the Provenance dataset; the seven fields are the polygons those segments close. The intersection of the first two lines, at (51.551, 39.826, 8.623), is computed rather than read off.
| Segment | From | To | Separates |
|---|---|---|---|
| Line 1 | 97, 0, 3 | 0, 85, 15 | continental block from everything else |
| Line 2 | 55, 45, 0 | 25, 0, 75 | recycled orogen from arc, and transitional continental from basement uplift |
| Line 3 | 82, 18, 0 | 79.617, 15.293, 5.089 | craton interior from transitional continental |
| Line 4 | 17.674, 69.443, 12.883 | 33.377, 12.832, 53.791 | dissected arc from transitional arc |
| Line 5 | 0, 50, 50 | 25, 0, 75 | transitional arc from undissected arc |
| Q | F | L | Field |
|---|---|---|---|
| 100 | 0 | 0 | craton interior |
| 94 | 5 | 1 | craton interior |
| 88 | 10 | 2 | craton interior |
| 72 | 25 | 3 | transitional continental |
| 60 | 35 | 5 | transitional continental |
| 35 | 60 | 5 | basement uplift |
| 0 | 100 | 0 | basement uplift |
| 70 | 8 | 22 | recycled orogen |
| 45 | 5 | 50 | recycled orogen |
| 38 | 40 | 22 | dissected arc |
| 15 | 45 | 40 | transitional arc |
| 8 | 22 | 70 | undissected arc |
| 0 | 0 | 100 | undissected arc |
- The coordinates are a digitisation, and not one made here: they come from a published digitisation of the 1983 figure rather than from the paper, which prints no coordinate table. They are in the source as literal numbers, which is the only form in which a reader can check them.
- A sample landing exactly on a boundary is assigned to the nearest field rather than left unclassified, so the gap-free coverage of the triangle — 1,326 compositions on a 2 % lattice, none unclassified — is partly a property of that fallback rather than purely of the polygons.
- Field vertices are asserted to sum to 100 % within 0.005, which is looser than the equivalent check on the USDA triangle for exactly the reason above: these coordinates came off a figure.
Asserted by src/plots/ternary/__tests__/compute.test.ts, src/plots/ternary/__tests__/render.test.tsx
Piper Diagram
Open the toolShared by the Piper, Stiff and Schoeller diagrams, which all read one analysis through one conversion. The equivalent weights are tabulated values and are asserted exactly; the water-type naming is the standard dominance rule; the Piper projection is cross-checked against an independent solve of its own geometry.
Equivalent weights and the charge-balance error
- Source.
- Hem, J.D. (1985). Study and Interpretation of the Chemical Characteristics of Natural Water. USGS Water-Supply Paper 2254, table 4. · Freeze, R.A. & Cherry, J.A. (1979). Groundwater, appendix III. · Charge balance in the half-sum form given by Hem (1985) and APHA Standard Methods 1030E.
- Method.
- Concentrations are converted from mg/L to meq/L by the tabulated equivalent weight of each ion — the formula weight divided by the absolute charge. Each conversion is checked against a concentration chosen to give a whole number of milliequivalents, so an error in a weight cannot hide.
| Ion | Equivalent weight (g/eq) | Test concentration (mg/L) | meq/L |
|---|---|---|---|
| Ca | 20.04 | 40.08 | 2 |
| Mg | 12.15 | 24.30 | 2 |
| Na | 22.99 | 22.99 | 1 |
| K | 39.10 | 39.10 | 1 |
| Cl | 35.45 | 35.45 | 1 |
| SO₄ | 48.03 | 96.06 | 2 |
| HCO₃ | 61.02 | 100.00 | 1.6388 |
| CO₃ | 30.00 | 30.00 | 1 |
| Case | Expected | StrataPlot | Test tolerance |
|---|---|---|---|
| A perfectly balanced analysis | 0 % | 0 % | exact |
| 5 meq cations against 5 meq anions, from mg/L | 0 % | 0 % | ± 5×10⁻⁹ |
| 12 against 8 | 20 % | 20 % | ± 5×10⁻¹¹ |
| 8 against 12 | −20 % | −20 % | ± 5×10⁻¹¹ |
| Every sample of the shipped example dataset | inside ± 1 % | inside ± 1 % | — |
- The implementation cites Water-Supply Paper 2254 without an edition, so none is claimed here.
- Below-detection notation such as "<0.5" is substituted by half the reporting limit and flagged as a warning, which is the usual convention (Helsel, 2005). That substitution is a convention, not a measurement.
Asserted by src/plots/hydrochem/__tests__/compute.test.ts
Hydrochemical facies naming
- Source.
- Back, W. (1966). Hydrochemical facies and ground-water flow patterns in northern part of Atlantic Coastal Plain. USGS Professional Paper 498-A.
- Method.
- The ion group holding more than 50 % of the cation (or anion) milliequivalents names the water; when no group reaches 50 %, the two largest are hyphenated in decreasing order. Cations are grouped Ca, Mg and Na+K; anions HCO₃+CO₃, SO₄ and Cl — the same groupings the Piper triangles use.
| Cations (Ca / Mg / Na+K) | Anions (HCO₃ / SO₄ / Cl) | Water type |
|---|---|---|
| 80 / 10 / 10 | 70 / 20 / 10 | Ca-HCO3 |
| 5 / 5 / 90 | 5 / 10 / 85 | Na-Cl |
| 72 / 18 / 10 | 20 / 69 / 11 | Ca-SO4 |
| 49 / 44 / 7 | 89 / 7 / 4 | Ca-Mg-HCO3 |
| 44 / 21 / 35 | 41 / 35 / 24 | Ca-Na-HCO3-SO4 |
| 50 / 30 / 20 | 50 / 30 / 20 | Ca-Mg-HCO3-SO4 |
| 33.4 / 33.3 / 33.3 | 33.4 / 33.3 / 33.3 | Ca-Mg-HCO3-SO4 |
- Exactly 50 % is not dominance. The row above with 50 / 30 / 20 on both sides comes back hyphenated, which is the boundary case the rule is usually stated too loosely to settle.
- A three-way tie is broken deterministically in Ca, Mg, Na and HCO₃, SO₄, Cl order, so the same analysis always produces the same name. That is an implementation decision, not something Back specifies.
- The implementation records this rule as the common Piper-diagram convention with an author-year note. What is tested is the dominance rule, not any particular figure from that paper.
Asserted by src/plots/hydrochem/__tests__/compute.test.ts
The Piper projection
- Source.
- Piper, A.M. (1944). A graphic procedure in the geochemical interpretation of water-analyses. Transactions, American Geophysical Union 25(6), 914–928 — the construction itself. · The layout as implemented: two equilateral base triangles of side 1 separated by exactly one side length, which is the only spacing for which the 60° projection rays out of the two triangles meet inside a rhombus whose lower vertex sits level with the triangle apexes.
- Method.
- The diamond coordinate is computed from a closed form obtained by intersecting the 60° ray rising to the right out of the cation point with the 60° ray rising to the left out of the anion point. The test does not use that closed form: it solves the two-ray intersection directly, from the raw triangle coordinates, and compares.
| Check | Expected | Agreement |
|---|---|---|
| Closed form against a direct ray solve, over the eight-sample example dataset | identical | better than 5×10⁻¹¹ |
| A pure Ca-HCO₃ water | left vertex of the diamond | within 5×10⁻¹¹ |
| A pure Na-Cl water | right vertex | within 5×10⁻¹¹ |
| A pure Ca-SO₄ water | top vertex | within 5×10⁻¹¹ |
| A pure Na-HCO₃ water | bottom vertex | within 5×10⁻¹¹ |
| A 50/50 mixture | the centre of the diamond | within 5×10⁻¹³ |
| Every sample of the example dataset | inside the rhombus | within 1×10⁻⁹ |
| The diamond’s lower vertex | level with the two triangle apexes | within 5×10⁻¹³ |
- This is an internal cross-check of two independent derivations of the same coordinate, evaluated over the eight samples of the example dataset. It proves the projection is self-consistent and that the four end members land on the four vertices. It is not a comparison against a published plot, and no published plot carries coordinates to compare against.
Asserted by src/plots/hydrochem/__tests__/compute.test.ts
What this page does not say
Agreement with a worked example is evidence that the equations were transcribed and wired up correctly. It is not evidence that the equations are the right ones for your ground, that the parameters you type in are defensible, or that the answer means what you want it to mean. Every tool on this site is a plotting and calculation aid, and none of it is a substitute for engineering judgement.
Tools that do not appear here have no published worked example behind them. They are tested — the suite is the same suite — but internal consistency is a different claim from reproducing a paper, and this page only makes the second one.