Skip to main content
Version: 3.4.8 (unreleased)

Surface Roughness Spectra

A fault slip surface, a joint face or a bedding plane is rough at every scale, and its roughness changes with the scale you look at it. VRGS describes that with two numbers measured from the power spectra of profiles across the surface, after Corradetti et al. (2026):

  • the Hurst exponent H, which says how roughness changes with scale. Near 1 the surface is dominated by its longest wavelengths and looks smooth up close; near 0 it stays jagged at every scale;
  • the spectral pre-factor C, which says how large the roughness is.

The paper's point is that the two only mean something together. Surfaces with the same H can differ tenfold in amplitude, and the long-standing observation that fault surfaces look smoother along slip even though their H is lower there is explained once C is considered too, since both are lower along slip. It is C, not H, that agrees between measurements of one surface made at different scales.

VRGS measures this in two places:

  • On each planar patch found by Grow Planar Patches, as triangle layers and, if you ask, an analysis report with the spectra drawn.
  • Over a whole mesh with the Roughness Map, in square windows stepped across the surface.

This page describes the measurement both share.

The measurement​

The surface on a grid​

The surface is resampled onto a regular grid in its fitted plane: a patch's plane, or a map window's. The samples are as far apart as the mesh's triangles (the square root of the mean triangle area), and the height of each one off the plane is interpolated inside the triangle above it. Removing the plane removes the surface's overall tilt; nothing else is taken off at this stage for a patch. A map window also has a fitted quadratic surface removed, so the bend of a curved outcrop is not read as roughness (see the Roughness Map).

Every row of the grid is a profile down-dip and every column one along strike. A surface has no slip direction of its own, so these are the two directions VRGS uses: on a dip-slip fault the down-dip profiles are the slip-parallel ones. A plane dipping under about 2° has no dip direction; a patch is then profiled along its longest extent, and a map window north and east.

Profiles​

Each row or column may be broken where the surface has holes. The unbroken runs are cut into profiles of one length: the longest power of two that still covers half the surface, with at least eight profiles. A direction where no profile reaches 128 samples is not measured (see Profile length for why 128).

Each profile has its least-squares line removed and a Hann window applied, and its one-sided power spectrum is computed with the normalisation of the authors' own code: the Fourier amplitudes are divided by the number of samples, doubled, corrected by the window's RMS, squared and multiplied by the profile length. P(k) is then in model units cubed, at frequencies k = m / L in cycles per model unit, and C compares with the paper's values for a model in metres. The highest frequency (Nyquist) is left out.

Three fits​

The spectra of all the profiles in a direction are averaged at each frequency and fitted with

P(k) = C k^−(1 + 2H)

as a straight line in log-log space: H from the slope, C from the intercept at k = 1. The paper's three conventions are all computed:

FitPoints fitted
All frequenciesEvery frequency of the mean spectrum. Dominated by the many short wavelengths, so the most sensitive to noise there.
Progressive meanThe first three frequencies as they are, then the rest averaged in bins evenly spaced in log k (Candela et al. 2012), so the many short wavelengths cannot outvote the few long ones.
Progressive mean in the bandThe same bins, inside a band of wavelengths from five grid cells up to half the profile length.

VRGS reports the third. The paper found it the least biased by noise, and the band's short end keeps clear of the wavelengths where a mesh is mostly its own linear interpolation inside each triangle. A Roughness Report lists all three for its largest patches: when they disagree by more than a few hundredths, the spectrum is not one straight line over the range.

Theoretical RMS roughness​

Rq is the RMS roughness of the fitted line over the band it was fitted on, the paper's eq. 5:

Rq = √( C / 2H · (k_min^−2H − k_max^−2H) )

It belongs to that band only, so two Rq values compare only when they were fitted over the same wavelengths. C does not have that restriction.

The spread of the spectrum​

At each frequency the profiles' log10 P(k) values scatter. For a stationary Gaussian surface measured with independent profiles that scatter is a property of the estimator, about 0.557 decades whatever the surface, and the paper measured 0.48–0.51 on its noise-free synthetic surfaces. VRGS reports the mean of it over the frequencies as the spread. Instrumental noise adds scatter of its own (the paper's noisy iPhone model read 0.69–0.73), so a spread well above the clean value flags a noisy mesh. Smoothing removes power instead of adding scatter, so the spread cannot see it.

Where VRGS departs from the paper​

A line removed and a Hann window, not the mean and a 3% taper. The paper removes each profile's mean and tapers 3% at each end. That is exact on its synthetic surfaces, which are generated by Fourier synthesis and so wrap onto themselves. A patch of a real outcrop never does: it is cut from a larger surface, and the power of the wavelengths longer than it, which on a self-affine surface is most of the power, spills into the lowest frequencies and steepens the spectrum. On synthetic surfaces cut from larger ones, with H 0.8 and 0.6, fitting every frequency:

