Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DynamicMeshKindInfos.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* DynamicMeshKindInfos.h (C) 2000-2024 */
9/* */
10/* Infos de maillage pour un genre d'entité donnée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_DYNAMICMESHKINDINFOS_H
13#define ARCANE_MESH_DYNAMICMESHKINDINFOS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Array.h"
18#include "arcane/utils/String.h"
19#include "arcane/utils/HashTableMap.h"
20#include "arcane/utils/TraceAccessor.h"
21
22#include "arcane/core/ItemGroup.h"
23#include "arcane/core/ItemInternal.h"
25
26#include "arcane/mesh/ItemInternalMap.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane
32{
33class ItemFamilyCompactInfos;
34}
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39namespace Arcane::mesh
40{
41class ItemFamily;
42
43/*---------------------------------------------------------------------------*/
44/*---------------------------------------------------------------------------*/
51class ARCANE_MESH_EXPORT DynamicMeshKindInfos
52: public TraceAccessor
53{
54 public:
55
56 // TODO: a supprimer
58
59 private:
60
62
63 public:
64
69
70 public:
71
72 void build();
73
75
78 void finalizeMeshChanged();
79
85 Integer maxUsedLocalId() const { return m_internals.size(); }
86
88 void prepareForDump();
89
91 void readFromDump();
92
94 ItemGroup allItems() const { return m_all_group; }
95
97 Int32ConstArrayView addedItems () const { return m_added_items; }
98 Int32ConstArrayView removedItems() const { return m_removed_items;}
99
101
102 ConstArrayView<ItemInternal*> itemsInternal() const { return m_internals; }
103
104 ItemInternal* itemInternal(Int32 local_id) const { return m_internals[local_id]; }
105
108 {
109 bool need_alloc = false;
110 ItemInternal* next = _allocOne(need_alloc);
111 if (m_has_unique_id_map)
112 if (!m_items_map.add(unique_id,next))
113 _badSameUniqueId(unique_id);
114 return next;
115 }
116
119 {
120 ItemInternal* next = _allocOne(need_alloc);
121 if (m_has_unique_id_map)
122 if (!m_items_map.add(unique_id,next))
123 _badSameUniqueId(unique_id);
124 return next;
125 }
126
129 {
130#ifdef ARCANE_CHECK
131 _checkActiveItem(item);
132#endif
133 _setSuppressed(item);
134 if (m_has_unique_id_map){
135 Int64 uid = item->uniqueId().asInt64();
136 if (uid != NULL_ITEM_UNIQUE_ID)
137 m_items_map.remove(uid);
138 }
139 m_free_internals.add(item->localId());
140 m_removed_items.add(item->localId());
141 --m_nb_item;
142 }
143
146 {
147#ifdef ARCANE_CHECK
148 _checkActiveItem(item);
149#endif
150 _setSuppressed(item);
151#ifndef REMOVE_UID_ON_DETACH
152 if (m_has_unique_id_map)
153 m_items_map.remove(item->uniqueId().asInt64());
154#endif
155 m_free_internals.add(item->localId());
156 m_removed_items.add(item->localId());
157 --m_nb_item;
158 }
159
167 {
168#ifdef ARCANE_CHECK
169 _checkActiveItem(item);
170#endif
171 // Peut-être faut-il la marquer supprimée.
172 //_setSuppressed(item);
173#ifdef REMOVE_UID_ON_DETACH
174 if (m_has_unique_id_map)
175 m_items_map.remove(item->uniqueId().asInt64());
176#endif /* REMOVE_UID_ON_DETACH */
177 item->setDetached(true);
178 }
179
181 void removeMany(Int32ConstArrayView local_ids);
182
185 {
186#ifdef ARCANE_CHECK
187 if (!m_has_unique_id_map)
188 _badUniqueIdMap();
189#endif
190 ItemInternalMap::LookupData item_data = m_items_map._lookupAdd(uid, 0, is_alloc);
191 if (is_alloc){
192 bool need_alloc;
193 item_data.setValue(_allocOne(need_alloc));
194 }
195 return item_data.value();
196 }
197
200 {
201#ifdef ARCANE_CHECK
202 if (!m_has_unique_id_map)
203 _badUniqueIdMap();
204#endif
205 return m_items_map._tryFindItemInternal(uid);
206 }
207
209 void checkValid();
210
211 ItemInternalMap& itemsMap() { return m_items_map; }
212
213 Integer nbItem() const { return m_nb_item; }
214
215 eItemKind kind() const { return m_kind; }
216
217 bool changed() const
218 {
219 return !m_added_items.empty() || !m_removed_items.empty();
220 }
221
222 void beginCompactItems(ItemFamilyCompactInfos& compact_infos);
223
230 ARCANE_DEPRECATED_240 Int32ConstArrayView oldToNewLocalIds() const;
231
233 void clear();
234
241 ARCANE_DEPRECATED_240 Int32ConstArrayView newToOldLocalIds() const;
242
243 void finishCompactItems(ItemFamilyCompactInfos& compact_infos);
244
245 void itemsUniqueIdToLocalId(ArrayView<Int64> ids,bool do_fatal) const;
246 void itemsUniqueIdToLocalId(Int32ArrayView local_ids,
247 Int64ConstArrayView unique_ids,
248 bool do_fatal) const;
249 void itemsUniqueIdToLocalId(Int32ArrayView local_ids,
250 ConstArrayView<ItemUniqueId> unique_ids,
251 bool do_fatal) const;
252
253 ItemFamily* itemFamily() const
254 {
255 return m_item_family;
256 }
257
258 void setItemFamily(ItemFamily* item_family);
259
260 bool hasUniqueIdMap() const
261 {
262 return m_has_unique_id_map;
263 }
264
265 void setHasUniqueIdMap(bool v);
266
267 void printFreeInternals(Integer max_print);
268
269 private:
270
274 {
276 Integer nb_free = m_free_internals.size();
277 Int32 lid = 0;
278 if (nb_free!=0){
279 new_item = m_internals[m_free_internals.back()];
280 m_free_internals.popBack();
281 _setAdded(new_item);
282 lid = new_item->localId();
283 need_alloc = false;
284 }
285 else{
286 Integer nb_free2 = m_free_internals_in_multi_buffer.size();
287 if (nb_free2!=0){
288 new_item = m_free_internals_in_multi_buffer.back();
289 m_free_internals_in_multi_buffer.popBack();
290 }
291 else
292 new_item = m_item_internals_buffer->allocOne();
293 lid = m_internals.size();
294 new_item->setLocalId(lid);
295 m_internals.add(new_item);
296 _updateItemSharedInfoInternalView();
297 need_alloc = true;
298 }
299 m_added_items.add(lid);
300 ++m_nb_item;
301 return new_item;
302 }
303
304 private:
305
312 ItemGroup m_all_group;
313 Integer m_nb_item;
314 bool m_is_verbose;
315 Int32UniqueArray m_added_items;
316 Int32UniqueArray m_removed_items;
317 bool m_use_new_finalize;
318 bool m_is_first_finalize;
319 bool m_has_unique_id_map;
322 ItemSharedInfo* m_common_item_shared_info = nullptr;
323
324 public:
325
329 UniqueArray<ItemInternal*> m_free_internals_in_multi_buffer;
330
331 private:
332
339
340 private:
341
342 inline void _setSuppressed(ItemInternal* item)
343 {
344 int f = item->flags();
345 f &= ~ItemFlags::II_Added;
346 f |= ItemFlags::II_Suppressed;
347 item->setFlags(f);
348 }
349
350 inline void _setAdded(ItemInternal* item)
351 {
352 int f = item->flags();
353 f |= ItemFlags::II_Added;
354 f &= ~ItemFlags::II_Suppressed;
355 item->setFlags(f);
356 }
357
358 void _checkActiveItem(ItemInternal* item);
359 void _dumpList();
360 void _badSameUniqueId(Int64 unique_id) const;
361 void _badUniqueIdMap() const;
362 void _updateItemSharedInfoInternalView();
363};
364
365/*---------------------------------------------------------------------------*/
366/*---------------------------------------------------------------------------*/
367
368} // End namespace Arcane::mesh
369
370/*---------------------------------------------------------------------------*/
371/*---------------------------------------------------------------------------*/
372
373#endif
ItemUniqueId uniqueId() const
Numéro unique de l'entité
Int32 flags() const
Flags de l'entité
Int32 localId() const
Numéro local (au sous-domaine) de l'entité
Informations pour gérer le compactage des entités d'une famille.
Flags pour les caractéristiques des entités.
Definition ItemFlags.h:31
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Structure interne d'une entité de maillage.
Structure interne partagée d'une entité de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
void setDetached(bool v)
Positionne l'état détachée de l'entité
void setFlags(Int32 f)
Positionne les flags de l'entité
Infos de maillage pour un genre donné d'entité.
Integer m_nb_item
Groupe de toutes les entités.
String m_kind_name
Nom du genre des entités (Node, Cell, ...)
Integer maxUsedLocalId() const
Numéro local le plus grand utilisé.
MultiBufferT< ItemInternal > * m_item_internals_buffer
Tampon pour stocker une instance de ItemInternal.
ItemGroup allItems() const
Groupe de toutes les entités.
void removeOne(ItemInternal *item)
Supprime l'entité item.
ItemInternal * allocOne(Int64 unique_id, bool &need_alloc)
Ajoute une entité de numéro unique unique_id.
UniqueArray< ItemInternal * > m_internals
ItemInternal des entités.
ItemInternal * findOrAllocOne(Int64 uid, bool &is_alloc)
Recherche l'entité de numéro unique unique_id et la créé si elle n'existe pas.
ConstArrayView< ItemInternal * > itemsInternal() const
Liste interne des ItemInternal's.
ItemInternal * _allocOne(bool &need_alloc)
Ajoute une entité.
Int32ConstArrayView addedItems() const
Liste des entitées ajoutées ou retirées depuis le dernier endUpdate()
ItemInternal * allocOne(Int64 unique_id)
Ajoute une entité de numéro unique unique_id.
void removeDetachedOne(ItemInternal *item)
Supprime l'entité détachée item.
ItemFamilyCompactInfos * m_compact_infos
Temporaire tant que oldToNewLocalIds() et newToOldLocalIds() existent.
String m_all_group_name
Nom du groupe contenant toutes les entités.
void detachOne(ItemInternal *item)
Détache une l'entité item.
ItemInternalMap m_items_map
Table de hachage conversion uniqueId() -> ItemInternal*.
Int32UniqueArray m_free_internals
Liste des ItemInternal de m_item_internals_buffer libres.
ItemInternal * findOne(Int64 uid)
Recherche l'entité de numéro unique uid.
eItemKind m_kind
Genre correspondant.
ItemFamily * m_item_family
Famille de maillage associée.
Famille d'entités.
Definition ItemFamily.h:76
Tableau associatif de ItemInternal.
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:640
eItemKind
Genre d'entité de maillage.