DFN: Matching Interpretations
This guide describes how to build a Discrete Fracture Network (DFN) whose statistics are derived from interpreted geological data — orientation measurements, trace polylines, faults, outcrop meshes — rather than from hand-typed parameters. The end-to-end pipeline lets you:
- Group orientation measurements (manually or by automatic clustering).
- Create a DFN whose Fisher mean direction, Fisher K, and (where data permit) size distribution are computed from those groups.
- Override the synthetic intensity with a P32 value derived from real interpreted traces over a chosen outcrop mesh.
- Bias placement so synthetic fracture centres concentrate near a user-chosen region (typically the outcrop the traces were drawn on).
- Score the resulting DFN against the observed traces along three independent axes — length, orientation, intensity — plus a composite fitness score.
- Re-derive the DFN whenever the underlying interpretation changes.
If you are new to VRGS DFNs, read the main DFN user guide first; this document complements it and assumes familiarity with the basics of fracture sets, P32, and the project tree layout.
When to use this workflow
Reach for the interpretation-matching workflow when you have:
- One or more outcrop meshes (
CTriangulatedMeshfrom photogrammetry, lidar, or surface fits). - Interpreted trace polylines drawn on those meshes — either as
Polylineobjects in the polyline tree or asGeo Objectitems ofPlane Type = Fracturein the orientations tree. - Optionally, structural orientation measurements (
Orientation Objectitems in the orientations tree).
The workflow keeps the synthetic DFN tied to the underlying interpretation in three ways that pure parameter editing cannot:
| Tied to interpretation? | Pure parameters | Interpretation matching |
|---|---|---|
| Mean direction & K | Manually typed | Computed from selected orientation groups |
| Trace-length distribution | Manually typed | MLE-fitted from circumcircle radii of measurements |
| Intensity (P32) | Manually typed | Derived from observed P21 over a real outcrop |
| Spatial placement | Uniform Poisson | Gaussian falloff around a chosen mesh |
| Provenance | None | Per-set tag stored in the .dfn file |
| Validation | None | KS-based composite score against observations |
Tree layout & terminology
Throughout this guide we refer to the project-tree containers used by the workflow:
- Orientation Group — a folder under the Orientations tree node containing one or more Orientation Object measurements. One group becomes one fracture set in the DFN.
- Polyline / Geo Object — interpreted trace polylines. Either the
generic
Polylineitems orGeo Objectitems withPlane Type = Fractureare accepted as trace input. - Triangulated Mesh — the outcrop the traces are drawn on. Used both for surface-area computations (P21) and as the source for the region mask.
The "mesh" in this guide is always exactly one mesh per command. If your outcrop is split across several meshes, merge them before scoring.
Quick start
A typical session looks like this:
- Right-click a polyline group → Auto-cluster Selected Orientations… (optional; only if you have raw measurements that aren't yet in groups).
- Right-click one or more Orientation Group items → Create DFN from Selected Groups. Confirm the per-group Fisher preview.
- Ctrl-click the new DFN, the outcrop mesh, and the trace folder → Override P32 from Selected Traces…. Apply the derived P32.
- Ctrl-click the DFN + the mesh → Set Region Mask Source from
Selection. Switch each set's
Spatial Modelto Region Mask, tuneRegion Mask Falloff, then right-click → Regenerate. - Ctrl-click the DFN, the mesh, and the trace folder → Score DFN against Selected Traces…. Read the composite + per-axis scores in the Match Quality group of the property bar.
Each of those steps is described in detail below.
1 — Estimating virtual orientations from traces
If you have trace polylines but no orientation measurements, VRGS can synthesise orientations by combining each trace's tangent direction with the local outcrop normal at its centroid.
To run it:
- Select the parent Polyline Group that contains your traces, and ctrl-click the outcrop mesh they were drawn on.
- Right-click and choose Estimate Orientations from Selected Traces.
What happens:
- The trace polyline is reduced to its principal axis (PCA largest eigenvector) — this is the trace tangent.
- A BSP tree over the mesh's LOD-0 triangles finds the closest triangle to the trace centroid; its surface normal becomes the outcrop normal.
- The fracture-plane pole =
normalize(tangent × outcrop_normal). - A
dip / azimuthpair is derived from the pole using geological convention (lower-hemisphere flip). - A new Orientation Group is created named "Virtual orientations from <mesh name>", populated with one Orientation Object per accepted trace.
Diagnostics in the result message box:
| Reject reason | Meaning |
|---|---|
| Off mesh | Trace centroid is too far from any mesh triangle to sample a normal |
| Empty / short | Polyline has fewer than 2 vertices |
| Zero length | All vertices coincident |
| Degenerate tangent | PCA could not extract a stable principal axis |
| Trace parallel to outcrop normal | Cross-product is near zero (trace runs perpendicular to the outcrop face) |
These virtual orientations flow into Create DFN from Selected Groups exactly like any other orientation group.
2 — Auto-clustering orientations
Clustering picks out fracture sets from a busy stereonet without manual
selection. v1 uses k-means on the unit pole vectors with axial folding
— anti-parallel poles (+v, -v) represent the same plane and are
treated as identical.
To run it:
- Select one or more Orientation Group items, or any combination of loose Orientation Object items.
- Right-click → Auto-cluster Selected Orientations….
- Confirm. v1 produces 3 clusters; future versions will prompt for
k.
What you get:
Three new orientation groups, each named "Cluster N (M measurements)". The originals are not modified — clustering creates fresh copies, so you can run it multiple times with different inputs.
Edge cases:
- If fewer than 6 measurements are selected, the command refuses (need ≥2 per cluster × 3 clusters).
- Empty clusters can occur on small or pathological inputs; they are reported in the iteration count but produce no group.
3 — Creating a DFN from orientation groups
The Create flow is the entry point that ties all the orientation-side work together. It accepts one or more Orientation Group items and produces a fully-generated DFN.
To run it:
- Select the orientation groups you want — typically one per fracture set.
- Right-click → Create DFN from Selected Groups.
- A confirmation dialog summarises each group:
- Number of measurements
- Computed Fisher mean dip and azimuth
- Fisher concentration K
- A note about which groups will be skipped (need ≥3 measurements)
- Click Yes to proceed; No aborts without creating anything.
What gets computed:
- Mean orientation & K per group via Fisher statistics on unit poles.
- Size distribution when ≥10 trace lengths (circumcircle diameters of the input measurements) are available — fitted to power-law, lognormal, or exponential families with a Kolmogorov-Smirnov goodness-of-fit test. The best-fitting family is selected automatically.
- A default P32 = 0.3 and Spatial Model = Poisson are applied initially; both are easy to override afterwards (Sections 4 & 5).
What gets recorded:
- The source orientation group names are stored on the DFN. They drive the Re-derive action (Section 7) and survive save/reload.
- Per-set provenance tags ("default" / "fitted from trace circumcircles") are written so the property bar shows where each value came from.
4 — Overriding P32 from observed traces
The default P32 of 0.3 is rarely the right number for a real outcrop. This action measures P21 (trace length per outcrop area) from your interpreted traces and converts it to P32 stereologically.
To run it:
- Ctrl-click the DFN, the outcrop mesh, and the trace folder/polylines.
- Right-click → Override P32 from Selected Traces….
- The dialog shows:
- Total trace count and length
- Outcrop area
- Measured P21
- Derived P32 (=
(4/π)·P21·ξwith ξ = 1 isotropic) - Current vs proposed P32 for each set
- Click Yes to apply; the DFN is regenerated with the new intensity.
Stereological assumption:
The conversion uses the isotropic-orientation factor