Proper vtk output of multicomponent fields (i.e. saturation, velocity).

This commit is contained in:
Atgeirr Flø Rasmussen
2012-02-25 22:36:07 +01:00
parent 0e1107f195
commit ccda9308ce

View File

@@ -290,20 +290,17 @@ namespace Opm
for (DataMap::const_iterator dit = data.begin(); dit != data.end(); ++dit) { for (DataMap::const_iterator dit = data.begin(); dit != data.end(); ++dit) {
pm["Name"] = dit->first; pm["Name"] = dit->first;
const std::vector<double>& field = *(dit->second); const std::vector<double>& field = *(dit->second);
// We always print only the first data item for every const int num_comps = field.size()/grid->number_of_cells;
// cell, using 'stride'. pm["NumberOfComponents"] = boost::lexical_cast<std::string>(num_comps);
// This is a hack to get water saturation nicely.
// \TODO: Extend to properly printing vector data.
const int stride = field.size()/grid->number_of_cells;
Tag ptag("DataArray", pm, os); Tag ptag("DataArray", pm, os);
const int num_per_line = 5; const int num_per_line = num_comps == 1 ? 5 : num_comps;
for (int c = 0; c < num_cells; ++c) { for (int item = 0; item < num_cells*num_comps; ++item) {
if (c % num_per_line == 0) { if (item % num_per_line == 0) {
Tag::indent(os); Tag::indent(os);
} }
os << field[stride*c] << ' '; os << field[item] << ' ';
if (c % num_per_line == num_per_line - 1 if (item % num_per_line == num_per_line - 1
|| c == num_cells - 1) { || item == num_cells - 1) {
os << '\n'; os << '\n';
} }
} }