Moment-tensor Inversion
Computing Green's Functions

Earth Structure Models

The first step in preparing to invert some seismograms is to estimate the first-order velocity structure of the region. You have to try to account for the effects of propagation on the seismograms. In general the influence of Earth structure on the signals decreases with frequency, so the longer the periods that your signal contains the better. All the applications that I have done so far have successfully relied on one-dimensional approximations to regional velocity structure. At times you may not be able to pin down an precise depth, but the moment and mechanism are usually reliable.

For nearby stations (10's to a few hundred km) the short-period P-wave train (T ~ 3-20 s) may be useful, and the intermediate period surface waves (10-50 s). The long-period P wave train is exceedingly tolerant to a fairly wide range of velocity models, but the surface waves are sensitive to structure and results without good azimuthal coverage can depend on the velocity model you choose. For data farther away, only the longer periods are consistent with a simple Earth model, and that bandwidth is dominated by 20-50s Rayleigh and Love waves. You can't really predict how well a model will work beforehand. We had good fortune with a simple model with a surface-wave tomography model containing a few thick layers for distances out to about 500-1000 km in Tibet.

Synthetic Green's Functions for Regional Seismogram Modeling

Important Note: 3/2/00

Make sure that you are using a version of tsynth.f that sets the computation azimuth in the SAC 'user4' header field! It was dropped from a more recent version and will use -12345 nonsense in the correct place. You should move to the code "xtsynth.f" for Green's function conversion.

The moment-tensor inversion codes are independent of the code used to generate the Green's functions. They must be set up for one or two conventions - Langston's fundamental fault responses (VSS, VDS, 45°DS), or Randall's moment-tensor elements. You must have the same conventions for observed seismogram and Green's Function components as well (e.g. vertical is positive up, radial from source to receiver, and transverse to the right when looking in the radial direction).

In the studies that I have been involved in we used George Randall's reflection matrix-method code to compute the synthetic seismograms for individual moment-tensor elements. Program mijkennett can generate moment-tensor couple responses for all moment-tensor elements at up to 10 distances (and 5 source depths within a single layer) in a single run. The moment-tensor responses are computed for one azimuth, but the angle of physical importance is the angle between the fault strike and the station azimuth. The appropriate correction is performed in the inversion (if you use mijinv), or in the program gfcombine which converts Randall's *_mij responses to Langston-style responses (and is used by mtinv, l1mtinv, and srcgrd). For intermediate-to-long-period modeling (T > 10 s) the required computation time is still modest.

Once the Green's functions are calculated, you should run the program marktime to set the SAC header variable "T0 " to the first arrival in the synthetic. marktime is not a fancy ray tracing code - it reads in the same model file as mijkennett and shoots rays to find the minimum travel time, then marks that time in the SAC header. You could pick the synthetic times with SAC, but marktime is more convenient. Once the first arrival is marked in the observed and Green's function responses, you can use the SAC "cut" command to insure that the first arrivals on the seismograms align.

Here's an input file to mijkennett that computes the response for ten distances and a five-layer velocity structure. The parameter "theDEPTH" is changed before the program runs. This file is called "theModel" and used in the c-shell script that follows. You can see a brief description of the input parameters here.

1.  5.00000 2.90 2.50000  200.   100. 1.e4  0.0001  1.e4  0.0001
9.  6.10000 3.52 2.70000  500.   250. 1.e4  0.0001  1.e4  0.0001
10. 6.40000 3.70 2.90000  500.   250. 1.e4  0.0001  1.e4  0.0001
20. 6.70000 3.87 3.00000  500.   250. 1.e4  0.0001  1.e4  0.0001
00. 8.15000 4.70 3.40000  500.   250. 1.e4  0.0001  1.e4  0.0001
0.01  0.025  0.96  0.99  4.
0.0  0.50 0.50 1024
-1.0 30.0
842 782 1346 1413 436 1274 922 1142 694 549

A Script to Prepare Regional Green's Functions

Here's a script to run the reflectivity code, and then convert the Green's functions into Langston's format. First the script changes the input model file to have the specified depth (and calls the modified version "CUS.mod") and then runs the reflectivity code mijkennett, the translation code tsynth which converts the output of mijkennett to SAC files, followed by gfconvert to convert the mij responses to fundamental fault responses at the appropriate azimuths, and then finishes up by running marktime to set the T0 value in the Green's function SAC file headers.

if($#argv < 1)then
  echo "Usage: csh doall.csh depth"
set depth = `echo $1 | awk '{print $1 + 0.01}' ` 
cat theModel | sed "s/theDEPTH/$depth/" >! CUS.mod 
# input file is CUS.mod
mijkennett << echo
# -d for displacement, 1e9 reducing velocity, 0.0 time shift
xtsynth -d <<echo
set h = `echo $depth | awk '{printf "%.1f", $1}' `
# z_????_$h is the base name of the files from tsynth
# ccm, etc. are the station ids for this study
# 1 is the scale factor to apply to the synthetics
gfconvert  z_0842_$h ccm 1
gfconvert  z_0782_$h wci 1
gfconvert  z_1346_$h sspa 1
gfconvert  z_1413_$h cbks 1
gfconvert  z_0436_$h goga 1
gfconvert  z_1274_$h aam 1
gfconvert  z_0922_$h ceh 1
gfconvert  z_1142_$h wmok 1
gfconvert  z_0694_$h miar 1
gfconvert  z_0549_$h wvt 1
# remove the *_mij files
#  the original signals from mijkennett are stored in "mspec"
/bin/rm ?_*_m??
# mark the T0 header variable in the synthetics
#    CUS.mod is the input model name
#    ccm is the basename for the SAC files to be marked
#       i.e. ccm_pz.vds, ccm_pz.vss,...
marktime  CUS.mod ccm
marktime  CUS.mod wci
marktime  CUS.mod sspa
marktime  CUS.mod cbks
marktime  CUS.mod goga
marktime  CUS.mod aam
marktime  CUS.mod ceh
marktime  CUS.mod wmok
marktime  CUS.mod miar
marktime  CUS.mod wvt

This script does a lot of work, and once it's finished, you are almost ready to invert the signals for the best-fitting moment tensor at the specified depth.

I call this script from another with a loop over depth so I take some time to set up one file with a list of station distances and names, and then run a series of scripts that generate Green's functions and perform inversions for a list of depths.

The final SAC files are named: ccm_pz.vss, ccm_pz.vds, ccm_pz.clv, etc. (see the "Input file Format" page) and these are used in the inversion codes. If you use mijinv, you don't need to convert the *_mij files, and you run another version of marktime called markmij (which does the same thing).

Overview | Seismogram Prep | "Green's Functions" | Input File Format
Program Output | References | Back to Ammon's Home

Prepared by: Charles J. Ammon

Made on a Mac