
Weighted Iterative Sigma-Space Inversion (WISSI)
Source:R/stress_inversion_wissi.R
slip_inversion_wissi.RdCombines the four classic fault slip inversion algorithms (Michael, 1983; Angelier, 1990; Yamaji and Sato, 2006; and Hansen, 2013) into a single coherent framework operating in the Yamaji-Sato 5-sphere sigma-space.
Usage
slip_inversion_wissi(
x,
weights = NULL,
sigma_alpha_deg = 10,
gamma_max = 10,
n_anneal = 8L,
max_iter = 50L,
tol_deg = 1e-04,
run_stage4 = TRUE
)Arguments
- x
object of class
"Pair"or"Fault"with at least 4 rows.- weights
numeric. Weightings for the faults. Must have the same length as
x- sigma_alpha_deg
Estimated slip direction measurement error in degrees. Used in Stage 4 analytic uncertainty. Default
10.- gamma_max
Maximum sense annealing sharpness parameter. Higher values commit more strongly to the predicted slip sense. Default
10.Set to0to disable sense annealing (fully sense-agnostic, like Hansen 2013).- n_anneal
Number of annealing steps (outer loop of Stage 3). Default
8.- max_iter
Maximum inner iterations per annealing step. Default
50.- tol_deg
Convergence tolerance in angular stress distance (degrees). Default
1e-4.- run_stage4
Logical. Compute analytic uncertainty (Stage 4). Default
TRUE.
Value
A named list with:
stress_tensor3x3 reduced stress tensor (Cartesian frame)
y6D unit y-vector on \(S^5\)
principal_axesunit vectors of principal stress axes (max to min)
principal_valseigenvalues of
stress_tensor(decreasing)alphaper-fault angular misfit (unsigned, 0-90°)
alpha_signedper-fault signed misfit (0-180°)
mean_alphamean angular misfit across all faults (°)
suspected_flippedrow indices where
alpha_signed> 90°n_flipped_sensenumber of faults whose sense was corrected in Stage 3
slips_correctedsense-corrected slip matrix used in final inversion
muper-fault magnitude weights from Stage 2/3
phi_senseper-fault tanh sense confidence from Stage 3
eigenvalue_gap\(\lambda_2 - \lambda_1\) of \(M5\) (condition number proxy)
M5_eigvalsall 5 eigenvalues of final \(M5\)
uncStage 4 uncertainty list (if
run_stage4 = TRUE):Cov5: 5x5 covariance matrix in sigma-space;Cov_y6: 6x6 covariance matrix (y-space);eigval_gap: eigenvalue gap (same as above);cov_eigvals: eigenvalues ofCov5;sigma1_unc: approx 1\(\sigma\) uncertainty on \(\sigma_1\) orientationPhi_unc: approx 1\(sigma\) uncertainty on \(\phi\)n_iter_totaltotal number of inner iterations
Examples
set.seed(20250411)
nx <- length(angelier1990)
par(mfrow = c(2, nx/2))
invisible(lapply(seq_len(nx), function(i) {
# inversion
x <- angelier1990[[i]]
res <- slip_inversion_wissi(x)
# some stress shape
phi_val <- round(res$stress_shape$phi, 2)
# misfit
rup_val <- round(res$misfit$rup_mean, 2)
# Plot the faults (color-coded by RUP%) and show the principal stress axes
stereoplot(title = names(angelier1990)[i], guides = FALSE)
stereo_shmax(res$SHmax)
fault_plot(x, col = assign_col(res$misfit$rup))
points(res$principal_axes, col = 1:3, pch = 16, cex = 1.5)
text(res$principal_axes,
label = rownames(res$principal_axes),
col = 1:3, adj = -.25
)
legend("topleft", col = 2:4, legend = rownames(res$principal_axes), pch = 16)
title(sub = bquote(Phi == .(phi_val) ~ "|" ~ bar("RUP") == .(rup_val) * "%"))
}))