1 #ifndef OMEGA_H_TAG_HPP
2 #define OMEGA_H_TAG_HPP
4 #include <unordered_map>
5 #include <Omega_h_array.hpp>
12 inline void check_tag_name(std::string
const& name) {
13 OMEGA_H_CHECK(!name.empty());
16 enum class ArrayType {
18 SymmetricSquareMatrix,
21 const std::unordered_map<ArrayType, std::string> ArrayTypeNames = {
22 {ArrayType::VectorND,
"VectorND"},
23 {ArrayType::SymmetricSquareMatrix,
"SymmetricSquareMatrix"}
26 const std::unordered_map<std::string, ArrayType> NamesToArrayType = {
27 {
"VectorND", ArrayType::VectorND},
28 {
"SymmetricSquareMatrix", ArrayType::SymmetricSquareMatrix}
33 TagBase(std::string
const& name_in, Int ncomps_in);
34 TagBase(std::string
const& name_in, Int ncomps_in,
LOs class_ids_in);
35 TagBase(std::string
const& name_in, Int ncomps_in, ArrayType array_type_in);
36 TagBase(std::string
const& name_in, Int ncomps_in,
LOs class_ids_in,
37 ArrayType array_type_in);
39 std::string
const& name()
const;
41 virtual Omega_h_Type type()
const = 0;
42 LOs class_ids()
const;
43 ArrayType array_type()
const;
49 ArrayType array_type_ = ArrayType::VectorND;
55 Tag(std::string
const& name_in, Int ncomps_in);
56 Tag(std::string
const& name_in, Int ncomps_in,
LOs class_ids_in);
57 Tag(std::string
const& name_in, Int ncomps_in, ArrayType array_type_in);
58 Tag(std::string
const& name_in, Int ncomps_in,
LOs class_ids_in,
59 ArrayType array_type_in);
61 void set_array(
Read<T> array_in);
62 virtual Omega_h_Type type()
const override;
76 #define OMEGA_H_EXPL_INST_DECL(T) \
77 extern template bool is<T>(TagBase const* t); \
78 extern template Tag<T> const* as<T>(TagBase const* t); \
79 extern template Tag<T>* as<T>(TagBase * t); \
80 extern template class Tag<T>;
81 OMEGA_H_EXPL_INST_DECL(I8)
82 OMEGA_H_EXPL_INST_DECL(I32)
83 OMEGA_H_EXPL_INST_DECL(I64)
84 OMEGA_H_EXPL_INST_DECL(Real)
85 #undef OMEGA_H_EXPL_INST_DECL
Definition: Omega_h_tag.hpp:31
Definition: Omega_h_tag.hpp:53
Definition: amr_mpi_test.cpp:6