20#include <unordered_map>
22#include <alien/utils/Precomp.h>
24#include "AbstractItemFamily.h"
36: m_parallel_mng(family.m_parallel_mng)
37, m_trace_mng(family.m_trace_mng)
38, m_unique_ids(family.m_unique_ids)
39, m_owners(family.m_owners)
40, m_uid2lid(family.m_uid2lid)
44AbstractItemFamily::AbstractItemFamily(ConstArrayView<Int64> uniqueIds,
45 ConstArrayView<Integer> owners,
46 IMessagePassingMng* parallel_mng,
48: m_parallel_mng(parallel_mng)
49, m_trace_mng(trace_mng)
51 copy(m_unique_ids, uniqueIds);
52 copy(m_owners, owners);
54 for (Integer i = 0; i < uniqueIds.size(); ++i) {
55 m_uid2lid[uniqueIds[i]] = i;
59AbstractItemFamily::AbstractItemFamily(ConstArrayView<Int64> uniqueIds,
60 ConstArrayView<Int64> ghost_uniqueIds,
61 ConstArrayView<Integer> ghost_owners,
62 IMessagePassingMng* parallel_mng,
64: m_parallel_mng(parallel_mng)
65, m_trace_mng(trace_mng)
67 const Integer commRank = m_parallel_mng->commRank();
68 const Integer localSize = uniqueIds.size();
69 const Integer ghostSize = ghost_uniqueIds.size();
71 m_unique_ids.reserve(localSize + ghostSize);
72 m_owners.reserve(localSize + ghostSize);
75 addRange(m_unique_ids, uniqueIds);
76 addRange(m_owners, commRank, localSize);
77 for (Integer ighost = 0; ighost < ghostSize; ++ighost) {
78 addRange(m_unique_ids, ghost_uniqueIds);
79 addRange(m_owners, ghost_owners);
82 for (Integer i = 0; i < uniqueIds.size(); ++i) {
83 m_uid2lid[uniqueIds[i]] = i;
86 for (Integer i = 0; i < ghost_uniqueIds.size(); ++i) {
87 m_uid2lid[ghost_uniqueIds[i]] = localSize + i;
93AbstractItemFamily::AbstractItemFamily(ConstArrayView<Int64> uniqueIds,
94 IMessagePassingMng* parallel_mng, [[maybe_unused]] ITraceMng* trace_mng)
97 m_unique_ids.copy(uniqueIds);
98 m_owners.fill(parallel_mng->commRank());
100 for (Integer i = 0; i < uniqueIds.size(); ++i) {
101 m_uid2lid[uniqueIds[i]] = i;
107void AbstractItemFamily::uniqueIdToLocalId(
108ArrayView<Int32> localIds, ConstArrayView<Int64> uniqueIds)
const
111 for (Integer i = 0; i < uniqueIds.size(); ++i) {
112 auto iter = m_uid2lid.find(uniqueIds[i]);
113 if (iter == m_uid2lid.end()) {
114 throw Alien::FatalErrorException(A_FUNCINFO,
"UniqueId not found");
117 localIds[i] = iter->second;
132AbstractItemFamily::owners(ConstArrayView<Int32> localIds)
const
134 const Integer size = localIds.size();
135 SharedArray<Integer> result(size);
136 for (Integer i = 0; i < size; ++i) {
137 result[i] = m_owners[localIds[i]];
139 return SafeConstArrayView<Integer>(result);
145AbstractItemFamily::uids(ConstArrayView<Int32> localIds)
const
147 const Integer size = localIds.size();
148 SharedArray<Int64> result(size);
149 for (Integer i = 0; i < size; ++i) {
150 result[i] = m_unique_ids[localIds[i]];
152 return SafeConstArrayView<Int64>(result);
160 SharedArray<Int32> local_ids(m_unique_ids.size());
161 for (Integer i = 0; i < m_unique_ids.size(); ++i)
169: m_parallel_mng(family.m_parallel_mng)
170, m_trace_mng(family.m_trace_mng)
171, m_unique_ids(family.m_unique_ids)
172, m_owners(family.m_owners)
173, m_uid2lid(family.m_uid2lid)
177AbstractFamily::AbstractFamily(ConstArrayView<Int64> uniqueIds,
178 ConstArrayView<Integer> owners,
179 IMessagePassingMng* parallel_mng,
180 ITraceMng* trace_mng)
181: m_parallel_mng(parallel_mng)
182, m_trace_mng(trace_mng)
184 copy(m_unique_ids, uniqueIds);
185 copy(m_owners, owners);
187 for (Integer i = 0; i < uniqueIds.size(); ++i) {
188 m_uid2lid[uniqueIds[i]] = i;
192AbstractFamily::AbstractFamily(ConstArrayView<Int64> uniqueIds,
193 ConstArrayView<Int64> ghost_uniqueIds,
194 ConstArrayView<Integer> ghost_owners,
195 IMessagePassingMng* parallel_mng,
196 ITraceMng* trace_mng)
197: m_parallel_mng(parallel_mng)
198, m_trace_mng(trace_mng)
200 const Integer commRank = m_parallel_mng->commRank();
201 const Integer localSize = uniqueIds.size();
202 const Integer ghostSize = ghost_uniqueIds.size();
204 m_unique_ids.reserve(localSize + ghostSize);
205 m_owners.reserve(localSize + ghostSize);
208 addRange(m_unique_ids, uniqueIds);
209 addRange(m_owners, commRank, localSize);
210 for (Integer ighost = 0; ighost < ghostSize; ++ighost) {
211 addRange(m_unique_ids, ghost_uniqueIds);
212 addRange(m_owners, ghost_owners);
215 for (Integer i = 0; i < uniqueIds.size(); ++i) {
216 m_uid2lid[uniqueIds[i]] = i;
219 for (Integer i = 0; i < ghost_uniqueIds.size(); ++i) {
220 m_uid2lid[ghost_uniqueIds[i]] = localSize + i;
226AbstractFamily::AbstractFamily(ConstArrayView<Int64> uniqueIds,
227 IMessagePassingMng* parallel_mng,
228 ITraceMng* trace_mng)
229: m_parallel_mng(parallel_mng)
230, m_trace_mng(trace_mng)
232 copy(m_unique_ids, uniqueIds);
233 m_owners.resize(uniqueIds.size());
234 m_owners.fill(parallel_mng->commRank());
236 for (Integer i = 0; i < uniqueIds.size(); ++i) {
237 m_uid2lid[uniqueIds[i]] = i;
242void AbstractFamily::uniqueIdToLocalId(
243ArrayView<Int32> localIds, ConstArrayView<Int64> uniqueIds)
const
246 for (Integer i = 0; i < uniqueIds.size(); ++i) {
247 auto iter = m_uid2lid.find(uniqueIds[i]);
248 if (iter == m_uid2lid.end()) {
250 throw Alien::FatalErrorException(A_FUNCINFO,
"UniqueId not found");
253 localIds[i] = iter->second;
260AbstractFamily::item(Int32 localId)
const
262 return IIndexManager::IAbstractFamily::Item(m_unique_ids[localId], m_owners[localId]);
267Arccore::SharedArray<Arccore::Integer>
268AbstractFamily::owners(ConstArrayView<Int32> localIds)
const
270 const Integer size = localIds.size();
271 SharedArray<Integer> result(size);
272 for (Integer i = 0; i < size; ++i) {
273 result[i] = m_owners[localIds[i]];
280Arccore::SharedArray<Arccore::Int64>
281AbstractFamily::uids(ConstArrayView<Int32> localIds)
const
283 const Integer size = localIds.size();
284 SharedArray<Int64> result(size);
285 for (Integer i = 0; i < size; ++i) {
286 result[i] = m_unique_ids[localIds[i]];
293Arccore::SharedArray<Arccore::Int32>
296 SharedArray<Int32> local_ids(m_unique_ids.size());
297 for (Integer i = 0; i < m_unique_ids.size(); ++i)
Arccore::SharedArray< Arccore::Int32 > allLocalIds() const override
Retourne l'ensemble des identifiants locaux de la famille.
SafeConstArrayView< Int32 > allLocalIds() const override
Local ids of this family members.
IAbstractFamily::Item item(Int32 localId) const override
Give back an Item from its local id.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --