Chapter IV.1. Introduction

Since most of the data that we deal with in our scientific applications consists in collections of numbers indexed by one or several variables, it is natural to organize them in multidimensional array containers. Nowadays, there exists many nice C++ array libraries. A few of them even handle distributed memory parallelism quite neatly (FreePOOMA for example). Others, like Boost.MultiArray or Blitz++, emphasis array traversal using iterators in the spirit of the STL. However none of them completely fulfill what I needed when starting to develop KW.

For that reason I thought it would be worthwhile and quite easy to develop a yet another new array library. Right now it is called the "spectral array library" (SAL) for lack of a better name.

The main idea is that we are not going to need one particular element in an array, but rather sequences or subsequences of elements in specific orders. To achieve that the design has complementary concepts of "geometries" and "selectors". A selector is a particular way to access the elements contained in an array, and a geometry describes how the elements are stored in memory.