Skip to content
Snippets Groups Projects
Commit 406fedff authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add handling of B, N, R^dxd data types in output

parent cbe4d8b8
No related branches found
No related tags found
1 merge request!75Feature/language discretization
...@@ -54,19 +54,29 @@ class NamedItemValue ...@@ -54,19 +54,29 @@ class NamedItemValue
class OutputNamedItemValueSet class OutputNamedItemValueSet
{ {
public: public:
using ItemValueVariant = std::variant<NodeValue<const int>, using ItemValueVariant = std::variant<NodeValue<const bool>,
NodeValue<const int>,
NodeValue<const long int>, NodeValue<const long int>,
NodeValue<const unsigned long int>,
NodeValue<const double>, NodeValue<const double>,
NodeValue<const TinyVector<1, double>>, NodeValue<const TinyVector<1, double>>,
NodeValue<const TinyVector<2, double>>, NodeValue<const TinyVector<2, double>>,
NodeValue<const TinyVector<3, double>>, NodeValue<const TinyVector<3, double>>,
NodeValue<const TinyMatrix<1, double>>,
NodeValue<const TinyMatrix<2, double>>,
NodeValue<const TinyMatrix<3, double>>,
CellValue<const bool>,
CellValue<const int>, CellValue<const int>,
CellValue<const long int>, CellValue<const long int>,
CellValue<const unsigned long int>,
CellValue<const double>, CellValue<const double>,
CellValue<const TinyVector<1, double>>, CellValue<const TinyVector<1, double>>,
CellValue<const TinyVector<2, double>>, CellValue<const TinyVector<2, double>>,
CellValue<const TinyVector<3, double>>>; CellValue<const TinyVector<3, double>>,
CellValue<const TinyMatrix<1, double>>,
CellValue<const TinyMatrix<2, double>>,
CellValue<const TinyMatrix<3, double>>>;
private: private:
std::map<std::string, ItemValueVariant> m_name_itemvariant_map; std::map<std::string, ItemValueVariant> m_name_itemvariant_map;
......
...@@ -47,6 +47,16 @@ VTKWriter::_write_node_pvtu(std::ofstream& os, ...@@ -47,6 +47,16 @@ VTKWriter::_write_node_pvtu(std::ofstream& os,
<< "\"/>\n"; << "\"/>\n";
} }
template <size_t N, typename DataType>
void
VTKWriter::_write_node_pvtu(std::ofstream& os,
const std::string& name,
const NodeValue<const TinyMatrix<N, DataType>>&) const
{
os << "<PDataArray type=\"" << VTKType<DataType>::name << "\" Name=\"" << name << "\" NumberOfComponents=\"" << N * N
<< "\"/>\n";
}
template <typename DataType> template <typename DataType>
void void
VTKWriter::_write_node_pvtu(std::ofstream&, const std::string&, const CellValue<const DataType>&) const VTKWriter::_write_node_pvtu(std::ofstream&, const std::string&, const CellValue<const DataType>&) const
...@@ -69,6 +79,16 @@ VTKWriter::_write_cell_pvtu(std::ofstream& os, ...@@ -69,6 +79,16 @@ VTKWriter::_write_cell_pvtu(std::ofstream& os,
<< "\"/>\n"; << "\"/>\n";
} }
template <size_t N, typename DataType>
void
VTKWriter::_write_cell_pvtu(std::ofstream& os,
const std::string& name,
const CellValue<const TinyMatrix<N, DataType>>&) const
{
os << "<PDataArray type=\"" << VTKType<DataType>::name << "\" Name=\"" << name << "\" NumberOfComponents=\"" << N * N
<< "\"/>\n";
}
template <typename DataType> template <typename DataType>
void void
VTKWriter::_write_cell_pvtu(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const VTKWriter::_write_cell_pvtu(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const
...@@ -152,6 +172,25 @@ VTKWriter::_write_node_value(std::ofstream& os, ...@@ -152,6 +172,25 @@ VTKWriter::_write_node_value(std::ofstream& os,
os << "\n</DataArray>\n"; os << "\n</DataArray>\n";
} }
template <size_t N, typename DataType>
void
VTKWriter::_write_node_value(std::ofstream& os,
const std::string& name,
const NodeValue<const TinyMatrix<N, DataType>>& item_value) const
{
os << "<DataArray type=\"" << VTKType<DataType>::name << "\" Name=\"" << name << "\" NumberOfComponents=\"" << N * N
<< "\">\n";
for (NodeId i = 0; i < item_value.size(); ++i) {
for (size_t j = 0; j < N; ++j) {
for (size_t k = 0; k < N; ++k) {
// The following '+' enforces integer output for char types
os << +item_value[i](j, k) << ' ';
}
}
}
os << "\n</DataArray>\n";
}
template <typename DataType> template <typename DataType>
void void
VTKWriter::_write_node_value(std::ofstream&, const std::string&, const CellValue<const DataType>&) const VTKWriter::_write_node_value(std::ofstream&, const std::string&, const CellValue<const DataType>&) const
...@@ -188,6 +227,25 @@ VTKWriter::_write_cell_value(std::ofstream& os, ...@@ -188,6 +227,25 @@ VTKWriter::_write_cell_value(std::ofstream& os,
os << "\n</DataArray>\n"; os << "\n</DataArray>\n";
} }
template <size_t N, typename DataType>
void
VTKWriter::_write_cell_value(std::ofstream& os,
const std::string& name,
const CellValue<const TinyMatrix<N, DataType>>& item_value) const
{
os << "<DataArray type=\"" << VTKType<DataType>::name << "\" Name=\"" << name << "\" NumberOfComponents=\"" << N * N
<< "\">\n";
for (CellId i = 0; i < item_value.size(); ++i) {
for (size_t j = 0; j < N; ++j) {
for (size_t k = 0; k < N; ++k) {
// The following '+' enforces integer output for char types
os << +item_value[i](j, k) << ' ';
}
}
}
os << "\n</DataArray>\n";
}
template <typename DataType> template <typename DataType>
void void
VTKWriter::_write_cell_value(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const VTKWriter::_write_cell_value(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <output/IWriter.hpp> #include <output/IWriter.hpp>
#include <algebra/TinyMatrix.hpp>
#include <algebra/TinyVector.hpp> #include <algebra/TinyVector.hpp>
#include <output/OutputNamedItemValueSet.hpp> #include <output/OutputNamedItemValueSet.hpp>
...@@ -30,6 +31,11 @@ class VTKWriter : public IWriter ...@@ -30,6 +31,11 @@ class VTKWriter : public IWriter
const std::string& name, const std::string& name,
const NodeValue<const TinyVector<N, DataType>>&) const; const NodeValue<const TinyVector<N, DataType>>&) const;
template <size_t N, typename DataType>
void _write_node_pvtu(std::ofstream& os,
const std::string& name,
const NodeValue<const TinyMatrix<N, DataType>>&) const;
template <typename DataType> template <typename DataType>
void _write_node_pvtu(std::ofstream&, const std::string&, const CellValue<const DataType>&) const; void _write_node_pvtu(std::ofstream&, const std::string&, const CellValue<const DataType>&) const;
...@@ -41,6 +47,11 @@ class VTKWriter : public IWriter ...@@ -41,6 +47,11 @@ class VTKWriter : public IWriter
const std::string& name, const std::string& name,
const CellValue<const TinyVector<N, DataType>>&) const; const CellValue<const TinyVector<N, DataType>>&) const;
template <size_t N, typename DataType>
void _write_cell_pvtu(std::ofstream& os,
const std::string& name,
const CellValue<const TinyMatrix<N, DataType>>&) const;
template <typename DataType> template <typename DataType>
void _write_cell_pvtu(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const; void _write_cell_pvtu(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const;
...@@ -61,6 +72,11 @@ class VTKWriter : public IWriter ...@@ -61,6 +72,11 @@ class VTKWriter : public IWriter
const std::string& name, const std::string& name,
const NodeValue<const TinyVector<N, DataType>>& item_value) const; const NodeValue<const TinyVector<N, DataType>>& item_value) const;
template <size_t N, typename DataType>
void _write_node_value(std::ofstream& os,
const std::string& name,
const NodeValue<const TinyMatrix<N, DataType>>& item_value) const;
template <typename DataType> template <typename DataType>
void _write_node_value(std::ofstream&, const std::string&, const CellValue<const DataType>&) const; void _write_node_value(std::ofstream&, const std::string&, const CellValue<const DataType>&) const;
...@@ -72,6 +88,11 @@ class VTKWriter : public IWriter ...@@ -72,6 +88,11 @@ class VTKWriter : public IWriter
const std::string& name, const std::string& name,
const CellValue<const TinyVector<N, DataType>>& item_value) const; const CellValue<const TinyVector<N, DataType>>& item_value) const;
template <size_t N, typename DataType>
void _write_cell_value(std::ofstream& os,
const std::string& name,
const CellValue<const TinyMatrix<N, DataType>>& item_value) const;
template <typename DataType> template <typename DataType>
void _write_cell_value(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const; void _write_cell_value(std::ofstream&, const std::string&, const NodeValue<const DataType>&) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment