DFN: Validating Against Outcrop
A DFN is only useful if it reproduces the rock. This guide covers the Score DFN against Selected Traces… command, which cuts your synthetic network with the same outcrop surface you mapped on, compares the resulting traces against your interpretation, and writes a visual report you can read — or hand to a reviewer.
If you have not built a DFN from interpreted data yet, read DFN — Matching Interpretations first.
Why the comparison has to be done this way
A mapped trace and a synthetic fracture are not the same kind of thing:
- A fracture is a disc in 3D; a trace is the chord where that disc meets the outcrop. Chords are shorter than diameters, and how much shorter depends on where the fracture sits relative to the face.
- Most fractures in the model never reach the outcrop at all, so they should contribute nothing to the comparison.
- Traces that run off the edge of the exposure are cut short. Their real length is unknown — you only know it is at least what you mapped.
- A set lying nearly parallel to the face barely shows on it, however abundant it is in the rock.
Comparing fracture diameters against trace lengths therefore penalises a model that is completely correct. VRGS instead applies your sampling geometry to the model: it intersects the network with your mesh, chains the intersection segments into traces, and compares traces against traces. Both sides are then the same measurement, made the same way, on the same surface.
Running it
- Ctrl-click three things in the project tree: the DFN, the outcrop mesh, and the trace polylines (or the folder containing them).
- Right-click → Score DFN against Selected Traces….
The DFN is cut against the mesh, which takes a few seconds to a minute on a large network — a progress bar reports it.
You are then asked for a number of realizations. Enter 0 or 1 to score the network as it stands. Enter more to run an ensemble: the model is regenerated that many times with different seeds and each realization is cut against the same outcrop, so the report can show the model's own spread rather than one seed's result. Cost is linear in the number you give, and the network you are looking at is left untouched — the ensemble runs on a scratch copy.
When it finishes you get a summary dialog and an SVG report written next to your project and opened in your default viewer.
The traces must have been mapped on the mesh you select. Selecting a different outcrop compares two things measured in different places, and the numbers will be meaningless even though the command runs.
Seeing the fractures that matter
Most of a DFN never reaches the outcrop, so most of what you see in 3D could not have produced your interpretation at all. Comparing the whole network against a mapped face by eye is comparing an interpretation against a cloud that was never going to match it.
Show Outcrop-Constrained Fractures Only (right-click the DFN) hides everything except the fractures that actually cut the mesh — the ones that should correspond to your mapped traces. The rest of the network is still there; it is only hidden.
The subset is recorded whenever the DFN is cut against a mesh, by either Mesh Intersections or the scoring command above, and it comes from the very traces that were produced or scored. So what you inspect by eye is exactly the population the report's numbers describe.
Regenerating the DFN clears the subset. Fracture identities are reused when a network is rebuilt, so a subset kept across a regenerate would name the wrong fractures — while still looking authoritative. Cut against the mesh again after regenerating.
If you switch the filter on before ever cutting against a mesh, VRGS says so rather than emptying the view. An empty view would read as "the model produces nothing at this outcrop", which is the opposite of the truth.
Reading the report
Verdict strip
Three chips across the top — length, orientation, intensity — each green or red. They are a summary, not the answer; the panels below say why.
Trace length distribution
Two cumulative curves on a log-x axis: your mapped traces (solid blue) and the synthetic traces (dashed orange). If the model is right they lie on top of each other.
Below the curves: the Kolmogorov-Smirnov D statistic and its p-value.
- D is the largest vertical gap between the curves. It measures how big the disagreement is.
- p is the probability of seeing a gap that large if both populations really came from the same distribution. It measures whether the disagreement is real.
Both matter, and neither substitutes for the other. The same D = 0.08 is unremarkable with 50 traces and decisive with 5000. VRGS takes the verdict from p, so a large model is not marked as failing simply because a large sample can resolve a trivial difference.
A small p with a small D means "a real but tiny difference" — usually fine. A large p with a large D means "not enough data to tell" — map more traces before concluding anything.
Q-Q plot
Observed quantiles on the x axis, synthetic on the y, with a dashed y = x line.
- On the line — the distributions agree across their whole range.
- Above the line — the model generates traces longer than you mapped.
- Below the line — shorter.
- Bending away only at the right-hand end — the two agree on ordinary fractures but disagree on the large ones. That is a size-distribution problem: adjust the power-law exponent or the maximum size.
The Q-Q plot tells you which way to move a parameter. The KS statistic does not — it only tells you the largest gap.
Orientation
An equal-area lower-hemisphere stereonet. The synthetic pole density is shaded underneath, your mapped poles are drawn on top as circles.
Two numbers are reported:
| Measure | Meaning |
|---|---|
| Principal axes N° apart | Angle between the two populations' mean axes. Zero is aligned. |
| Density misfit | Difference between the two normalised pole densities, 0 (identical) to 1 (no overlap). |
Both are needed. A mean direction and a concentration cannot distinguish a tight cluster from a girdle sharing the same axis; the density misfit can. The Woodcock K values are also shown: above 1 is a cluster, below 1 a girdle.
Orientations are treated as axes throughout, so a pole and its opposite are the same plane. This matters most for steep sets, where the two descriptions of one plane sit at opposite ends of a near-horizontal axis.
Intensity
Paired bars for the three intensity measures, observed above and synthetic below:
- P21 — trace length per unit outcrop area. Measured the same way on both sides, from real traces, not converted from P32.
- P10 — traces per unit traverse length.
- P32 — target against realized. This one is about the generator rather than the outcrop: it answers "did I get the intensity I asked for?", independently of whether that intensity was right.
Where an ensemble has been run, a shaded band shows the P5–P95 range across realizations, and the summary says whether your outcrop is an ordinary draw from the model or falls outside its usual spread.
This is the difference between an anecdote and a statement about the model. A single realization can only tell you what that seed produced; if it happens to land 15% low on P21 you cannot tell whether the model is wrong or the seed was unlucky. Twenty realizations answer that. Around 20–50 is usually enough to place an observation; more mainly sharpens the band's edges.
Per-set breakdown
One row per fracture set plus a pooled total. A network that matches in aggregate can still have every individual set wrong — two sets can be individually mis-oriented in ways that cancel in the pooled statistics.
Each mapped trace is attributed to the set whose mean pole it best matches, within 30°. Traces matching no set are reported at the bottom of the table, not discarded. A large residual is itself the finding: your interpretation contains a fracture set the model does not have.
What to change when an axis fails
| Symptom | Likely cause | What to adjust |
|---|---|---|
| Q-Q bends up at the right | Model's large fractures are too large | Lower Size Max, or raise the power-law exponent |
| Q-Q above the line throughout | Whole size distribution shifted large | Re-derive the size distribution from measurements |
| Synthetic curve much steeper | Model size range too narrow | Widen Size Min / Size Max |
| Principal axes far apart | Mean orientation wrong | Re-derive from orientation groups, or check the set assignment |
| Density misfit high, axes aligned | Fabric shape wrong (cluster vs girdle) | Adjust Fisher K — low K spreads poles into a girdle |
| P21 ratio well below 1 | Model produces too little trace length | Raise P32, or check whether a set lies nearly parallel to your face |
| Realized/target P32 far from 1 | Generator not delivering the requested intensity | Check the termination rule and spatial model |
| Many unassigned traces | The model is missing a set | Add a fracture set for the unmatched orientations |
Statistics derived from
Below the per-set table, one line per set names the source behind its P32, size and orientation, with the chord model used and an [assumed] marker on anything that was not a direct measurement.
This is what makes the report reviewable rather than merely impressive. A score tells you how well the model matches; it cannot tell you whether the thing it matched was measured or assumed. An excellent match against an intensity that was itself derived from an assumed fracture size is not evidence of anything — and without this line there is no way to tell the two apart.
See DFN — Matching Interpretations §4 for how to choose those sources.
Truncation at modelled surfaces
When the DFN has model surfaces attached, the header states the bounded volume and each surface's coverage, and the per-set table gains two counts: fractures clipped at an upper or lower limit, and fractures stopped at an internal barrier.
These are reported because they change what the size comparison means. A bed-confined set is generated from its fitted size distribution and then cut, so its realised sizes are not the distribution it was given — that is the intended mechanism, not a fault. But it means a Q-Q plot bending below the line is expected for such a set, and reading it as "the size distribution is wrong" would send you to adjust a parameter that is doing exactly what it should.
If the clipped count is high and you did not intend bed confinement, check the coverage figures: a surface spanning only part of the domain constrains only that part, so a set can be confined in one region and free in another.
Censoring
Traces that reach the edge of the exposure are right-censored — their real length is a lower bound. VRGS flags them on both sides: on the synthetic side by testing whether a trace ends on a boundary edge of the mesh, on the observed side from your mapped geometry. The counts appear in the report footer.
By default all traces are compared, censored or not. That is the honest choice here, because the synthetic side was cut with the same outcrop and is censored the same way — the bias is present in both populations and largely cancels.
Excluding censored traces from both sides is also possible, but it discards data and biases against long fractures, which are precisely the ones most likely to run off the exposure.
The censoring correction
The report footer states what your mapped lengths imply about the rock once the exposure edge is allowed for, for example:
31 of 180 mapped traces reach the exposure edge. Median mapped length 3.40, but the population they came from has median 4.15 (×1.22) once that is allowed for.
This comes from a right-censored maximum-likelihood fit: censored traces contribute "the true length is at least this" to the likelihood instead of "the true length is this". For the power-law and exponential families that has a closed form — the count of complete traces over a sum taken across all of them — and both reduce to the ordinary estimator when nothing is censored.
A ratio near 1 means your exposure is large enough that the edge is not distorting what you measured. A ratio well above 1 means it is, and that the size distribution you derive from these traces will be too short unless the correction is applied.
The median is reported rather than the mean because a power law with an exponent at or below 2 has no finite mean, and fracture-length exponents commonly sit there.