As a programming language FORTRAN 90 (F90) is practical and uses a reasonably compact notation. Starting from the most general expression does not necessarily mean starting with the most difficult of all cases. As it turns out, the most general case, can be written very simply. Reducing the space dimensionality or reducing ``component'' dimensionality is merely reflected in different loop limits, while the code itself remains the same. In a recent report Muir 1991 implemented a similar idea in F90 with great success.

I was inspired to do this by two things. First Jon Claerbout's programming method for his recent book ``Processing versus Inversion''. It contains a collection of 2D processing subroutines that are used through out the book as building blocks for larger subroutines and programs. When using those I was amazed by the versatility and easy maintainability. Secondly I have written a couple of modeling and migration programs for various types of acoustic and elastic media. Those programs are very similar in in structure and methodology. The aim of this paper is to consolidate those programs into one or more, which all use the same building blocks. Those building blocks can serve as a basis for modeling and migration programs by a linking mechanism. Also, these blocks themselves may be added to or extended with other existing modeling tools. It is my hope that other interested people contribute to this effort. I would like to end up with a minimal set of most functional modeling and migration building blocks which can be arranged with ease to create various state of the art modeling programs, from plain finite differences with exchangeable operators, to spectral methods with Chebychev expansion or any combination of those. It might sound ambitious, but in F90 this is not an impossible task.

11/17/1997