Getting Started
The following provides a simple example of utilizing a DataBox
.
#include <iostream>
#include <databox.hpp>
using DataBox = Spiner::DataBox<double>;
int main() {
// create a databox
constexpr int NX1 = 2;
constexpr int NX2 = 3;
constexpr int NX3 = 4;
DataBox db(NX3, NX2, NX1);
// fill the databox with the flat index of each element
for (int i = 0; i < db.size(); ++i) {
db(i) = static_cast<double>(i);
}
// set the interpolation ranges to [0,1] or each dimension
for (int d = 0; d < db.rank(); ++d) {
db.setRange(d, 0, 1, db.dim(d));
}
// interpolate
double val = db.interpToReal(0.2, 0.3, 0.4);
// save to file
db.saveHDF("my_data.sp5");
// load a new databox from file
DataBox db2;
db2.loadHDF("my_data.sp5");
// interpolate new databox to the same location
double val2 = db2.itnerpToReal(0.2, 0.3, 0.4);
// print the interpolated values and see they're the same
std::cout << val1 << ", " val2 << ": " << (val1 - val2) << std::endl;
// free the databoxes
free(db);
free(db2);
return 0;
}
For more examples, please consult the test directory.