Skip to content

ghfbsd/iasp

Repository files navigation

Buland and Kennett Tau-P

The Buland and Kennett tau-p routines are a suite of programs that calculate seismic wave travel times through a radial earth model specified as velocity as a function of depth. They use the methods described in Buland and Chapman (1983), BSSA 73, 1271-1302 to calculate tables of tau to quickly determine all arrivals at a particular range for an earthquake at a particular depth. The original package provided a command line interface to the tables, and tables for one model, iasp91 by Kennett and Engdahl (1991), GJI 105, 429-465.

The package is useful and versatile, but lacked tables for other wavespeed models and a simple, well-documented subroutine interface to the tables so that programs could take advantage of the rapid calculations the method affords. Consequently, I extended the package to include other earth models, defined a simple subroutine interface to it, and built a configuration-based compilation method that makes the program, subroutines and tables easy to build and install.

The general changes are:

  • do automatic source configuration;
  • remove Fortran language constructs that prevent it from compiling on the GCC Fortran compilers;
  • to write table formats that are self describing (in size) and do not require recompilation of previously-built travel time tables if the table storage size changes;
  • adds additional phases to the set that is computed in the tables, viz. depth phases for ScS and PcP and diffracted phases for PKP branches;
  • adds a subroutine-callable interface to the tables;
  • adds the capability to define models for planets lacking an inner core;
  • adds tables for different models: ek137, iasp91, ak135, fakeprem, fakeprem20s, sp6, kghj, pemc (Earth), and ss97a and r11dw (Mars);
  • adds a routine to extract slowness-range-travel time for each phase;
  • optionally, under configuration control, adds more depth phases and core phases.
                                 TAU
   
   The files in this anonymous FTP implement the travel time computation
algorithm described by Buland and Chapman (1983) in "The Computation of
Seismic Travel Times", BSSA, v. 73, pp. 1271-1302, for the IASPEI phase
set derived from the IASPEI travel-time model developed by Brian Kennett.
This phase set currently includes:  P, Pdiff, PKP, PKiKP, pP, pPdiff,
pPKP, pPKiKP, sP, sPdiff, sPKP, sPKiKP, PP, P'P', S, Sdiff, SKS, pS,
pSdiff, pSKS, sS, sSdiff, sSKS, SS, S'S', PS, PKS, SP, SKP, SKiKP, PcP,
PcS, ScP, ScS, PKKP, PKKS, SKKP, and SKKS.  The IASPEI model was
developed specifically as a replacement for the Jeffreys-Bullen model for
earthquake location work.  It incorporates a PEM core, a lower mantle 
developed by Ken Toy, and an upper mantle constructed by Brian Kennett.
The phase set was chosen by requiring that the phases be well observed in
some distance range and that they be useful either for earthquake
location or for studies of earth structure.

   This implementation of the travel-time algorithm includes all
refracted arrivals of each phase listed, but only the partial
reflections specifically noted in the phase list.  All total internal
reflections (except at the free surface) have been supressed as they are
almost always tertiary arrivals.  This policy does result in no PS and
SP arrivals in the distance range of about 25-50 degrees.  Phase naming
is derived directly from the model layer in which the phase turns and is
sometimes at odds with various seismological conventions.  In particular,
the lack of a low velocity zone in the upper mantle of the IASPEI model
results in Pn and Sn extending out to about 25 degrees.  Even without the
total reflections, the upper mantle discontinuities and triplications
will typically result in two to four P and S arrivals each in the
distance range of about 17-30 degrees.

   The tables are generated by a two step process which involves running
