Skip to main content

Discrete Fracture Network (DFN) User Guide

This guide covers the Discrete Fracture Network (DFN) modeling capabilities in VRGS, including generation, visualization, and analysis features.

Building a DFN from interpreted data?

If you have interpreted trace polylines or structural measurements and want the DFN to match them — derived Fisher statistics, observation-driven P32, placement biased toward your outcrop, validation against observed traces — see the companion DFN Interpretation Matching guide.

Overview

A Discrete Fracture Network (DFN) is a stochastic representation of fracture systems in rock masses. VRGS allows you to:

  • Generate statistically-controlled fracture networks from orientation data
  • Compute fracture-fracture intersections and fracture traces on outcrop meshes
  • Analyze network connectivity and topology using graph theory
  • Model stress-controlled fracture propagation
  • Create cross-sections through the network
  • Filter fractures by proximity to outcrops
  • Colour fractures by computed geometric, connectivity, topology, and stress attributes

Creating a DFN

A DFN is created from one or more orientation (plane attitude) groups:

  1. In the Interpretation tree, select the orientation group(s) you want to base the network on (each group becomes one fracture set)
  2. Right-click and choose Create DFN from Selected Groups

For each group, VRGS derives the set's mean orientation and Fisher concentration (K) from the measured poles. If the group's planes carry trace geometry, a size distribution is also fitted to the trace lengths (see Distribution Fitting); otherwise sensible defaults are used. The source of each derived value is shown in the properties panel (P32 Source, Size Distribution Source).

The names of the source orientation groups are stored with the DFN, so you can later right-click the DFN and choose Re-derive from Source Orientation Groups to re-run the derivation against updated data.

Setting the Domain

The DFN domain defines the 3D bounding box where fractures are generated. It is set from the data extents at creation and can be edited in the properties panel under Domain (Min/Max X, Y, Z).

Fracture Sets

A DFN consists of one or more fracture sets, each with distinct statistical properties. Sets correspond to the orientation groups the DFN was created from; each can be enabled/disabled individually (Enable Set).

Fracture Set Parameters

All parameters are edited in the properties panel under Fracture Sets.

Orientation (Fisher Distribution)

ParameterDescription
Mean DipAverage dip angle (0-90 degrees from horizontal)
Mean AzimuthAverage dip direction (0-360 degrees, 0=North)
Fisher KFisher concentration parameter. Higher values = tighter clustering around mean
  • Fisher K ≈ 1-5: Strongly dispersed orientations
  • Fisher K = 10-20: Moderate clustering
  • Fisher K = 50+: Tight clustering around mean

When derived from measurements, K is estimated from the resultant length of the pole population using the spherical (3D) Fisher maximum-likelihood estimator and clamped to the range [0.1, 1000].

Size Distribution

ParameterDescription
Size DistributionPower Law, Lognormal, Exponential, or Uniform
Min RadiusMinimum fracture radius
Max RadiusMaximum fracture radius
ExponentFor power law distribution (typically 2.0-3.5)
Lognormal Mean / StddevParameters of ln(r) for the lognormal distribution
Aspect RatioMajor/minor axis ratio for elliptical fractures (1.0 = circular)

Intensity (P32)

ParameterDescription
P32 IntensityFracture area per unit volume (m²/m³)

P32 is the most robust intensity measure as it is scale-independent. The generator calibrates the fracture count from the expected fracture area of the size distribution (not the mean radius), so the realized P32 matches the target even for broad power-law size distributions. With the Poisson spatial model and boundary truncation, fractures centred outside the domain that cross into it are also generated, so there is no intensity deficit near the domain faces.

Spatial Model

ModelDescription
PoissonCompletely random (uniform) fracture centres
ClusteredNeyman-Scott clustering: a reduced set of parent centres each spawns several fractures within Cluster Radius; Fractures per Cluster sets the mean number of fractures per parent
StratifiedGrid-stratified sampling — more even spatial coverage than Poisson
Region MaskPlacement biased toward a mask mesh with a Gaussian falloff (Region Mask Falloff); see the Interpretation Matching guide

Termination Rule

RuleDescription
NoneFractures extend beyond the domain unmodified
Truncate at BoundaryFracture polygons are clipped to the domain box
AbuttingYounger fractures terminate against older ones with probability Abutting Probability

