CHECK THE PAGE NUMBERS FOR CLOP INCLUSION Every few years brings a new computer language. Yet most scientific and engineering computing continues to be done in Fortran, a language that has hardly changed since 1977. Here we explore the hypothesis that a new language, C++, is a worthwhile alternative to Fortran. C++ is based on the C language. The C language has made remarkable strides in the last several years. Formerly, Fortran was the language that was available on most machines and it had the fewest variations from one machine to another. Today, C replaces Fortran in both universality and uniformity. Now more young engineers and scientists learn C than any other language. C overcomes the memory-allocation limitation of Fortran, and offers new features such as data structures and scope. ...
Elementary Science Operators
(ps 77K) , (src 786K)
by Matthias Schwab
elementary Many calculations we do in Geophysics, as well as in other disciplines of science and engineering, are linear operations and can be expressed as matrix multiplications. Many practitioners do not think of these calculations as linear operations or matrix multiplications, since these operators are usually derived and programmed as efficient special purpose programs, instead as a general matrix multiplication. In this chapter, we show the object oriented implementation of some elementary operators and their adjoints. We start by discussing the obviously linear matrix multiplication operator and consequently look at increasingly more complex operators. indent operator.operator.operator.oper conjugate.conjugate.conjugate multiply matrix multiply padding integration integration (moveout) ...
Base and Building Block Operators
(ps 153K) , (src 286K)
by Lisa Laane
This chapter is an introduction to the basic framework and building blocks of operators. It serves as an overview for programmers intending to apply already existing operators or to combine them to form new operators. Using and understanding operators is discussed in chapter underst . This document assumes a working knowledge of the C++ programming language, in particular the concepts of inheritance, class and construction. BASIC OPERATOR HIERARCHY Operators are arranged in the form of an inheritance hierarchy. This design eliminates the need to repeate code and simplifies the writing of new operators. At the top of the hierarchy are base classes which provide useful functions for derived operators and allow code to be written for abstract operators. New operators may be derived from any point in the hierarchy. Figure graph depicts the dependencies between the operators discussed in this chapter. graph width=6in . Graph of dependencies. Class relationships are depicted according to the Booch Method: a derived class points to its parent class with a single ...
Solving least-squares inverse problems
(ps 23K) , (src 9K)
by Dave Nichols
> The adjoint operator does not recover the input to the forward operator unless the operator happens to be unitary. If we want a better reconstruction than that given by the adjoint, we must use some form of inverse operator. Given a data vector and an operator , we wish to find a model such that . If the operator , is a matrix we could solve the problem in the following way, A x = y A ' A x = A ' y x = ( A ' A ) -1 A ' y eqnarray* If is not represented as a matrix but it is implemented as an operator we can still solve this problem but we need another operator that is the ``inverse'' to , i.e. for any we require an operator ...
Derived moveout operators
(ps 674K) , (src 639K)
by Dave Nichols, Martin Karrenbach, Hector Urdaneta
Moveout In this chapter we describe the implementation of various types of moveout operations, based on the general moveout operator introduced in elementary moveout . We will see that the coding task is fairly simple, since all we have to do is define our specific moveout operator as a class derived from the general moveout fopMO class (see page elementary+fopmo.h ), so that it will inherit all its properties. The virtual function, float fopMO::mapping() , creates a dynamic binding between the two classes, telling the general moveout how to perform the squeezing/stretching operation. We will discuss in the next sections the linear moveout operator, the normal moveout, the anelliptic moveout and the Kirchhoff moveout. Figure mapping shows an inheritance sketch of these three classes and its respective mapping equations. Arrows indicate derivation. mapping . Graph of dependencies and definition of the mapping equations. paper paper paper paper ...
(ps 1479K) , (src 1629K)
by Hector Urdaneta
stacking Many geophysical algorithms can be cast in the form of a summation over some trajectory in a 2-D space. Familiar examples are NMO-stack, Kirchhoff migration and LMO-stack. In an earlier chapter Moveout we defined moveout operators that performed NMO, LMO etc. All that we need to implement the desired algorithms is to combine these moveout operators with a stacking operator that sums over one dimension. For example NMO-stack is NMO followed by summation over the offset dimension. In our C++ classes all of these stacking operators can be coded using a chain of a moveout operator and a stacking operator fopStack (see man page opstack.txt ). There is no ``official'' definition of which operator of an operator pair is the operator itself and which is the adjoint. We like to think of the modeling operation itself as the operator. In this ...
(ps 66K) , (src 208K)
by Hyang-Im Oh, Matthias Schwab
mis paper paper ...
Appendix: Man Pages
(ps 46K) , (src 104K)
Manapp subsection 1 Axis Axislist converter datastore op opadjoint oparray opchain opdiagarray opdiagonal opdiagscale opdotprod opempty operator opinter opmask opmatmul opmerge opone oponepatch oponepatch3 oppad oppatch oppatch3 opscale opshift opstack opunpatch opunpatch3 sepaxis sepcube sepdata sepinfo sepinput sepoutput sepplane space spacearray ...