Select Git revision
CRSMatrix.hpp
WriterBase.cpp 6.81 KiB
#include <output/WriterBase.hpp>
#include <mesh/IMesh.hpp>
#include <output/OutputNamedItemValueSet.hpp>
#include <scheme/DiscreteFunctionP0.hpp>
#include <scheme/IDiscreteFunction.hpp>
#include <scheme/IDiscreteFunctionDescriptor.hpp>
#include <utils/Exceptions.hpp>
template <size_t Dimension, typename DataType>
void
WriterBase::registerDiscreteFunctionP0(const std::string& name,
const IDiscreteFunction& i_discrete_function,
OutputNamedItemValueSet& named_item_value_set)
{
const DiscreteFunctionP0<Dimension, DataType>& discrete_function =
dynamic_cast<const DiscreteFunctionP0<Dimension, DataType>&>(i_discrete_function);
named_item_value_set.add(NamedItemValue{name, discrete_function.cellValues()});
}
template <size_t Dimension>
void
WriterBase::registerDiscreteFunctionP0(const std::string& name,
const IDiscreteFunction& i_discrete_function,
OutputNamedItemValueSet& named_item_value_set)
{
const ASTNodeDataType& data_type = i_discrete_function.dataType();
switch (data_type) {
case ASTNodeDataType::bool_t: {
registerDiscreteFunctionP0<Dimension, bool>(name, i_discrete_function, named_item_value_set);
break;
}
case ASTNodeDataType::unsigned_int_t: {
registerDiscreteFunctionP0<Dimension, uint64_t>(name, i_discrete_function, named_item_value_set);
break;
}
case ASTNodeDataType::int_t: {
registerDiscreteFunctionP0<Dimension, int64_t>(name, i_discrete_function, named_item_value_set);
break;
}
case ASTNodeDataType::double_t: {
registerDiscreteFunctionP0<Dimension, double>(name, i_discrete_function, named_item_value_set);
break;
}
case ASTNodeDataType::vector_t: {
switch (data_type.dimension()) {
case 1: {
registerDiscreteFunctionP0<Dimension, TinyVector<1, double>>(name, i_discrete_function, named_item_value_set);
break;
}
case 2: {
registerDiscreteFunctionP0<Dimension, TinyVector<2, double>>(name, i_discrete_function, named_item_value_set);
break;
}
case 3: {
registerDiscreteFunctionP0<Dimension, TinyVector<3, double>>(name, i_discrete_function, named_item_value_set);
break;
}
default: {
throw UnexpectedError("invalid vector dimension");
}
}
break;
}
case ASTNodeDataType::matrix_t: {
Assert(data_type.nbRows() == data_type.nbColumns(), "invalid matrix dimensions");
switch (data_type.nbRows()) {
case 1: {
registerDiscreteFunctionP0<Dimension, TinyMatrix<1, double>>(name, i_discrete_function, named_item_value_set);
break;