Generating the Network

  1. Right-click on the DFN in the Interpretation tree
  2. Select Regenerate

Each regeneration uses a fresh random seed, producing a new statistical realization with the same parameters. The Grow menu item regenerates and then runs fracture propagation (see below).

Visualization

Visibility Options

  • Visible: Toggle the fracture network on/off
  • Show Vertices: Toggle rendering of fracture intersection points

Render Mode

The Render Mode selector in the properties panel controls how fractures are drawn:

ModeDescription
DisksFilled fracture polygons, coloured by fracture set
OutlinesPolygon edges only
Colour by PropertyFilled polygons coloured by the active attribute layer through the colour map

Generating an attribute automatically switches to Colour by Property so the result is visible immediately; switch back to Disks at any time without losing the attribute layer.

Stereonet and Rose Diagram

A visible DFN plots on any stereonet window (Window → New Stereonet View) just like measured orientation data:

  • Poles: each fracture's pole is plotted, coloured by fracture set (a fixed per-set palette, distinct from the bedding/fracture/cleavage colours used for measured data). Very large networks are uniformly decimated to keep the display responsive while remaining statistically representative.
  • Density contours: the Kamb/Schmidt contouring includes DFN poles.
  • Rose diagram: fracture azimuths (or strikes, with Rose as Strike) contribute to the rose petals, density heat ring, and azimuth dots.
  • SVG export includes the DFN poles, mirroring the on-screen display.

To validate a generated network against its source data, check both the DFN and its source orientation groups in the stereonet window — generated and observed poles plot together with distinguishable colours.

Slicers and proximity filtering

See Slicers and Proximity Filtering below.

Intersection Analysis

Fracture-Fracture Intersections

Compute where fractures intersect each other:

  1. Right-click on the DFN
  2. Select Fracture Intersections

This creates line segments at all fracture-fracture intersections and automatically builds the connectivity graph from them.

Mesh Intersections

Compute where fractures intersect mesh surfaces (e.g., outcrop models):

  1. Ensure the target mesh(es) are visible
  2. Right-click on the DFN
  3. Select Mesh Intersections

This creates polylines representing the fracture traces on the mesh surface. Each fracture's intersection segments are automatically merged into continuous polylines.

Truncating Against the Boundary

Truncate Against Boundary (right-click menu) clips all existing fracture polygons to the current domain box without regenerating the network.

Connectivity Graph

The fracture graph represents network topology using nodes (intersection points) and edges (intersection-line segments between nodes). It is built automatically when you run Fracture Intersections.

Topology classification

Nodes are classified following Sanderson & Nixon (2015):

  • I-nodes — free ends of intersection lines (degree 1)
  • Y-nodes — abutments, where the end of one intersection line meets the interior of another (degree 3)
  • X-nodes — crossings of two intersection lines (degree 4)

The reported proportions P_I, P_Y, P_X are computed over the classified nodes and sum to 1. Connections per line (C_L = 2(N_Y + N_X)/N_lines) and connections per branch (C_B) are also computed.

Graph Analysis

The graph provides:

  • Connected component identification
  • Node degree analysis (I, Y, X nodes)
  • Per-fracture topology and connectivity attributes (see Attributes)

Fracture Propagation

VRGS includes a stress-controlled fracture propagation model that extends fracture tips incrementally.

Propagation Parameters

ParameterDescription
Step LengthDistance each tip advances per step
Max Total LengthMaximum length a fracture can grow
Max StepsMaximum propagation iterations
Abutting DistanceDistance at which tips terminate against other fractures
Abutting ProbabilityProbability of termination when within abutting distance
Stress Shadow DistanceZone of influence around existing fractures
Stress Shadow AngleParallelism threshold: a tip growing within this angular tolerance of a nearby fracture's orientation (and within the shadow distance) terminates
Direction NoiseRandom variation in growth direction (degrees)

Stress Tensor

The propagation direction is influenced by the regional stress field:

  • Sigma1: Maximum principal stress direction — in-plane growth is deflected toward it, weighted by the stress anisotropy (σ1 − σ3)/σ1
  • Sigma2: Intermediate principal stress
  • Sigma3: Minimum principal stress (fractures propagate perpendicular to this)

Running Propagation

