This section will cover the basic usage of multi-dimensional Grids. In
order to use the Grid class you need to include the
schnek/grid.hpp header. The Grid class needs to template
arguments. The first argument specifies the type and the second argument
specifies the rank of the grid. Let’s look at the following simple
example.
#include <schnek/grid.hpp>
using namespace schnek;
int main()
{
Grid<double,2> grid;
}
This will create a two-dimensional grid containing double elements.
#include <schnek/grid.hpp>
using namespace schnek;
int main()
{
Grid<double,2> grid(Grid<double,2>::IndexType(5,5));
grid = 1.0;
for (int j=0; j<5; ++j)
grid(j,j) = sqrt(2*j);
}
Let’s go through the example line by line.
Grid<double,2> grid(Grid<double,2>::IndexType(5,5));
This line will create a two dimensional grid of size 5 by 5. To
initialise the size of a Grid you need to pass a two dimensional
index array to the constructor. The type of the index array is given by
the IndexType type definition inside the Grid class. The line
grid = 1.0;
fills all the entries in the Grid with the value 1. To access
individual entries, you can use the overloaded function operator.
for (int j=0; j<5; ++j)
grid(j,j) = sqrt(2*j);
These lines will iterate over the index j and fill the diagonal of
the Grid with a value given by sqrt(2*j) After the loop has
finished the grid will contain the following values.
0 1 1 1 1
1 1.41421 1 1 1
1 1 2 1 1
1 1 1 2.44949 1
1 1 1 1 2.82843
Tip: It is often useful to use typedefs to keep your code
short and readable. The declaration an initialisation in the example
above can be replaced by.
typedef schnek::Grid<double, 2> MyGrid;
typedef MyGrid::IndexType MyIndex;
MyGrid grid(MyIndex(5, 5));
While this introduces more code initially, it will increase readability in the long run. The code for this tutorial can be found here under the heading* Example 1*.