# Post-processing

Let's say you have correctly defined all simulation inputs and successfully performed a simulation run. The last part of your script may look like this:

```
from hamopy.algorithm import calcul
results = calcul(mesh, clim, init, time)
```

Now you want to display and analyse some results, which is why you use this program in the first place.

## Simulation outcome

By default, the main algorithm of hamopy returns a dictionary containing all simulation results and everything one needs to interpret them. Here is a list of all keys and values stored within this dictionary.

`'x'`

: Mesh node coordinates; size:`(N,)`

`'t'`

: All time coordinates of the simulation; size:`(M,)`

`'T'`

: Temperature; size:`(M,N)`

`'PC'`

: Capillary pressure; size:`(M,N)`

`'HR'`

: Relative humidity; size:`(M,N)`

`'PV'`

: Vapor pressure; size:`(M,N)`

All values are numpy arrays. This is for instance how to read the temperature of the i^th node at the j^th time of simulation:

```
results['T'][j,i]
```

As this data is a bit raw, two methods are available to easily extract data at user-defined times and locations without having to directly manipulate elements of the `results`

dictionary.

### evolution()

The `evolution()`

method of the `hamopy.postpro`

module helps extract the temporal evolution of a variable at a specific location.

```
from hamopy.postpro import evolution
import numpy as np
x_out = 0.05
t_out = np.array([0, 60, 120, 180, 240, 300, 360])
T_out = evolution(results, 'T', x_out, t_out)
```

This example returns the evolution of the temperature over time, at the point given by `x_out`

, with the temporal discretisation given by `t_out`

. The function may take 4 input arguments:

- the dictionary of results, provided by the simulation
- a string denoting which variable to extract (it must be one of the keys of
`results`

) - the location of the point (preferably a single value)
- the time scale on which to extract the data (numpy array)

The last argument is optional: if not given, `evolution()`

will take all time coordinates in `results['t']`

(this is not advised if the simulation time step size was adaptative).

### distribution()

The `distribution()`

method of the `hamopy.postpro`

module helps extract the spatial distribution of a variable at a specific time.

```
from hamopy.postpro import distribution
import numpy as np
x_out = np.array([0, 0.02, 0.04, 0.06, 0.08, 0.10])
t_out = 3600
HR_out = distribution(results, 'HR', x_out, t_out)
```

This example returns the distribution of relative humidity, at the time given by `t_out`

, over the spatial discretisation given by `x_out`

. The function may take 4 input arguments:

- the dictionary of results, provided by the simulation
- a string denoting which variable to extract (it must be one of the keys of
`results`

) - the coordinates on which the distribution spans (numpy array)
- the time of the distribution (preferably a single value)

The third argument is optional: if not given, `distribution()`

will take all mesh node coordinates in `results['x']`

.