From the DFN's Attribute menu, under Propagation:

  1. Initialize from Tips — creates two growth tips per fracture at the ends of its strike axis
  2. Either:
    • Step: Single growth iteration
    • Run to Completion: Run until all tips terminate or Max Steps is reached

The spatial index is refreshed as fractures grow, so abutting and stress-shadow checks always see the current geometry.

Slicers (Cross-Sections)

Create 2D cross-sections through the DFN to visualize fracture traces on orthogonal planes.

Enabling Slicers

In the DFN properties panel:

  1. Enable X Axis Slicer, Y Axis Slicer, or Z Axis Slicer
  2. Adjust the slider position (0-100% of domain extent)

Slicer Display

When a slicer is active:

  • Fracture disks are hidden
  • Intersection lines with the slicer plane are displayed

Multiple slicers can be active simultaneously.

Proximity Filtering

Filter fractures based on their distance to outcrop data (meshes or point clouds).

Enabling Proximity Filter

  1. In DFN properties, enable Enable Filter under Proximity Filter
  2. Set the Distance Threshold (meters)
  3. Optionally enable Invert Filter to show only distant fractures

How It Works

  • Distances are computed from fracture centroids to the nearest visible mesh/point cloud
  • A distance grid accelerates lookups for large datasets
  • Filtering is performed in the GPU shader for smooth interaction

Attributes

DFN fractures support computed attributes for analysis and colour mapping. Generate them from the DFN's Attribute right-click menu; the fracture display is coloured by the most recently generated attribute.

Geometry Attributes

AttributeDescription
DipDip angle (0-90°)
AzimuthDip direction (0-360°)
WidthFracture extent along strike
HeightFracture extent down dip
AreaFracture polygon area
DistanceDistance from the fracture to the nearest visible outcrop

Connectivity Attributes

AttributeDescription
Fracture IntersectionsNumber of fractures intersecting this one
Connected GroupsConnected-component ID of the fracture
Component SizeNumber of fractures in this fracture's connected component
Total Intersection LengthSummed length of this fracture's intersection lines
Intersection DensityIntersection length per unit fracture area
Mean Intersection AngleMean dihedral angle with intersecting fractures

Topology Attributes

AttributeDescription
Node CountGraph nodes on this fracture
I-Node Count (Tips)Free ends (degree 1)
Y-Node Count (Abutments)Abutting junctions (degree 3)
X-Node Count (Crossings)Crossing junctions (degree 4)
Branch CountGraph edges on this fracture
Connections Per LineY+X junction count for this fracture

Stress Attributes

Stress attributes are resolved on each fracture plane from the full 3D stress tensor configured in the project's stress settings (principal magnitudes and plunge/azimuth directions). Three failure parameters are configurable per DFN in the properties panel under Stress Parameters:

ParameterDefaultDescription
Pore Pressure (Pp)0 MPaPore fluid pressure for effective-stress calculations
Friction Coefficient (μ)0.6Coulomb friction coefficient
Cohesion (C0)0 MPaCohesive strength in the Coulomb criterion
AttributeFormulaDescription
Normal Stress (σn)t·n with t = S·nStress normal to the fracture plane (MPa)
Shear Stress (τ)√(|t|² − σn²)Shear stress on the fracture plane (MPa)
Slip Tendency (Ts)τ / σnShear reactivation potential (Morris et al. 1996)
Dilation Tendency (Td)(σ1 − σn) / (σ1 − σ3)Tendency to dilate and conduct fluid
Fracture Susceptibility(σn − Pp) − (τ − C0)/μPore-pressure increase required to reach Coulomb failure (MPa). Negative values indicate critically stressed fractures
Critically Stressedτ ≥ C0 + μ·(σn − Pp)Boolean Mohr-Coulomb failure flag

Interpretation

  • High Slip Tendency (Ts > 0.6): Fracture likely to slip under the current stress
  • High Dilation Tendency (Td > 0.6): Fracture likely open/conductive
  • Low or negative Fracture Susceptibility: Fracture at or near the failure envelope — candidate for reactivation and induced seismicity risk

Export

All exports live under the DFN's right-click Export submenu.

Fractures to FAB...

