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.