The detailed theory concerning the partial derivatives is given in surf.pdf. The discussion shows how to use the new program with others contained in PROGRAMS.330/VOLIV/src.
The complete set of scripts for running the programs are given in DIST.tgz. After downloading, unpack using the command:
gunzip -c DISP.tgz | tar xvf -This will create the subdirectory SWKERNELS1/DIST. cd SWKERNELS1/DIST. There are two subdirectories: Q and NOQ which permit one to duplicate the results shown in this tutorial.
Download DIST.tgz.
Then
gunzip -c DIST.tgz | tar xf -You will see the following directory structure:
cd DIST.tgz
SWKERNELS1/
| ----- srfpar96.f
| ----- surf.pdf
| ----- Q/
| | ---- SCMQ.mod
| | ---- disp.d
| | ---- sobs.d
|
| ----- NOQ/
| ---- SCM.mod
| | ---- disp.d
| | ---- sobs.d
The srfpar96.f will be included in the next
distribution of Computer Programs in Seismology. It is
also given here:
Compile this with the command
gfortran -frecord-marker=4 srfpar96.f -o srfpar96
Before running this program, you must have the dispersion file in
surf96 format, the velocity model in model96 format
and the sobs.d control file. These are requires by surf96
which initially reads these using srfpre96.
The sobs.d used in Example 1 below is
4.99999989E-03 4.99999989E-03 0.00000000 4.99999989E-03 0.00000000
1 1 2 2 1 2 2 0 1 0
SCM.mod
disp.d
I usually create this file interactively using srfpre96, which creates sobs.d if it does now exist, or which uses an existing sobs.d. The meaning of the entries on the four lines is as follows:
The first example is in the subdirectory NOQ. In this directory
you will find the following files: sobs.d, SCM.mod and disp.d. Not
the that Q fields in SCM.mod are set to zero. This is
because srfpar96 will compute dispersion for causal Q,
which means that the pahse and group velocities will differ from
purely infinite Q models.
In this example srfker96 will also be run.
srfpre96 Create the control files
srfdis96 Get the phase velocities for the current model
srfdrl96 This must be run first. Get the Love partials and group velocities
srfdrr96 Get the Rayleigh wave partials and merge results with the Love wave results
srfpar96 > srfpar96.txt Output the partial derivatives corresponding to the observed dispersion
srfker96 > srfker96.txt Output kernels for the the model. The entries here will often be greater than the observed dispersion.
Here is the output: srfpar96.txt and srfker96.txt.
An entry of srfpar96.txt for one observation looks like2 2 1 12.0000000 3.50000000 3.14152980 0.358470201 2
5.15833758E-02 -2.00628449E-04
0.755849659 -2.36292444E-02
7.48062041E-03 0.00000000
-0.244638950 -1.38737843E-04
-1.36846924 -1.22778639E-02
dvda - partial of value with respect to P velocity
dvdb - partial of value with respect to S velocity
dvdh - partial of value with respect to layer thickness
dvdqainc - partial of value with respect to inverse Qp
dvdqbinv - partial of value with respect to inverse Qs
The example code in subroutine outputpar always outputs
the five partials. However for love waves the dvda and dvdqainv
will be zeros since love waves are not a function of the
p-wave velocities.
As mentioned the number of partials output can be less than the
number of dispersion points. The dist.d had the following
entry
SURF96 R C X 1 50.0 3.9 0.01
The first higher modes for the model only appear at periods less
than about 15s. Thus this observation at a period of 50s
will not be used for the inversion since the model does not
support it.
Compare the output of the
srfpar96.txt
and
srfker96.txt
to ensure that the srfpar96 output is correct.
An iterative inversion will run through a sequence of models.
Here is how I might approach it.
Have an sobs.d that looks like
4.99999989E-03 4.99999989E-03 0.00000000 4.99999989E-03 0.00000000
1 1 2 2 1 2 2 0 1 0. This will be different for your data set
T.mod
disp.d
Now if the sequence of models is something like 000.mod
cp 000.mod
srfpre96
srfdis96
srfdrl96
srfdrr96
your_modified_srfpar96 > output
your inversion which creates a new model, e.g. out.mod
cp out.mod 001.mod
cp 001.mod T.mod
srfpre96
srfdis96
srfdrl96
srfdrr96
your_modified_srfpar96 > output
your inversion which creates a new model, e.g. out.mod