Writes the fracture geometry in FracMan ASCII (.fab) format: one record per active fracture (polygon vertices plus the plane normal), with fracture-set names in the SETS section and each fracture tagged with its set number. The file imports directly into FracMan and other DFN tools that read the format (e.g. Itasca codes, porepy).

Set Statistics to CSV...

One row per fracture set: orientation statistics (mean dip/azimuth, Fisher K), size-distribution parameters, spatial model and termination settings, target vs realized P32, total fracture area, fracture count, and the provenance tags shown in the properties panel.

Fractures to CSV...

One row per fracture: id, set, centroid coordinates, dip, azimuth, radius, polygon area, vertex count, and active flag — ready for external statistical analysis.

Intersection Lines as Polylines

Creates a polyline group in the project tree (DFN-Intersection Lines) from the fracture-fracture intersection segments, with each fracture pair's segments merged into continuous chains. Run Fracture Intersections first. The polylines are ordinary project objects, so they can be exported onward via the standard polyline export.

Analysis

The DFN's right-click Analysis submenu provides quantitative network analyses.

Virtual Scanlines to CSV...

Samples the network along three virtual scanlines through the domain centre (one per axis) — the numerical equivalent of a scanline survey or vertical borehole. The CSV report contains:

  • Per-set summary: intersection count, raw P10 (fractures/m), and Terzaghi-corrected P10 for each scanline. The Terzaghi correction weights each intersection by 1/|cos θ| (θ = angle between the scanline and the fracture pole) to compensate for the orientation sampling bias; weights are capped at 7 (≈8° blind zone, Priest 1993).
  • Per-intersection detail: fracture id, set, position, distance along the line, cos θ, and weight — ready for spacing analysis.

Compare the Terzaghi-corrected P10 of a vertical scanline against real borehole fracture frequencies to validate intensity.

Percolation Analysis

Builds connected clusters from the fracture-fracture intersections (run Fracture Intersections first) and reports:

  • Cluster count and the number of isolated (non-intersecting) fractures
  • The largest-cluster fraction of fractures and of area — the percolation order parameter
  • Whether any cluster spans the domain along X, Y, and Z (its geometry reaches both opposite faces)

A network that spans the domain is above the percolation threshold and can support large-scale flow; details for the top clusters are written to the log.

Oda Permeability Tensor...

Computes the upscaled equivalent permeability tensor (Oda 1985) for a user-specified hydraulic aperture, treating each fracture as a parallel-plate conduit (cubic law):

k_ij = (a³ / 12V) · Σ A_k (δ_ij − n_i n_j)

The report gives the principal permeabilities k1 ≥ k2 ≥ k3 (m²) with their plunge/trend directions, the fracture porosity (a·P32), and the full tensor in the log. Note this assumes every fracture is hydraulically connected — an upper bound; combine with the Percolation Analysis for context.

Best Practices

For Realistic Networks

  1. Base parameters on field measurements when available — use Create DFN from Selected Groups so orientation statistics come from your data
  2. Use multiple fracture sets to represent different deformation events
  3. Validate P32 intensity against borehole or scanline data
  4. Compare generated orientation distributions with stereonet data
  5. Use the Match Quality panel (see the Interpretation Matching guide) to score the DFN against observed traces

For Performance

  1. Start with low P32 during parameter tuning
  2. Use proximity filtering to focus on relevant fractures
  3. Run Fracture Intersections only when needed — intersection and graph computation scale with fracture count

For Analysis

  1. Run Fracture Intersections before generating connectivity or topology attributes
  2. Use attributes for quantitative comparisons between realizations

Troubleshooting

No fractures generated

  • Check that domain bounds are set correctly
  • Verify P32 intensity is greater than 0
  • Ensure at least one fracture set is enabled

Slow intersection computation

  • Reduce fracture count (lower P32 or smaller domain)
  • Use proximity filtering to limit active fractures

Mesh intersections disconnected

  • Segments from the same fracture are automatically merged
  • If gaps exist, the mesh may have holes or the fracture doesn't fully intersect

Slicers not showing

  • Ensure slicer is enabled AND position slider is moved
  • Check that fractures exist within the slice plane

Advanced Statistical Analysis

VRGS includes statistical tools for analyzing fracture data, based on techniques from the literature and FracPaQ. Distribution fitting runs automatically when a DFN is created from groups that carry trace geometry; the Fisher statistics below underpin set derivation and the match-quality scoring.

