# Grid Basics

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 `typedef`s 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.