diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp index c2669e95b647f8f57c2ae498d61ed2020504675f..7b1cddd143fcb85876007650080473a5aeee2d30 100644 --- a/src/mesh/SubItemValuePerItem.hpp +++ b/src/mesh/SubItemValuePerItem.hpp @@ -10,15 +10,27 @@ #include <ConnectivityUtils.hpp> template <typename DataType, - ItemType SubItemType, - ItemType ItemType> -class SubItemValuePerItem + ItemType sub_item_type, + ItemType item_type, + typename Allowed=void> +class SubItemValuePerItem; + +template <typename DataType, + ItemType sub_item_type, + ItemType item_type> +class SubItemValuePerItem<DataType, + sub_item_type, + item_type, + std::enable_if_t<sub_item_type != item_type>> { private: ConnectivityMatrix::HostRowType m_host_row_map; Kokkos::View<DataType*> m_values; - friend SubItemValuePerItem<std::add_const_t<DataType>, SubItemType, ItemType>; + // Allows const version to access our data + friend SubItemValuePerItem<std::add_const_t<DataType>, + sub_item_type, + item_type>; public: class SubView @@ -132,7 +144,7 @@ class SubItemValuePerItem template <typename DataType2> KOKKOS_INLINE_FUNCTION SubItemValuePerItem& - operator=(const SubItemValuePerItem<DataType2, SubItemType, ItemType>& sub_item_value_per_item) + operator=(const SubItemValuePerItem<DataType2, sub_item_type, item_type>& sub_item_value_per_item) { // ensures that DataType is the same as source DataType2 static_assert(std::is_same<std::remove_const_t<DataType>, std::remove_const_t<DataType2>>(), @@ -148,7 +160,7 @@ class SubItemValuePerItem template <typename DataType2> KOKKOS_INLINE_FUNCTION - SubItemValuePerItem(const SubItemValuePerItem<DataType2, SubItemType, ItemType>& sub_item_value_per_item) + SubItemValuePerItem(const SubItemValuePerItem<DataType2, sub_item_type, item_type>& sub_item_value_per_item) { this->operator=(sub_item_value_per_item); } @@ -158,7 +170,7 @@ class SubItemValuePerItem SubItemValuePerItem(const IConnectivity& connectivity) { ConnectivityMatrix connectivity_matrix - = connectivity.getMatrix(ItemType,SubItemType); + = connectivity.getMatrix(item_type, sub_item_type); m_host_row_map = connectivity_matrix.rowsMap(); m_values = Kokkos::View<DataType*>("values", connectivity_matrix.numEntries());