ProcessingH read (true 0.8)H read (true 0.6)
The paper's (mean removed, 3% taper)0.88–0.950.65–0.70
VRGS's (line removed, Hann window)0.78–0.810.58–0.61

The paper's own natural-surface H values near 1 may partly be this, as it suspects of them. Narrowing the band or widening the taper makes it worse, not better. The Hann window's RMS correction keeps C in the paper's units.

The Nyquist frequency is left out, because its estimate is not doubled and has half the degrees of freedom of the others.

A minimum profile length, which the paper does not need on half-metre surfaces sampled at a fraction of a millimetre.

Validation​

The measurement is checked on synthetic self-affine surfaces built with the paper's generator (its eq. 4), whose H and C are known. With the paper's processing, on its own test (0.5 m surfaces at 1 mm, Hx 0.8, Hy 0.6, Rq 1 mm):

Paper (30 surfaces)VRGS
H along y, all / progressive0.613 / 0.5810.613 / 0.583
H along x, all / progressive0.836 / 0.7890.828 / 0.790
Rq progressive, y / x9.84e-4 / 9.54e-49.76e-4 / 9.35e-4
Spread, y / x0.489 / 0.5050.487 / 0.502

With VRGS's processing:

  • C agrees across scales. Two surfaces with one H and one C, a hundred times apart in size, read log10 C −5.03 and −5.08 against −5.01 expected, while their RMS heights differ by 10^0.8.
  • A triangulated surface measures as its grid. The same surface triangulated on a tilted plane at UTM-sized coordinates gives the grid's H to within 0.0001.
  • Noise. 20 dB of white noise drops H over every frequency from 0.8 to 0.16; the reported fit, whose band stops at five cells, keeps 0.67.

These checks are unit tests in VRGS (GeotechRoughnessSpectrumTests).

Reading the numbers​

Profile length sets the scatter​

H measured on one patch scatters about the surface's true value, and the scatter depends on how long the profiles are, not how many there are: a small patch holds only a few of the long wavelengths, and its neighbouring profiles share them. On synthetic surfaces cut from larger ones:

Profile length (samples)Scatter of H between patches
32about 0.65
64about 0.3
128about 0.2
256about 0.1
512about 0.05

So VRGS does not measure profiles shorter than 128 samples, and you should compare patches measured with profiles of similar length. At a 1 cm mesh resolution a patch must be about 1.3 m across to be measured at all.

C and its units​

C is the fitted line carried back to one cycle per model unit. In a model in metres that is a wavelength of 1 m, and C is in m³; values then compare with the paper's. In a model in other units the numbers are internally consistent but not comparable with published values. Because 1 m lies well outside a small surface's band, a small error in the slope swings C: a 128-sample window's log10 C scatters by about 0.5 decades. Over a large patch it is far steadier.

H of 1 or more​

No self-affine surface has H of 1 or more. A value there means the surface is not one power law over the band: a corrugation, a curve, a step or the edge of a patch has added power at the long wavelengths. Read it as a flag.

What the spread says​

On a whole patch, about 0.5 is a clean surface and a mean spread above about 0.65 suggests noise, which lowers H. A map window reads lower, about 0.3 on a clean surface, because its profiles share every wavelength longer than the window; compare it across the map rather than against 0.557.

Mesh quality​

  • Resolution. Nothing finer than the mesh's triangles can be measured, and the band stops at five of them.
  • Smoothing and decimation remove short-wavelength power, which steepens the spectrum and raises H. The band keeps clear of the worst of it, but a heavily smoothed mesh reads H high.
  • Noise flattens the short wavelengths and lowers H; it shows as a higher spread.

References​

  • Corradetti, A., Romanelli, F., Cremonesi, A., Bonini, L., Agosta, F. (2026). Beyond the Hurst exponent: the role of the spectral pre-factor in fault roughness characterization and its synthetic validation. Journal of Structural Geology 213, 105837. https://doi.org/10.1016/j.jsg.2026.105837 — with the authors' MATLAB code at https://github.com/amergeo/corradetti-2026-roughness.
  • Candela, T., Renard, F., Klinger, Y., Mair, K., Schmittbuhl, J., Brodsky, E. E. (2012). Roughness of fault surfaces over nine decades of length scales. Journal of Geophysical Research 117, B08409.

See also​

  • Grow Planar Patches — the spectra of each planar patch, and the Roughness Report.
  • Roughness Map — the same measurement in windows across a whole mesh.
  • JRC of each patch — the joint roughness coefficient, from profiles down each patch's dip.

For developers: the measurement is GeotechCore_RoughnessSpectrum.h, the report RoughnessSpectrumReport.h and the map GeotechCore_RoughnessMap.h, all MFC-free and unit-tested.