Checkerboard Test
A checkerboard test quantifies how well the station coverage and path geometry recover a known input pattern. For an anisotropic inversion it is important to test both the isotropic and anisotropic components — the two need not have the same resolution.
examples/05_westUS_ani does not ship a dedicated checkerboard script — the commands below adapt the standard SurfATT workflow (surfatt_cb_fwd) to the anisotropic Western US setup.
Concept
- Superimpose a synthetic checkerboard on the starting model. For an anisotropic test, impose both a Vs checkerboard and an independent azimuthal-anisotropy pattern.
- Forward-simulate travel times using the same source–receiver geometry as the real data.
- Optionally add Gaussian noise at the RMS level observed in the real run.
- Invert the synthetic travel times with the same parameters as the real inversion.
- Compare recovered vs. input patterns separately for the isotropic and anisotropic components.
Run the test
Create a working directory
mkdir -p OUTPUT_FILES_CB
cp src_rec_data_wus.csv OUTPUT_FILES_CB/src_rec_file_forward_PH.csvGenerate synthetic travel times
SURFATT_cb_fwd builds the checkerboard on top of the starting model and runs a forward simulation:
mpirun -np 192 $SURFATT_HOME/bin/SURFATT_cb_fwd \
-i input_params_cb.yaml \
-n 7/8/3 \
-a 7/8/3/120 \
-m 0.2 \
-p 0.08/0.06 \
-s 15| Flag | Value | Meaning |
|---|---|---|
-i | input_params_cb.yaml | Input configuration file |
-n | 7/8/3 | Checker block count: 7 (lon) × 8 (lat) × 3 (dep) |
-a | 7/8/3/120 | Anisotropy block count (same grid) with fast-axis direction 120° |
-m | 0.2 | Isotropic velocity perturbation amplitude (±20%) |
-p | 0.08/0.06 | Path-length noise for PH and SH components (8% and 6%) |
-s | 15 | Starting depth of the first checker layer (km); layer thickness increases with depth |
Invert the synthetic data
Copy input_params.yml to input_params_cb.yml and change only the I/O paths:
data:
src_rec_file_ph: OUTPUT_FILES_CB/src_rec_file_forward_PH.csv
output:
output_path: OUTPUT_FILES_CB/Run the inversion
mpirun -np 192 $SURFATT_HOME/bin/SURFATT_tomo -i input_params_cb.ymlResolution test results
Isotropic Vs recovery

The input checkerboard pattern (left) and the recovered isotropic velocity perturbation (right) are shown at representative depth slices. The input anomalies are recovered with good amplitude fidelity and spatial coherence across the array interior, demonstrating that the station coverage and path geometry are sufficient to resolve structures at the imposed block scale. Amplitude recovery degrades toward the edges of the model domain, particularly in the offshore regions west of the coastline and along the southern boundary, where ray coverage is limited.
Vertical cross-sections


Vertical cross-sections along representative longitudinal (left) and latitudinal (right) profiles confirm that checkerboard anomalies are well recovered from the surface down to approximately 80 km depth. Below 60 km depth, vertical smearing becomes pronounced and amplitude recovery decreases substantially, indicating that the resolving power of the dataset is limited in the deeper mantle.
Azimuthal anisotropy recovery

The recovered azimuthal anisotropy is shown at multiple depths. Both the magnitude and fast-axis orientation of the synthetic anomalies are retrieved with satisfactory fidelity within the well-sampled interior of the array. The recovery of anisotropic parameters is generally coarser than that of the isotropic component, consistent with the lower sensitivity of surface-wave phase velocities to azimuthal anisotropy relative to isotropic velocity structure. Fast-axis directions in poorly sampled regions near the domain boundaries should be interpreted with caution.