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.
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.
I am developing some manuals for applications programs I have developed. Here is the current list: