Skip to Content
Synthetic ExamplesExample 01: Checkerboard Test for Azimuthal Anisotropy

Example 01: Azimuthal Anisotropy Checkerboard

This example reproduces SurfATTPP/examples/01_checkerboard_azimuthal_ani. It tests whether the inversion can recover an isotropic VsV_s checkerboard together with an independent azimuthal-anisotropy pattern.

Model parameterization

SurfATT represents azimuthal anisotropy using an isotropic S-wave velocity and two orthogonal anisotropic coefficients:

ParameterUnitDefinition and physical meaning
VsV_skm/sIsotropic S-wave velocity that controls the azimuthally averaged structure
GcG_cdimensionlessCosine component of the 2θ2\theta azimuthal variation
GsG_sdimensionlessSine component of the 2θ2\theta azimuthal variation
G0G_0dimensionlessAzimuthal-anisotropy magnitude
θ\thetadegreesFast-axis direction, defined modulo 180180^\circ

The magnitude and fast-axis direction are derived from the two inversion coefficients:

G0=Gc2+Gs2,θ=12atan2(Gs,Gc).G_0 = \sqrt{G_c^2+G_s^2}, \qquad \theta = \frac{1}{2}\operatorname{atan2}(G_s,G_c).

Conversely,

Gc=G0cos(2θ),Gs=G0sin(2θ).G_c = G_0\cos(2\theta), \qquad G_s = G_0\sin(2\theta).

The factor of two makes the parameterization 180180^\circ periodic: θ\theta and θ+180\theta+180^\circ describe the same fast-axis orientation. When G0=0G_0=0, the model is azimuthally isotropic and the fast-axis direction is undefined.

Internally, SurfATT directly updates VsV_s, GcG_c, and GsG_s. The HDF5 model files also contain the derived g0 and theta fields, so users can visualize anisotropy as oriented bars whose direction represents θ\theta and whose length represents G0G_0.

What is included

FileDescription
input_params.ymlAzimuthally anisotropic inversion settings
src_rec_file_rl_ph.csvRayleigh-wave phase-velocity source–receiver table
run_this_example.shScript for the forward and inversion stages
plt_model.ipynbNotebook for plotting VsV_s and azimuthal anisotropy

Parameter setup

The default configuration uses:

  • azimuthally anisotropic inversion (model_para_type: 1)
  • Rayleigh-wave phase-velocity data
  • model depth range of 0-12 km
  • longitude, latitude, and depth intervals of 0.02° / 0.02° / 0.5 km
  • separate smoothing scales for VsV_s and (Gc,Gs)(G_c,G_s)
  • up to 80 LBFGS iterations

Setting model_para_type: 1 activates the VsV_sGcG_cGsG_s inversion. The current azimuthal-anisotropy implementation uses Rayleigh-wave phase velocity; Love-wave and group-velocity data must remain disabled.

Run the example

The example has two dependent stages. First, SURFATT_cb_fwd creates the target isotropic and anisotropic checkerboards and calculates synthetic observations. Then, SURFATT_tomo starts from an isotropic model and attempts to recover both structures.

For a complete automatic run, execute the supplied script from the example directory:

bash run_this_example.sh

The following sections unpack the script step by step.

1. Prepare the forward input

Create the output directory and copy the source–receiver geometry to the filename configured in input_params.yml:

mkdir -p OUTPUT_FILES cp src_rec_file_rl_ph.csv OUTPUT_FILES/src_rec_file_forward_RL_PH.csv

The default data selection is:

wave_type: [True, False] # Rayleigh only vel_type: [True, False] # phase only

At this stage, src_rec_file_forward_RL_PH.csv provides the source–receiver geometry, periods, and weights. Its travel-time and velocity columns will be replaced by synthetic values during the forward calculation.

2. Generate the target model and synthetic data

Run the azimuthal-anisotropy checkerboard forward calculation:

mpirun -np 8 ../../bin/SURFATT_cb_fwd \ -i input_params.yml \ -n 3/3/2 \ -a 2/2/2/135 \ -p 0.08/0.08 \ -m 0.2 \ -s 4

The command-line options define two independent checkerboards:

OptionMeaning
-i input_params.ymlRead the data path, grid, initial model, and output settings
-n 3/3/2Create a 3 × 3 × 2 isotropic VsV_s checkerboard
-a 2/2/2/135Create a 2 × 2 × 2 anisotropy checkerboard with a reference fast-axis angle of 135135^\circ
-p 0.08/0.08Use an 8% VsV_s perturbation and an anisotropy magnitude of 0.08
-m 0.2Leave a 0.2° horizontal margin between adjacent anomalies
-s 4Set the upper anomaly size to 4 km

