previous up next print clean
Next: UNIVERSAL DOT-PRODUCT ROUTINE Up: Fomel & Claerbout: F90 Previous: Fomel & Claerbout: F90

Introduction

A linear operator maps an input vector to an output vector. In the adjoint mode, the mapping direction is reverse. The simplest implementation of this idea is a minimal interface operator( adj, add, model, data), where the logical variable adj defines adjoint or forward mode, and variable add defines whether the output of the program should be added to the previous value of the corresponding actual argument. The minimal interface is the ``mathematical'' connection to operators as objects. To provide the ``geophysical'' connection, we need to initialize an operator with the arguments that construct it. Unlike object-oriented languages, such as C++, Fortran 90 doesn't have a built-in mechanism for constructing the objects. It provides, however, a secure way for encapsulating the construction variables in modules.

This paper shows some examples of translating Fortran 77 operator subroutines to Fortran 90 operator modules. In all the examples, both the model and the data vectors are represented in the minimal interface as one-dimensional real-number arrays. In geophysical data processing, such arrays can correspond to data traces, sampled in time. The array data type is naturally embedded in Fortran 90, which allows us to use a lot of intrinsic constructs. However, the general idea of minimal interfaces applies equally well to more complicated data structures.

The first natural use of the minimal interface is a generic dot-product routine, testing whether an adjoint operator complies with its formal definition. The second use, not covered in this paper, is a generic framework for estimating the solutions of inverse problems with methods of mathematical optimization.


previous up next print clean
Next: UNIVERSAL DOT-PRODUCT ROUTINE Up: Fomel & Claerbout: F90 Previous: Fomel & Claerbout: F90
Stanford Exploration Project
11/11/1997