An operator object is a function that accepts an input vector and returns an output vector when its Image() function is invoked. An operator knows about its domain and range, which are vector space objects. Similar to vectors, complex operators can be built from simple ones. The Compound Operator combines two operators so that the output of the first operator is the input to the second. Furthermore, the Block Operator arranges operators into operator matrices. For example, a Bock Operator organizes four operators into an operator matrix
In many cases, the programmer may be able to enhance the operator to compute additional information, such as the adjoint or the derivative of the operator. Since some solvers require such additional information, HCL standardizes the invocations for these additional functions by including additional derived operator classes, such as a linear operator class, or a linear operator with adjoint class.
A classic seismic example of an operator is the NMO process and its adjoint: The NMO operator is linear, and it is fairly easy to implement its adjoint operator. An NMO input vector is a CMP gather. A CMP gather's two axes are offset, h, and two-way traveltime, t. The midpoint coordinates of the CMP gather, and the description of the axes are part of the CMP vector space object. The operator's output vector is a stacked trace. Its axis samples time, .The NMO operator is best defined by its adjoint. The adjoint of the NMO operator spreads an impulse in the stacked trace along a hyperbola in the CMP gather.