first program REMODL and then program SETBRN.  REMODL generates the
model by calling routines in EMIASP91.F.  In principle any model may be
used.  However, a range of IASPEI models has actually been tested.
REMODL examines the model and its implications, makes up a best guess at
how to sample slowness, and performs all of the raw integrals.  It writes
its results into the REMODL.HED and REMODL.TBL files.  REMODL1.LIS and
REMODL2.LIS show some of what goes on inside of REMODL and are useful
when REMODL is being converted to a different computer.  SETBRN takes the
results of REMODL from (REMODL.HED AND REMODL.TBL) and constructs the
specific branches desired by the user.  While some attempt has been
made to make SETBRN ``programmable'', care must be taken that phases
added are within the assumptions made by the interpolation routines in
LIBTAU.F.  SETBRN produces the tau-p tables IASP91.HED AND IASP91.TBL.
The access to these tables has been cleaned up so that they are quite
machine independent.  SETBRN also produces internal listing files
SETBRN1.LIS, SETBRN2.LIS, and SETBRN3.LIS.  REMODL and SETBRN (and the
routines they call) use the include file LIMITS.INC.  It is assumed that
the include file is in the directory in which compilation is being done.
These programs are linked with the library LIBTAU.A (which should be
constructed from the source in LIBTAU.F).  REMODL and SETBRN also require
machine dependent routines from either LIBVAX.A or LIBSUN.A (which should
be constructed from the source in LIBVAX.F or LIBSUN.F) depending on the
computer being used.  Note that REMODL and SETBRN are not actually needed
to simply invoke the tau-p tables once generated.  They are only used for
setting up the tables the first time.

   To invoke the travel times, a handful of routines also in the LIBTAU
library need to be called.  An example of how this is done is given in
the program TTIMES.  Note that a different include file, TTLIM.INC is
needed.  Playing with the print flags can give you a feeling for what
TTIMES does, but one of them generates a lot of output (into file
TTIM1.LIS).  The tau interpolation is usually only needed for debugging.
However, the range summary can be very useful as it shows the distance
range over which each branch of each phase will appear.  The BRNSET
routine can be used interactively (as in TTIMES) or hardwired for a
specific set of phases.  It allows the user to select only the phases
of immediate interest.  When running TTIMES, note that at each distance,
all possible arrivals from all branches are given in time order.  The
travel-time is given twice (in seconds and in minutes and seconds).  The
numbers at the end of each line are various derivatives (travel-time
with respect to distance, travel-time with respect to depth and the
second derivative of travel-time with respect to distance).

                                           Ray Buland

P.S. UNIX manual pages generated by Brian Kennett are provided in the file 
     TAU.MAN.

LOCAL CHANGES:

   A subroutine called tptt (code: tptt.f; binary tpttsub.o) is available
