115 std::vector<int>
const &new_bond_ids,
116 BondListT &bond_list, BondIDT &bond_ids,
117 int total_bond_count) {
118 if (new_bond_list.empty())
121 auto new_data_view =
Kokkos::View<
const int *, Kokkos::HostSpace,
123 new_bond_list.data(), new_bond_list.size());
124 auto new_id_view =
Kokkos::View<
const int *, Kokkos::HostSpace,
126 new_bond_ids.data(), new_bond_ids.size());
128 auto old_count = total_bond_count -
static_cast<int>(new_bond_ids.size());
130 BondListT rebuilt_list(
131 Kokkos::ViewAllocateWithoutInitializing(
"bond_list_rebuild"),
134 Kokkos::ViewAllocateWithoutInitializing(
"bond_id_rebuild"),
138 Kokkos::subview(rebuilt_list, std::make_pair(0, old_count),
140 Kokkos::subview(bond_list, std::make_pair(0, old_count), Kokkos::ALL()));
141 Kokkos::deep_copy(Kokkos::subview(rebuilt_ids, std::make_pair(0, old_count)),
142 Kokkos::subview(bond_ids, std::make_pair(0, old_count)));
144 Kokkos::parallel_for(
145 "copy_bondlist", new_bond_list.size(),
146 [&bond_view = rebuilt_list, old_count, &new_data_view](
auto flat_idx) {
147 constexpr int NCols =
148 BondListT::rank == 2 ? static_cast<int>(BondListT::static_extent(1))
150 auto bond_idx = old_count + static_cast<int>(flat_idx / NCols);
151 auto col_idx = static_cast<int>(flat_idx % NCols);
152 bond_view(bond_idx, col_idx) = new_data_view(flat_idx);
155 Kokkos::parallel_for(
156 "copy_bond_ids", new_bond_ids.size(),
157 [&id_view = rebuilt_ids, old_count, &new_id_view](
auto idx) {
158 id_view(old_count + static_cast<int>(idx)) = new_id_view(idx);
161 bond_list = rebuilt_list;
162 bond_ids = rebuilt_ids;