During a long career, V. Červený contributed much to
seismic ray theory. The initial impetus was for the determination
of crustal structure from refraction profiles. Initial codes were
for a 2D model with corrections to represent 3D propagation. One
program was named seis81 which is encapsulated in the
Computer Programs in Seismology (Herrmann, 2013) program cseis96.
The techniques are described n a number of publications
(Červený et al, 1977; Červený, 1985; Červený, 2010; Červený
and Pšenčík. 2011).
cseis96 differs from the original seis81 in that
the radiation patterns from point force and moment tensor sources
was corrected and in revised output formats. The
significant difference in making synthetics is that the formtion
of the time series is make by the program cpulse96 after cseis96
is run. The program cprep96 is a front end that
simplifies the preparation input for seis81. However
cseis96 can run more complicated models if the input data
set is created manually. The documentation for this is in PROGRAMS.330/VOLIX/DOC/seis81.txt.
As mentioned, seis81 was developed to interpret
refraction line observations. The codes use asymptotic ray theory
to make synthetics. The implication is that the codes cannot model
phenomena such as the classical refraction or a Rayleigh wave.
This tutorial investigates the use of these codes to make
synthetics that can be used to model teleseismic Pwave receiver
functions which assume a plane wave incident to the base of the
structure.
In the process of testing this use, updates were made on November
1, 2022 to the source codes in PROGRAMS.330/VOLIX/src,
specifically to cprep96, cseis96 and cpulse96.
Changes were made in format statements since the testing required
placing the source at a great depth to be able to approximate an
incident plane wave. The numerical integration to define the ray
path in cseis96 was upgraded to use double precision since
there were significant problems in shooting a ray to a given
receiver position when using very large source depths to
approximate incident plane waves. In addition, changes were made
to cpulse96 to permit a new way to define the time of the
first sample and to restrict the rays contributing to the
seismogram by specifying a range of acceptable ray parametes.
The ray tracing code works by shooting a set of rays through the
structure until a pair is found that bracket the horizontal
position of the receiver. At this point the angle of the ray
leaving the source is refined so that the ray hits the receiver
within a given accuracy. The ray so defined uses Snell's law
locally at each interface. The final step is to account for the
reflection and transmission at each interface and the geometrical
spreading.
The program cpulse96 was initially written assuming that
the source is to the left of the profile and waves propagate to
the right in the +x direction. Thus the RDD, RDS, RSS,. REX,
RVF and RHF Green's functions will be such that the motion
of a P wave incident at the surface will be up on the vertical
component and positive on the radial component or down and
negative if the initial motion is a dilation. As will
be show below, if the source is to the right of the array, then
the horizontal motion will be reversed. Although the
Green's fucntions have 'R' in their name, e.t., REX, the
motions should be interpreted as motions with respect to the
direction of the horizontal xaxis rather as radial with respect
to the source. This means that computation of receiver
functions for observations at distances less than the source
position (e.g., in the negative xdirection), must have the R
Green's function reversed, or if not, then the receiver function
inverted.
For ease of making profiles, the Sac header variables STLA and
EVLA will be undefined, e.g., 12345.0. STLO and EVLO will be the
horizontal positions of the receiver and source. The distance DIST
is defined at STLO  EVLO. Thus for sources to the right (more in
+x direction) representing ways in the negative xdirection, the
distance will be negative. Again this is for use in plotting. The
parameter LCALDA= false int he Sac header so that the distances
are nor recomputed from used int given latitudes and longitudes.
Given these header values, it is possible to use the gsac
commands prs STLO or prs DIST to make record
section profiles. in the examples below for the modeling of
observations above a subduction zone, prs STLO is used.
Since this tutorial is directed toward modeling teleseismic
Pwave receiver functions, only the EX Green's functions will be
used since these only emit P waves at the source.
The scripts for the examples below are contained in the file Cerveny.tgz. Download this file and
unpack using the command
gunzip c Cerveny.tgz  tar xf 
Cerveny /Layer1  /DOIT  /DOPLTNote the names of the subdirectories. These will be the headings of each of the examples given below. Thus if an example has the heading Layerb, then the computational scripts will be in Cerveny/Layerb.
 /DOCLEANUP
 /Layer  /DOIT  /DOPLT
 /DOCLEANUP  ...
