The guiding principle of GOON is to take advantage of two modern computer languages, C++ and F90, and build a flexible and efficient system for testing geophysical inversion ideas. In GOON, C++ and F90 have two distinct and complementary roles. The main program and the solvers are adopted from HCL and are written in C++. C++ is used to assemble complex geophysical operators from simpler ones, by creating operator matrices and operator chains, and to pass these composite operators to a solver module. F90 is used for efficient and unambiguous coding of geophysical operators.

The lack of standardization of the interface to pass complex data structures between C++ and F90 is a major obstacle when binding C++ with F90 modules. GOON overcomes this difficulty by strictly separating the part of the system (written in F90) that operates on the data, from the part of the system (written in C++) that orchestrates the computations by manipulating pointers to F90 data structures. The complete separation between the brains (C++) and the brawn (F90) is facilitated by taking full advantage of the HCL abstract formulation of inverse problems as relating vectors belonging to Hilbert spaces. In HCL the data and the model are instances of vectors belonging to two, possibly coincident, Hilbert spaces. For a seismic data set the vector space is defined by the trace geometry (coordinates), and the data values (ordinates) identify individual vectors belonging to the space. All the operations performed by the solver on the data and model vectors can be expressed as vector functions, that can be easily coded in F90 and made accessible to the C++ solvers as library functions. Therefore, the C++ modules never need direct access to the data and model vectors.

In addition to enable a natural split between the C++ and the F90 modules, the Hilbert space abstraction makes the inversion system independent from the particular representation of the Hilbert vectors and thus it facilitates adding support for new data or model representations. At present, GOON supports both vectors representing regularly sampled data sets (Regular Gridded Functions or RGF) Schroeder and Schwab (1996) and irregularly sampled data sets (Irregular Gridded Functions or IGF) Urdaneta and Karrenbach (1996). To support a new data or model representation (e.g. layer-based velocity function) we would not need to modify the system, but only to add a new vector library for the new data type. For example, we plan to generalize the present RGF and IGF vector types to out-of-core vectors and apply inversion theory to realistic-scale 3-D problems. To add this new functionality, we will need only to add to the vector libraries the appropriate I/O calls, while leaving the main part of the system unchanged.

The GOON project is multi-faced and the software is still in the phase of early development. In this report several papers present different aspects of the GOON project; some of the papers are more tightly related to GOON than others, but all the projects have contributed in furthering SEP's understanding of inversion theory, and its effective implementation using modern computer languages. A brief guide to these papers is:

- Introduction to HCL by Hector Urdaneta and Matt Schwab 1996.
- Regular gridded function (RGF) in HCL by Joel Schroeder and and Matt Schwab (Convolution, Prediction error Filter, missing Data, linear and non-linear Solver, F77 operator wrapper) 1996.
- Irregular gridded function (IGF) in HCL by Martin Karrenbach and Hector Urdaneta 1996.
- Object-oriented F90 library for Seplib90 data sets by Bob Clapp and Sean Crawley 1996.
- Example of geophysical operator (NMO) in F90 1996.

11/11/1997