The forward stage proceeds as follows:

  1. SurfATT builds the 1-D starting model and extrudes it over the 3-D grid. The initial anisotropic coefficients are Gc=Gs=0G_c=G_s=0.
  2. Alternating ±8%\pm8\% perturbations are added to VsV_s using a 3 × 3 × 2 pattern.
  3. A separate 2 × 2 × 2 pattern is created for azimuthal anisotropy. Positive blocks use a 135135^\circ fast axis; negative blocks rotate the axis by 9090^\circ, giving the orthogonal 4545^\circ orientation.
  4. The anisotropy magnitude and direction are converted to GcG_c and GsG_s.
  5. Rayleigh-wave phase travel times are calculated through the target model and written to src_rec_file_forward_RL_PH.csv. This file becomes the observation table for the inversion.

The most important products of the forward stage are:

FileRole in the workflow
initial_model.h5Unperturbed starting model with Gc=Gs=0G_c=G_s=0
target_model.h5Known VsV_s, GcG_c, and GsG_s checkerboards
src_rec_file_forward_RL_PH.csvSynthetic Rayleigh-wave phase observations

Target checkerboard

The target horizontal slices show the 3 × 3 VsV_s checkerboard as the background colors. The overlaid bars show G0G_0 and θ\theta for the independent azimuthal-anisotropy pattern at depths of 2 and 8 km.

Target isotropic velocity and azimuthal-anisotropy checkerboards at depths of 2 and 8 kilometres

Target VsV_s perturbations and azimuthal anisotropy at 2 and 8 km depth.

The vertical section at latitude 24.524.5^\circ shows the two checkerboard layers. The left panel displays the signed VsV_s perturbation, while the right panel displays the non-negative anisotropy magnitude G0G_0.

Vertical sections through the target isotropic velocity and azimuthal-anisotropy checkerboards at latitude 24.5 degrees

Target VsV_s and G0G_0 sections at latitude 24.524.5^\circ.

3. Invert the synthetic observations

After the forward command finishes successfully, run:

mpirun -np 8 ../../bin/SURFATT_tomo -i input_params.yml

The inversion reads the synthetic Rayleigh observations. It rebuilds the unperturbed starting model and attempts to recover the target structure from travel times alone.

For each inversion iteration, SurfATT:

  1. predicts Rayleigh-wave phase travel times from the current model;
  2. calculates residuals relative to the synthetic observations;
  3. computes adjoint sensitivity kernels for VsV_s, GcG_c, and GsG_s;
  4. applies the isotropic and anisotropic smoothing settings from postproc;
  5. uses LBFGS with line search to update the three model parameters; and
  6. records the misfit, current model, gradients, and predicted travel times.

The run stops when iteration reaches niter: 80, when the recent mean-misfit reduction falls below min_derr: 0.0015%, or when the line search can no longer find an acceptable update.

4. Check the inversion products

The main inversion outputs are:

FileDescription
final_model.h5Recovered model containing vs, gc, gs, g0, and theta
model_iter.h5Model and gradient history used to inspect convergence
objective_function.txtTotal misfit, Rayleigh residual statistics, and step length for each iteration
src_rec_file_forward_RL_PH_*.csvRayleigh predictions produced during inversion

The original target_model.h5 remains in OUTPUT_FILES/ for the target-versus-recovery comparison.

Visualization

Open plot_model.ipynb after the inversion to reproduce these figures or inspect other depths and sections.

The recovered horizontal slices preserve the alternating VsV_s pattern and the principal fast-axis orientations. Compared with the target, both the velocity boundaries and the anisotropy bars are smoother because of model regularization and finite path coverage.

Recovered isotropic velocity and azimuthal-anisotropy checkerboards at depths of 2 and 8 kilometres

Recovered VsV_s perturbations and azimuthal anisotropy at 2 and 8 km depth.

The recovered vertical sections retain the two depth layers in both VsV_s and G0G_0. The anisotropy magnitude is more strongly smoothed than the isotropic velocity perturbation, especially near anomaly boundaries.

Vertical sections through the recovered isotropic velocity and azimuthal-anisotropy checkerboards at latitude 24.5 degrees

Recovered VsV_s and G0G_0 sections at latitude 24.524.5^\circ.

For a quantitative assessment, compare target_model.h5 and final_model.h5 using consistent color and bar-length scales. Examine the recovered anomaly polarity, block location, perturbation amplitude, fast-axis direction, and leakage between VsV_s and (Gc,Gs)(G_c,G_s).

Last updated on