Since the objective of this tutorial is to model teleseismic
Pwave receiver functions for observations above a subduction
zone. There are some caveats.
First cseis96 is 2D code. Thus a subduction zone is modeled as an infinitely long 2D structure and the source and receivers are on a line perpendicular to strike. If this were not true, then 3D code would be required. The next limitation is that the receiver function analysis assumes a plane wave incident at the base of the structure while cseis96 uses a point source. If the point source is placed deep enough, then the incident wave field may be assumed to approximate a plane wave. However some experimentation is required to test this assumption.
The following sections consider a suite of models, ranging from a
single layer over a halfspace model to a complex subduction
zone. For the plane layered halfspace models,
the synthetics and receiver functions can be compared to more
exact synthetics derived using the hspec96 and rftn96
codes. The receiver functions computed using hrftn96
can be compared to those obtained by running saciterd with
the horizontal and vertical component synthetics derived
from cseis96.
The user has a choice when trying to model teleseismic waves incident from the right or the left of the structure. One can fi the structure and make separate computations for with sources to the left and the right, or one can have the source to the left, but two models, were are reflections of the other. Some experimentation in defining the source position for receiver function analysis, since one is interested in a certain set of ray parameters from the source (s/km) that reach the station. This will be illustrated in the examples.
in the examples below for the subduction model, the model extends
down to about 300 km, but the source depth is 16000 km. Because of
the different vertical extents, it is acceptable to ignore the
upper structure to define the horizontal offset of the source in
order for a given ray parameter to "hit" the receiver. A simple
program ptoradian is provided to give an acceptable range
of angles that cseis96 should use for efficient
computations.
The program cprep96 prepares the data set for the cseis96
program by creating the file cseis96.dat. The format
of that file is given in PROGRAMS.330/VOLIX/DOC/seis81.txt.
The command line flags are seen by the command cprep96 h
Usage: cprep96 M model [DOP] [DOSV] [DOSH] [DOALL] [DOCONV] [DOREFL] [DOTRAN] [DEBUG] [DENY deny ]
[R reverb] [N maxseg] [HS sourcez] [XS sourcex] d dfile
M model (default none ) Earth model file name
N nseg (default 12 ) Maximum number of ray segments
DOP (default false) Generate P ray description
DOSV (default false) Generate SV ray description
DOSH (default false) Generate SH ray description
DOALL (default false) Generate P, SV, SH ray description
DOCONV (default false) Permit PSV conversions
DOREFL (default false) PSV conversions on reflection
DOTRAN (default false) PSV conversions on transmission
DENY (default none ) file with layer conversion denial
R reverb (default none ) file with maximum number of multiples in layer
HS sourcez(default 0.0 ) source depth
XS sourcex(default 0.0 ) source xcoordinate
d dfile (default none ) distance file
dfile contains one of more lines with following entries
DIST(km) DT(sec) NPTS T0(sec) VRED(km/s)
first time point is T0 + DIST/VRED
VRED=0 means infinite velocity though
? (default none ) this help message
h (default none ) this help message
The importance of the XS sourcex command line flag is
illustrated in Figure 1. This figure shows the ideal ray paths to
each receiver associated with an incident plane wave. Since cseis96
can only use point sources, it is assumed that the point source
(red circle) is at a depth such that the wavefront is effectively
planar. To preserve the ray geometry, the source must be
moved horizontally as the receiver position changes.
The R reverb is useful to reduce the number of rays considered. The format is simple, a list of layer number  bounce pairs, e.g.,
1 3
2 3
3 3
4 1
which means, for example that at most 3 ray segments are
permitted in layer 2. For PSV waves this would permit
8 rays, e.g., PPP, PPS, PSP, PSS, SSS, SSP, SPS and
SPP. If this option is not ste the cprep96 may
generate a lot of rays, perhaps 40,000 for a 4 layer model.
The format for cseis96.dat is given in the
aforementioned seis81.txt. Just before the ray description
there is a line created by cprep96 which reads
1.0000 3.1416 0.0628 3.1416 3.1416 0.0628 3.1416 0.0010
The documentation for this line is
12) One card, quantities that control the basic system of initial
c angles in the twopoint ray tracing,etc.
c dt,amin1,astep1,amax1,amin2,astep2,amax2,ac format(8f10.5)
c dt... time step in the integration of the raytracing
c system. dt should be greater than zero.
c If dt.lt.0.00001, then dt=1.
c amin1,astep1,amax1... determine the system of initial
c angles for primary reflected waves (and possibly
c for other manually generated elementary waves,the
c first element of which strikes the interface situ
c ated below the source)
c amin2,astep2,amax2... determine the system of initial angles
c for the direct waves (and possibly for other manually
c generated elementary waves,the first element of
c which strikes the interface above the source).
c ac... required accuracy of integration of the ray tracing
c system. Recomended values: 0.0001  0.001.
You may wonder why the limits in the example line are π to π and
π to π. The code permits velocity gradients. Thus if velocity
increases with depth and one wanst a ray from the source to a
receiver above the source, the ray will go upward at short
distances and downward for large horizontal distances. The
range given here covers all possibilities. However examining all
possibilities is time consuming. For the purpose of modeling
teleseismic P waves, this line will be changed to make the
computations more efficient
Following this is the ray description for each ray
0 2 2 1which represent the rays P_{2}P_{1}, S_{2}P_{1}, P_{2}S_{1} and S_{2}S_{1}, respectively. In this notation the 0 indicates that an acceptable ray can go up or down from the source, the initial 2 says that there are two ray segments, which is followed by a layer number and whether the ray of P (positive) or S (negative).
0 2 2 1
0 2 2 1
0 2 2 1
The next program that is executed is cseis96. Its command
lines are obtained by executing cseis96 h which gives
Usage cseis96 [v] [P] [?] [h]
v (default false) verbose output
R (default false) generate file for CRAY96
? (default false) this help screen
h (default false) this help screen
The output of this program consists of the file cseis96.amp which
is used by cpulse96 and cseis96.trc if cseis96
R flag is run. The cseis96.try is
used by cray96.
The program cray96 plots the structure and the
individual rays, with colors indicating P or S segments.
This requires the use of the R flag with cseis96.
As will be seen below, such a plot can be very complicated, and it
is recommended that only one receiver position be considered. This
used the output contained in the file cseis96.trc, whh can
be very largeThe command line defines the boundaries for the plot.
Usage: cray96 XMIN xmin XMAX xmax ZMIN zmin ZMAX zmax vThis program is very informative if there is only one distance plotted. If there are many distances, then one will get a idea of the range of ray paths that reach the stations.
XMIN [xmin] (default 0) : Minimum X for plot
XMAX [xmax] (default=400.0) : Maximum X for plot
ZMIN [zmin] (default=0.0) : Minimum Z for plot
ZMAX [zmax] (default = 50.0) : Maximum Z for plot
v (default = false) : verbose output
? (default = false) : This help screen
h (default = false) : This help screen
Finally the program cpulse96 uses the cseis96.amp file
created by cseis96 to make the synthetics. The
command line options of this program are seen by executing the
command
cpulse96 h. The output of this program the in the ASCII file96
format which can be converted to Sac files using f96tosac B.
USAGE: cpulse96 [ v ] [ t o p i ] a alpha l L [ D V A] [F rfile ] [ m mult] [ OD OV OA ] [Z]
[Q] [DELAY delay [EQEX EXF ALL] [ PMIN pmin PMAX pmax ] [?] [h]
v Verbose output
t Triangular pulse of base 2 L dt
p Parabolic Pulse of base 4 L dt
l L (default 1 )duration control parameter
D Output is ground displacment
V Output is ground velocity (default)
A Output is ground acceleration
F rfile User supplied pulse
m mult Multiplier (default 1.0)
OD Output is ground displacement
OV Output is ground velocity
OA Output is ground acceleration
Q (default false) do causal Q
DELAY delay (default use t=t0+x/vred for first sample,
else use delay seconds before the first arrival
EXF (default) Explosion/point force green functions
EQEX Earthquake and double couple green functions
ALL Earthquake, Explosion and Point Force
Z (default false) zero phase triangular/parabolic pulse
PMIN pmin PMAX pmax
If pmin and pmax have the same sign, then rays
with ray parameter pmin<= p <=pmax are used.
A positive sign means a ray from source
propagates in the +x direction, and a negative
in the x direction
? Write this help message
h Write this help message
As mentioned above, the trace header fields have LCALDA=false, STLA=12345, STLO=12345, STLO= station xcoordinate, EVLO= station xcoordinate. Thus one can plot a record section of receiver positions in gsac using the command prs stlo .
The code update of November 1, 2022 added the DELAY delay and PMIN pmin PMAX pmax command line flags. The reason for the DELAY delay is as follows. The specification of desired horizontal distances in the dfile used by cprep96 consists of lines containing the following
DIST(km) DT(sec) NPTS T0(sec) VRED(km/s)an example of which is
first time point is T0 + DIST/VRED
00.0 0.125 1024 10.0 6.0For the emulation of the teleseismic arrival, which will be approximated by placing the point source at a large depth, one would have to manually change the TO so some large value and have VRED= 0.0. The DELAY delay option says to start the synthetics delay seconds before the first arrival.
10.0 0.125 1024 10.0 6.0
20.0 0.125 1024 10.0 6.0
model.dThis output does not have any information about the ray identified by the ray number. That information is contained in the file cseis96.dat,.
10
0.00000 200.00000 0.00000 10.00000 Source is at (0,200)
0.1000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01 Distance 1
0.2000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01 Distance 2 0.3000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.4000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.5000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.6000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.7000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.8000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.9000E+02 0.1250E+00 1024 0.1000E+01 0.6000E+01
0.1000E+03 0.1250E+00 1024 0.1000E+01 0.6000E+01
1 10 0.3727E+02 0.4561E02 0.7823E02 0.3142E+01 0.0000E+000.1107E+01 1 0.2800E+01 0.6000E+01 0.0000E+00 0.2800E+01 0.6000E+01
1 9 0.3655E+02 0.4284E02 0.8160E02 0.3142E+01 0.0000E+000.1148E+01 1 0.2800E+01 0.6000E+01 0.0000E+00 0.2800E+01 0.6000E+01
1 8 0.3590E+02 0.3963E02 0.8487E02 0.3142E+01 0.0000E+000.1190E+01 1 0.2800E+01 0.6000E+01 0.0000E+00 0.2800E+01 0.6000E+01
The output here are
ray number  ray one
distance number  10 means here means the 10'th distance entry, which is 100 km here
horizontal amplitude  these are used to make the synthetic
vertical amplitude
horizontal phase
vertical phase
pnew  For the first entry this is 1.107 radians, or and angle of 63.44 degrees measured upward
from the horizontal. This is equivalent to an incident angle of 90  64.44 = 25.56 degrees (true is 26.56)
There is a rounding error in the presentation of 0.1107E+01. mwave 1 means ray leaves the source as P
ros Source density is 2.8 gm/cm^{3}
vels Velocity of ray type, e.g., P, at source is 6.00 km/s
sumtq
rsrf Density at receiver 2.8 gm/cm^{3} vsrf Velocity at receiver to this ray is 6.00 km/s
saciterd FN 0010002000.REX FD 0010002000.ZEX RAYP 0.0745 D 10 ALP 1.0which creates the Sac file decon.out. Also compute the theoretical using hrftn96 with the command
hrftn96 M model.d NSAMP 1024 DT 0.125 ALP 1.0 P RAYP 0.0745 D 10
(cd Layer1; DOIT;DOPLT;DOCLEANUP)
(cd Layer2;DOIT; DOPLT;DOCLEANUP)
(cd Layer3;DOIT; DOPLT;DOCLEANUP)
(cd NsubductionReverbF/;DOIT;DOPLT;DOSACITERD;DOREC)
(cd NsubductionReverbR/;DOIT;DOPLT;DOSACITERD;DOREC)
(cd DOCMPRFTN;DOCMP)
This discusses running the code and also addresses the ability of
this ray tracing code to approximate incident plane waves.
Everything is in Layer1
Here the ability to filter rays by ray parameter is done by
modifying the cseis96.dat file.
Everything is in Layer2
Compared to the Layer3 example, these computations are faster since only a few rays are computed. In the Layer3 example, all rays are computed using cseis96 and the results are filtered.
Here the ability to filter rays by ray parameter is done by the
command line of cpulse96.
Everything is in Layer3
The initial test model is based on the image image from https://www.chegg.com/homeworkhelp/questionsandanswers/figure56generalizedeastwestprofilecenternazcaplateeasternsideandesmountainshoq52257549
. The model used here is shown in the next figureThe layer boundaries use a simple format that is described in the tutorial at PROGRAMS.330/DOC/OVERVIEW.pdf/cps330o.pdf. Thus the layering consists of linear segments.
NOTE: This is not a restriction of cseis96. The layering can be specified to be smoother by uaing cubic splines  see the documantation at PROGRAMS.330/VOLIX/DOC/seis81.txt.
To create synthetics to emulate teleseismic arrivals and for computational efficiency, the processing scripts will select a target xcoordinate, x_{rec}, for the station. It will then be neceasary to specifiy the source location, e.g., (x_{src}, z_{src}) where the z_{src} is much larger than the structure thickness. In this case a simple approximation is that the horizontal offset from the source will be x_{offset} =z_{src} tan ( p V) where p is the ray parameter of the teleseismic arrival and V is the Pvelocity at the source depth. If the ray is propagating in the +x direction, then x_{src} = x_{rec}  x_{offset}. If the ray is propagating in the x direction, e.g., a reverse profile, then x_{src} = x_{rec} + x_{offset}.
To facilitate the specification of the range of acceptable angles for the Cerveny code, a simple Fortran program was written. If the source depth or velocity change, just modify in the definitions at the beginning of the code. The code, ptoradian.f , compilation and output are as follow:
program ptoradian c c This program considers at range of teleseismic c ray parameters typically observed. It then c converts the ray parameters to angles in radians c for use with the Cerveny code. In addiiton c it gives the horizontal offset for a given source c depth. c c It is assumed tha tht source depth is much greater than c the thickness of the structure being modeled. c c define the velocity of the P wave at c the source depth c vel=8.5 c c define the source depth deemed sufficient for a planewave c approximation c depth = 16000.0 call bdoit(0.045,0.055,vel,depth,.true.) call bdoit(0.055,0.065,vel,depth,.false.) call bdoit(0.065,0.075,vel,depth,.false.) end subroutine bdoit(plow,phgh,vel,depth,lprinthead) real plow, phgh, vel, depth logical lprinthead real anglow, anghgh, angmid, thetamid real xoff real pi2 if(lprinthead)then write(6,1)depth,vel endif 1 format(' Mapping of ray parameter range to horizontal offset ', 1'and ray angles in radians'/ 2' for source depth of',f10.2,' and velocity of ',f10.3,' km/s'/ 3' p range (s/km) Theta Xoffset Forward Rays (+x) ', 4' Reverse Rays (x)') pi2 = 3.1415927/2.0 call getang(plow,vel,anglow) call getang(phgh,vel,anghgh) angmid = 0.5*(anghgh + anglow) thetamid = angmid * 180.0 / 3.1415927 c c the horizontal offset is x=depth*tan(angmid) c xoff = depth*tan(angmid) c c get the angles in radians for the forward and reverse c profiles c The Cerveny code measures angles with respect to the c horizontal. Upward rays are negative. c Rays in the +x direction, the forward direction, will c have angles in the range [0, pi/2]. c Rays in the x direction, the reverse direction, will c have angles oin the range [pi/2, pi] c flow = pi2 + anghgh fhgh = pi2 + anglow rlow = pi2  anglow rhgh = pi2  anghgh write(6,2)plow,phgh,thetamid,xoff,flow,fhgh,rlow,rhgh 2 format('[',f6.3,' to',f6.3,']',f7.3,f10.3,5x, 1 2('[',f10.4,' to',f10.4,']',5x)) return end subroutine getang(p,vel,ang) real p, vel, ang real pi2 pi2 = 3.1415927/2.0 ang = asin(p*vel) return end
gfortran ptoradian.f a.out Mapping of ray parameter range to horizontal offset and ray angles in radians for source depth of 16000.00 and velocity of 8.500 km/s p range (s/km) Theta Xoffset Forward Rays (+x) Reverse Rays (x) [ 0.045 to 0.055] 25.180 7522.338 [ 1.0843 to 1.1783] [ 1.9633 to 2.0573] [ 0.055 to 0.065] 30.705 9502.150 [ 0.9854 to 1.0843] [ 2.0573 to 2.1562] [ 0.065 to 0.075] 36.572 11870.596 [ 0.8795 to 0.9854] [ 2.1562 to 2.2620]
In the examples that follow, the 0.0550.065 range of ray
parameter is considered.
By default cprep96 will compute all ray conversions, which
will create a huge number of rays. The R reverb option to
cprep96 is used to restrict the number of boundings in the
layers of the model to 3,3,1 and 1, respectively. the 3
means that ion a given leyer, PPP, PPS, PSP, PSS, SSS, SSP, SPP
and SPP are considered, which should be sufficient for this study.
The following tutorials consider wave propagation with receiver
positions from 50 to 8000 km along the surface of the model above.
At 800 km, for the the forward model, the way interaction should
approximate what would be expected for a single layer over a
halfspace, which can be compared to the output of hrftn96
to test the code. This is why cseis96 computations were
extended to double precision when computing the ray from the
soruce to the receiver.
The synthetics for a forward profile are computed. In addition saciterd
is created to make a pwave receiver function profile as a
function of the station longitude. Everything is in Forward
profile
The synthetics for a forward profile are computed. In addition saciterd
is created to make a pwave receiver function profile as a
function of the Everything is in Reversed
profile
As expected the synthetics and receiver function show the effect
of the 2D structure. It us useful to compare the RFTN plots
sidebyside:


The traces look different in the 0  200 km range for the
station position. For this reversed profile one sees the arrivals
trapped within the wedge. The only disturbing feature is the shape
of the receiver function at about 20 sec after the first "bump".
To understand the difference, the following figure compares the
receiver functions generated by hrftn96 for the simple
singlelayer over a halfspace (Simple.sac) and for a five layer
flat model (Layered.sac) corresponding to the flat subduction
structure at the right of the model. Finally the receiver
functions corresponding to the 2D forward model at receiver
position 600 km are given in Forward600.sac while Reverse600.sac
is for the reversed profile. In performing this comparison the
reverse profile receiver function were multiplied by (1) for
comparison, thus converting modtion in the (x) direction to
radial with respect to the source.
Additional model studies can be performed. These synthetics show structural features well because of the small number of layers and the sharp velocity contrasts. If there are gradients, then features will become less obvious.
Charles Langston has a paper in the Bulletin, Seismological
Society of America in 1977 on receiver functions in the Pacific
Northwest of the U.S. This may be a good early reference.
Červený, V., I. A. Molotkov, and I. Pšenčík, 1977, Ray Method in Seismology. Praha: Universita Karlova.
Červený, V. (1985). Seismic Ray Theory, DOI:
10.1007/0387307524_134
Červený, V. (2010). Seismic Ray Theory, Cambridge University
Press,
https://doi.org/10.1017/CBO9780511529399
Červený, V. and I. Pšenčík (2011). Seismic ray theory, http://sw3d.cz/papers.bin/r20vc1.pdf, 24pp.
Herrmann, R. B. (2013) Computer programs in seismology: An
evolving tool for instruction and research, Seism. Res. Lettr. 84,
10811088, doi:10.1785/0220110096
Langston, C. A. (1977). The effect of planar dipping structure on
source and receiver responses for a constant ray parameter, Bull.
Seism. Soc. Am. 67, 10291050, https://doi.org/10.1785/BSSA0670041029