A simple example of a vector is an array of real numbers. This example is especially interesting since most of the data we encounter in applied sciences can be represented as such an array with regard to a certain basis. However, to represent the vector completely, we need to store its array representation and a definition of its basis.
HCL requires two objects to represent a data element: a vector object and a vector space object. True to its mathematical definition, a HCL vector is able to add another (compatible) vector to itself, to scale itself by a given scalar, and, since it is in a Hilbert space, to compute the inner product between itself and another vector.
A vector also carries a link to a corresponding vector space object. In general, the vector object represents the data by storing it with respect to some basis. The corresponding vector space object carries a representation of this basis. The vector space object can compare two vector objects and decide if they are from the same space (and therefore can be added, for example). The vector space object can also spawn a new vector member.
Additionally, a programmer can combine simple vectors to build more complex ones. The ProductVector, , object contains the Cartesian product of the vector and . Since the ProductVector class is derived from the general vector class, ProductVectors can be used as vectors.
A classic seismic example of a vector is a SEP cube, a set of real values on a regular grid. In HCL, SEP implemented such a SEP cube as a Regular Grid FunctionSchroeder and Schwab (1996) which is derived from the abstract vector class. The function values are stored as a one-dimensional array of real numbers and are accessible through a simple indexing operation. The vector adds another vector by first testing the two corresponding vector spaces for compatibility, and then by adding the corresponding array elements. The vector space object contains a set of axis objects. Each axis contains its offset, its increment, its number of samples, and its unit. The vector space checks its compatibility with another vector space, by comparing their axes.