to return travel time information (time, dt/ddelta, dt/ddepth, ddelta/dp)
from these tables.  See the code for documentation on use.  (G. Helffrich
Carnegie/DTM 28 Aug. 1991)

   Include files limits.inc and libtau.inc were rationalized so that
   dimensioning dependencies were made explicit.  All declarations changed
   to use parameter values set in limits.inc and libtau.inc.
      G. Helffrich/UB 27 Apr. 1993

   libsun and libvax changed to add evget subroutine.
   ttimes changed to take module name from environment variable if asked.
      G. Helffrich/UB 27 Apr. 1993

   emiasp91.f changed to flip data statements, making modification of parts
   of model possible.
      G. Helffrich/UB 5 June 1994
   
   Discontinuity size in remodl.f changed so that these aren't declared where
   the mismatch is minor between velocities.  This causes trouble with the
   iasp91 model and has been returned to its original size.
      G. Helffrich/UB 5 June 1994
   
   Table writing rearranged so that table size can be checked by ttimes.
   This is to ensure that tables that are too large or even a different
   size may be read in correctly by the program.
      G. Helffrich/UB 13 August 1995

   Modified libtau.f so that PKPbc is also diffracted around the inner core.
      G. Helffrich/UB 3 Dec. 1996
   
   Added code to check for table overflows of various sorts in remodl and
   setbrn.  These mostly result in pause statements executed with cryptic
   comments.
      G. Helffrich/UB 20 Mar. 1998
   
   ***WARNING: This is not a backwards-compatible change.  If you make this
   change, you have to either rebuild all your .hed files, or keep an old
   version of ttimes around capable of reading the old table format. ***
   Modified .hed format so that the ttimes program and friends can determine
   whether the table it will read in is too big to fit.  This permits changes
   to the size of built-in tables without having to change previous versions
   of the tables that ttimes reads in.
      G. Helffrich/UB 29 Mar. 1998
   
   Checked for overflow of temporary storage in fitspl (libtau.f).  Will
   stop with an error message if number of branches exceeds bounds.
      G. Helffrich/UB 1 Aug. 1998

   remodl.f: Fixed bug in findrng which caused division by zero if any value
   in the y table was equal to y(i) in inverse iteration.  Basically caused by
   fact that xmax is real*4 and function arguments are real*8 - so you can get
   no change in xmax for a change in its x value.
      G. Helffrich/UB 6 Aug. 2003

   remodl.f: Added pSKP and sSKP to tabulated phases.
      G. Helffrich/UB 20 Aug. 2005

   Makefile:  Tweak to prevent non-fatal build error messages and to install
   with default model in ttimes.
      G. Helffrich/UB 11 Jan. 2006

   Makefile:  Tweak to fix builds on fast machines -- some models skipped.  Fix
   install-all-models and behavior of simple 'install' with no previous models
   built.
      G. Helffrich/UB 3 Dec. 2006

   tptt.f:  New routine tpttsv to return velocities at source.
      G. Helffrich/UB 13 Oct. 2007

   Makefile.in, configure.ac, utils/install-sh, utils/version, ttimes.f:  Make
   configure-driven. (version 2)
      G. Helffrich/UB 21 Apr. 2008

   Makefile.in, configure.ac, utils/config.guess, utils/config.sub: Version 3
      G. Helffrich/UB 3 Jun. 2008
   1) Improve Mac installation defaults to be more intelligent about choosing
      the man page locations.
   2) Add gtt91 man page (not very useful); edit ttimes man page to be
      consistent about name of program.
   3) Add uninstall option (suggested by Arthur Snoke).
   4) Add range in km option (sugg. by Art Snoke) and terse option.
   5) Add take-off option (sugg. by Art Snoke).

   limits.com, setbrn.f, ttimes.f, configure.ac/configure:  Version 4
      G. Helffrich/UB 7 Jun. 2008
   1) Add PcS, sScS, pScS, sPcP, pPcP phases -- increase limits.inc to
      permit.
   2) Include model name in even terse output (suggested by Arthur Snoke).
   3) Eliminate odd configure complaint (reported by Arthur Snoke).
   4) Correct conversion factors for slowness in km; fix output labels.

   Makefile.in:  Version 5
      G. Helffrich/UB 10 Jun. 2008
   1) Create all directories in $(MANDIR) path (reported by Arthur Snoke).

   Makefile.in:  Version 6
      G. Helffrich/UB 21 Jan. 2010
   1) ttimes.1, ttimes91.1 - fix typos, document behavior.
      G. Helffrich/UB 21 Jan. 2010
   2) ttimes.f, libtau.f, libvax.f, setbrn.f, remodl.f:  Eliminate dasign,
      assign, retrns use; use Fortran constructs instead.  Add die() to
      libvax.f
   3) configure.ac, configure:  Add configure options to eliminate depth
      phases and add extra core phases.  Automatic generation of limits.inc
   4) tptt.f:  Document use of subroutine interface to tables better and the
      tpmod and phgen routines.

   Makefile.in:  Version 7
      G. Helffrich/UB 2 Feb. 2010
   1) libtau.f - enlarge temporary branch table, and check for small return
      value array.

   Makefile.in:  Version 8
      G. Helffrich/UB 15 June 2013
   1) libtau.f - lengthen msg variable.
   2) remodl.f, setbrn.f - Allow for planetary models that lack an inner core.
      Many hard-wired offsets into phase name tables and breakpoint tables
      were changed to positions derived from model characteristics.
   3) Add emss97a.f - Mars model of Sohl and Spohn (1997).

   Makefile.in:  Version 9
      G. Helffrich/ELSI 13 June 2017
   1) libtau.f - Sanity check whether tables file exists before trying to read
      it; report if not.
   2) remodl.f, setbrn.f - Allow for planetary models where the core is a low
      velocity zone for both P and S waves.
   3) Add emr11dw.f - Mars model of Rivoldini et al. (2011) with Dreibus and
      Wanke composition.

   Makefile.in:  Version 10
      G. Helffrich/ELSI 09 Apr. 2020
   1) libtau.f - TXTB: New externally callable routine to return slowness,
      range and travel time for specific branch.
   2) emr11dw.f, emss97a.f, emak135.f - Eliminate compilation niggles.
   3) tpttsub.3.in - New file to document subroutine interface to tau-p tables.
   4) ttimes.1.in - New file to document command line interface to tau-p tables.

   Makefile.in:  Version 11
      G. Helffrich/ELSI 17 Nov. 2020
   1) Add ek137 model by Kennett (2020)
   2) ttimes.1.in - Add ek137 to model list.