Distribution Fitting

Fit statistical distributions to fracture size data using Maximum Likelihood Estimation (MLE) with Kolmogorov-Smirnov goodness-of-fit testing.

Supported Distributions

DistributionParametersUse Case
Power Lawα (exponent), x_minScale-invariant fracture lengths (most common)
Lognormalμ, σ, x_minNatural log-normal processes
Exponentialλ (rate), x_minConstant spacing/fragmentation

How It Works

  1. MLE Fitting: Parameters estimated by maximizing likelihood
  2. x_min Optimization: Lower bound automatically selected to minimize the K-S statistic; all theoretical CDFs are conditioned on x ≥ x_min so the three families compete fairly
  3. Bootstrap K-S Testing: The selected fit's p-value comes from a semi-parametric bootstrap (Clauset et al. 2009) — synthetic datasets are drawn from the fitted model and refitted, so the p-value correctly accounts for the parameters having been estimated from the same data. p > 0.05 indicates an acceptable fit

Power Law MLE

For power law P(x) ~ x^(-α):

α = 1 + n / Σ[ln(x_i / x_min)]

The finite-size correction is applied for small samples.

Interpretation

p-valueInterpretation
> 0.10Good fit
0.05 - 0.10Marginal fit
< 0.05Poor fit - distribution may not apply

References

  • Clauset et al. (2009) "Power-Law Distributions in Empirical Data"
  • Newman (2006) "Power Laws, Pareto Distributions and Zipf's Law"

Fisher Concentration from Pole Data

When orientation statistics are derived from measurements (set creation and match-quality scoring), the Fisher concentration is estimated from the mean resultant length R of the 3D pole population:

K ≈ R(3 − R²) / (1 − R²)

This is the spherical (3D) maximum-likelihood estimator — appropriate for poles on the sphere, unlike the 2D von Mises estimator used for circular (strike/azimuth-only) data, which would underestimate K by roughly half at high concentration. Estimates are clamped to [0.1, 1000].

Circular Statistics

For circular (2D angular) data such as strikes and paleocurrent directions:

Axial vs Vectorial Data

TypeRangeExamples
Axial0-180° (headless)Fracture strikes, lineation trends
Vectorial0-360° (directed)Dip directions, current azimuths

For axial data, angles are doubled before analysis and results halved.

Computed Statistics

StatisticDescription
Mean DirectionCircular mean of angles
Resultant Length (R)0-1, measures concentration (0 = uniform, 1 = identical)
Circular Variance1 - R
Circular Std Dev√(-2·ln(R))
Concentration (κ)von Mises dispersion parameter (2D circular estimator)

Uniformity Tests

TestOutput
Rayleigh TestTests for unimodal concentration (Z = nR² against a critical value)
Watson U² Testp-value for non-uniformity on the circle
Kuiper TestTest statistic V_n (compare against published critical values)

References

  • Fisher (1993) "Statistical Analysis of Circular Data"
  • Mardia & Jupp (2000) "Directional Statistics"

Fabric Tensor Analysis

Quantify fracture network anisotropy using Oda's 2nd-rank fabric tensor (crack tensor).

Fabric Tensor (F2)

The tensor is computed as:

F2_ij = (1/V) * Σ[A_p * n_i * n_j]

Where:

  • V = domain volume
  • A_p = fracture area
  • n = unit pole vector (normal to fracture)

Output Properties

PropertyDescription
F2 Matrix3x3 symmetric tensor
EigenvaluesPrincipal anisotropy magnitudes (λ1 ≥ λ2 ≥ λ3)
EigenvectorsPrincipal anisotropy directions
Traceλ1 + λ2 + λ3 (proxy for P32)
Anisotropy Ratioλ1 / λ3 (1 = isotropic, higher = anisotropic)
Shape Factor(λ1 - λ2) / (λ1 - λ3) (0 = prolate, 1 = oblate)

Interpretation

Anisotropy RatioInterpretation
1.0 - 1.5Nearly isotropic
1.5 - 3.0Moderately anisotropic
3.0 - 10.0Strongly anisotropic
> 10.0Highly anisotropic (single dominant set)

Reference

  • Oda (1982) "Fabric tensor for discontinuous geological materials"