If you want to read custom user data, let's say to read a couple of check point for your time loop from file, here is some recipes of how to achieve that with simple helpers available in DuMu<sup>x</sup>.
## Read an array of numbers
If you have a simple text file containing a list of numbers
```
0.1
0.2
0.3
0.4
```
You can read these numbers into a `std::vector<double>` like this
The file extension is arbitrary. The container type `std::vector<>` needs to support `begin()`, `end()`, and `push_back()`. It has to have an alias `value_type` (the type of the element, here `double`) and this type needs to have an overloaded `operator>>` to be constructible from an input stream. With similar code you can also multi-column data like this
```
0.1 0.2 0.3
0.1 0.4 0.5
```
for example into a `std::vector<Dune::FieldVector<float, 3>>`
You can read config data (key-value data) using the `Dune::ParameterTreeParser`. This is the same type of file we use for DuMu<sup>x</sup>`input` files. Given a config file like this
```ini
[MyData]
InjectionRate=0.1 0.2 0.3 0.4
BoundaryFlags=3 4 5 6
[Problem]
EnableGravity=false
```
the data can be read into a `Dune::ParameterTree` like this
[XML (Extensible Markup Language)](https://en.wikipedia.org/wiki/XML) is a very flexible structured data format. You can read and write XML files using the [TinyXML-2](http://www.grinninglizard.com/tinyxml2/) library contained in DuMu<sup>x</sup>. For example, given an XML file like this