Software Development

C++ libraries:

My research is intimately linked with scientific computing.  As a result I've been involved in a great deal of software development over the years.  This page is aimed to direct you at web pages related to these developments.

Since 2002 most of my work has utilized the C++ language.  I am not an evangelist, but was unquestionably a convert to object oriented programming at that time as all my recent work has utilized object-oriented methods as I judged them appropriate.    Objects are not described well by conventional, linear documentations like Unix man pages, but are more readily documented with hypertext.  The following are hypertext documents of current elements of my C++ library.

 SEISPP  is my SEISmic C++ (PP) library.  It contains API definitions for an extensive list of seismology-oriented data objects.    Some ones worth highlighting are;   TimeSeries,   TimeSeriesEnsemble,   ThreeComponentSeismogram,  and   ThreeComponentEnsemble.   These define a general API for working with seismic data.  All make extensive use (through inheritance) of another, common concept in seismic process:  auxiliary data attributes commonly stored in fixed header fields.  Here I have generalized this concept to a object I call  Metadata.   This object provides methods to access an arbitrary, variable length set of header parameters.  These parameters can be loaded by different methods in constructors for each of the seismic data types.   The library is evolving with more specialized objects that do specific things to seismic data.  Two important recent developments are a generalized stacker defined the  Stack  object and the  MultichannelCorrelator object that generalizes the concept of cross-correlation of an ensemble of single-channel seismogram (TimeSeries objects held in a TimeSeriesEnsemble).

 The one-dimensional interpolator library (INTERPOLATOR1D)  is a procedural library of a collection one-dimensional interpolations routines.  It is intended to easily convert between regular and irregular grids.   There are overloaded functions to take care of different ways of storing vectors of the dependent and independent variables.  The core of this library was blatantly stolen from Igor Mirozov.

The  GCLgrid library is an object-oriented implementation of 2D and 3D georeferenced grids.  I use this library extensively in a plane wave migration code I plan to release when I believe it is stable and in the pmelgrid 3d location program.  It has a lot of other potential applications included a planned development for storing 3D travel time tables.  The concepts behind the algorithm are described in the following recent publication:

Fan, C., G. L. Pavlis, and K. Tuncay (2006).  GCLGRID:  A three-dimensional geographical curvilinear grid library for computational seismology,  Computers in Geosciences, 32, pp. 371-381.

The  dmatrix  library is a lightweight, simple object for working with dense matrices.  There are numerous comparable implementation of this on the web that could be used as alternatives, but I use this one extensively.  It is used, for example, to store data in the  ThreeComponentSeismogram  object as a 3 by Nsample matrix.

Application Program Manuals

I am developing some manuals for applications programs I have developed.  Here is the current list:

Antelope User Group:

I also maintain the  Antelope User Group (AUG) web pages.     All the libraries above have dependencies because the implementations details make extensive use of their software libraries. Go to the CVS web repository for the Antelope User Group to download the SEISPP and related software. Browse the repository and you will find the source code under contrib/lib/seismic/libseispp, contrib/lib/utility/gclgrid, and contrib/lib/utility/processing_engines.