Arcane  4.2.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IItemFamily.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* IItemFamily.h (C) 2000-2025 */
9/* */
10/* Interface d'une famille d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IITEMFAMILY_H
13#define ARCANE_CORE_IITEMFAMILY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \ingroup Mesh
32 * \brief Interface d'une famille d'entités.
33 *
34 * Une famille d'entité gère toutes les entités de même genre (Item::kind())
35 * et est attachée à un maillage (IMesh).
36 *
37 * Pour tout maillage, il existe une et une seule famille de
38 * noeuds (Node), arêtes (Edge), faces (Face) et mailles (Cell).
39 * Ces entités sont appelées des entités de \b base du maillage et les
40 * familles associées les familles de base du maillage.
41 *
42 * Suivant l'implémentation, il peut aussi y avoir des familles
43 * de particules (Particle), de noeuds duaux (DualNode) ou de liens (Link).
44 * Suivant la connectivité demandée, une famille peut ne pas avoir d'éléments.
45 * Par exemple, par défaut en 3D, les arêtes (Edge) ne sont pas créées.
46 *
47 * Chaque entité de la famille possède un identifiant local dans la
48 * famille, donnée par Item::localId(). Lorsqu'une famille évolue, cet identifiant
49 * peut être modifié. Les Item::localId() des entités d'une famille ne sont
50 * pas nécessairement contigus. La méthode maxLocalId() permet de connaître
51 * le maximum de ces valeurs. Le compactage permet
52 * de garantir que les localId() sont renumérotés de 0 à (nbItem()-1). Pour les entités
53 * de base du maillage, le compactage est automatique si le maillage
54 * à la propriété \a "sort" à vrai. Pour les autres, il faut appeler
55 * compactItems().
56 *
57 * Par défaut, une famille possède une table de conversion des
58 * uniqueId() vers les localId(). Cette table doit exister pour
59 * permettre les opérations suivantes:
60 * - le uniqueId() est garanti unique sur le sous-domaine et doit
61 * l'être par construction sur tous les sous-domaines.
62 * - faire appel aux méthodes itemsUniqueIdToLocalId().
63 * - les entités de la famille peuvent être présentes dans plusieurs
64 * sous-domaines.
65 * - faire des synchronisations.
66 * - avoir des variables partielles sur cette famille
67 *
68 * Il est possible d'activer ou désactiver cette table de conversion
69 * via la méthode setHasUniqueIdMap() uniquement si aucune entité
70 * n'a été créée. Cette opération n'est pas possible sur
71 * les familles de noeuds, arêtes, faces et mailles.
72
73 * Lorsqu'on modifie une famille par ajout ou suppression d'entités, les
74 * variables et les groupes qui reposent sur cette famille ne sont plus utilisables
75 * tant qu'on a pas fait d'appel à endUpdate(). Il est possible pour des raisons
76 * d'optimisation de faire des mise à jour de certaines variables ou groupes via
77 * partialEndUpdateVariable() ou partialEndUpdateGroup(). ATTENTION, un appel
78 * à l'une de ces 3 méthodes de mise à jour invalide les instances des entités (Item).
79 * Pour conserver une référence sur une entité, il faut soit utiliser un groupe (ItemGroup),
80 * soit conserver son numéro unique et utiliser itemsUniqueIdToLocalId().
81 *
82 * La page \ref arcanedoc_core_types_item_family fournit une description détaillée
83 * de cette classe.
84 */
85class ARCANE_CORE_EXPORT IItemFamily
86{
87 friend mesh::DynamicMesh;
88 friend mesh::ItemFamily;
89
90 public:
91
92 virtual ~IItemFamily() {} //<! Libère les ressources
93
94 public:
95
96 virtual void build() =0;
97
98 public:
99
100 //! Nom de la famille
101 virtual String name() const =0;
102
103 //! Nom complet de la famille (avec celui du maillage)
104 virtual String fullName() const =0;
105
106 //! Genre des entités
107 virtual eItemKind itemKind() const =0;
108
109 //! Nombre d'entités
110 virtual Integer nbItem() const =0;
111
112 /*!
113 * Taille nécessaire pour dimensionner les variables sur ces entités.
114 *
115 * Il s'agit du maximum des Item::localId() des entités de cette famille plus 1.
116 */
117 virtual Int32 maxLocalId() const =0;
118
119 public:
120
121 // TODO: a supprimer. Utiliser itemInfoListView à la place
122 //! Tableau interne des entités
123 virtual ItemInternalArrayView itemsInternal() =0;
124
125 public:
126
127 //! Vue sur la liste d'informations sur les entités
129
130 /*!
131 * \brief IItemFamily parent
132 *
133 * Issue des imbrications de sous-maillages
134 * \return nullptr si n'a pas de famille parente
135 */
136 virtual IItemFamily* parentFamily() const = 0;
137
138 /*!
139 * \internal
140 * \brief Positionne l'IItemFamily parent.
141 *
142 * A utiliser avant build() pour les sous-maillages construit dynamiquement
143 * (i.e. pas depuis un reprise).
144 *
145 * TODO: A mettre dans l'API interne
146 */
147 virtual void setParentFamily(IItemFamily* parent) = 0;
148
149 //! Donne la profondeur d'imbrication du maillage courant
150 virtual Integer parentFamilyDepth() const = 0;
151
152 /*!
153 * \internal
154 * \brief Ajoute d'une famile en dépendance
155 *
156 * Opération en symétrie de setParentFamily
157 *
158 * TODO: A mettre dans l'API interne
159 */
160 virtual void addChildFamily(IItemFamily* family) = 0;
161
162 //! Familles enfantes de cette famille
164
165 /*!
166 * \brief Variable contenant le numéro du nouveau sous-domaine
167 * propriétaire de l'entité.
168 *
169 * Cette variable n'est utilisée que pour un repartitionnement du maillage.
170 */
172
173 //! Vérification de la validité des structures internes (interne)
174 virtual void checkValid() =0;
175
176 /*!
177 * \brief Vérification de la validité des structures internes concernant
178 * la connectivité.
179 */
180 virtual void checkValidConnectivity() =0;
181
182 /*!
183 * \brief Vérifie que les identifiants \a unique_ids sont bien uniques
184 * pour tous les sous-domaines.
185 *
186 * Cette méthode NE vérifie PAS que les \a unique_ids sont identiques
187 * à ceux des entités déjà créées. Elle vérifie uniquement l'ensemble des
188 * \a unique_ids passés en argument par tous les sous-domaines.
189 *
190 * Cette opération est collective et doit être appelée par tous les sous-domaines.
191 */
192 virtual void checkUniqueIds(Int64ConstArrayView unique_ids) =0;
193
194 public:
195
196 /*!
197 * \brief Vue sur les entités.
198 *
199 * Retourne une vue sur les entités de numéro locaux \a local_ids.
200 * \warning Cette vue n'est valide que tant que la famille n'évolue pas.
201 * En particulier, l'ajout, la suppression ou le compactage invalide la vue.
202 * Si vous souhaitez conserver une liste même après modification, il faut
203 * utiliser les groupes (ItemGroup).
204 */
206
207 /*!
208 * \brief Vue sur toutes les entités de la famille.
209 */
210 virtual ItemVectorView view() =0;
211
212 /*!
213 * \brief Supprime des entités.
214 *
215 * Utilise le graphe (Familles, Connectivités) ItemFamilyNetwork
216 *
217 * TODO: A mettre dans l'API interne
218 */
219 virtual void removeItems2(mesh::ItemDataList& item_data_list) =0;
220
221 /*!
222 * \internal
223 * \brief Supprime des entités et met a jour les connectivites.
224 *
225 * Ne supprime pas d'eventuels sous items orphelins.
226 *
227 * Contexte d'utilisation avec un graphe des familles. Les sous items
228 * orphelins ont du eux aussi etre marque NeedRemove.
229 * Il n'y a donc pas besoin de les gerer dans les familles parentes.
230 *
231 * TODO: A mettre dans l'API interne
232 */
233 virtual void removeNeedRemoveMarkedItems() =0;
234
235 /*!
236 * \brief Entité de numéro unique \a unique_id.
237 *
238 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne \a nullptr.
239 *
240 * \pre hasUniqueIdMap()
241 */
242 ARCANE_DEPRECATED_REASON("Use MeshUtils::findOneItem() instead")
243 virtual ItemInternal* findOneItem(Int64 unique_id) =0;
244
245 /*! \brief Notifie la fin de modification de la liste des entités.
246 *
247 * Cette méthode doit être appelée après modification de la liste des
248 * entités (après ajout ou suppression). Elle met à jour les groupes
249 * et redimensionne les variables sur cette famille.
250 */
251 virtual void endUpdate() =0;
252
253 /*!
254 * \brief Mise à jour partielle.
255 *
256 * Met à jour les structures internes après une modification de la famille.
257 * Il s'agit d'une version optimisée de endUpdate() lorsqu'on souhaite
258 * faire de multiples modifications de maillage. Cette méthode NE met PAS
259 * à jour les groupes ni les variables associées à cette famille. Seul le
260 * groupe allItems() est disponible. Il est possible de mettre à jour
261 * un groupe via partialEndUpdateGroup() et une variable via partialEndUpdateVariable().
262 *
263 * Cette méthode est réservée aux utilisateurs expérimentés. Pour les autres,
264 * il vaut mieux utiliser endUpdate().
265 */
266 virtual void partialEndUpdate() =0;
267
268 /*!
269 * \brief Met à jour un groupe.
270 *
271 * Met à jour le groupe \a group après une modification de la famille.
272 * La mise à jour consiste à supprimer du groupe les entités de la famille
273 * éventuellement détruites lors de la modification.
274 *
275 * \sa partialEndUpdate().
276 */
277 virtual void partialEndUpdateGroup(const ItemGroup& group) =0;
278
279 /*!
280 * \brief Met à jour une variable.
281 *
282 * Met à jour la variable \a variable après une modification de la famille.
283 * La mise à jour consiste à redimensionner la variable après un éventuel
284 * ajout d'entités.
285 *
286 * \sa partialEndUpdate().
287 */
288 virtual void partialEndUpdateVariable(IVariable* variable) =0;
289
290 //! Notifie que les entités propres au sous-domaine de la famille ont été modifiées
291 virtual void notifyItemsOwnerChanged() =0;
292
293 //! Notifie que les numéros uniques des entités ont été modifiées
294 virtual void notifyItemsUniqueIdChanged() =0;
295
296 public:
297
298 //! Informations sur la connectivité locale au sous-domaine pour à cette famille
300
301 //! Informations sur la connectivité globales à tous les sous-domaines.
303
304 public:
305
306 /*!
307 * \brief Indique si la famille possède une table de conversion
308 * uniqueId vers localId.
309 *
310 * La table de conversion permet d'utiliser les méthodes
311 * itemsUniqueIdToLocalId() ou findOneItem().
312 *
313 * Cette méthode ne peut être appelée que lorsqu'il n'y a aucune
314 * entité de la famille.
315 *
316 * Les familles de noeuds, arêtes, faces et mailles du maillage
317 * ont obligatoirement une table de conversion.
318 */
319 virtual void setHasUniqueIdMap(bool v) =0;
320
321 //! Indique si la famille possède une table de conversion uniqueId vers localId.
322 virtual bool hasUniqueIdMap() const =0;
323
324 public:
325
326 /*!
327 * \brief Converti un tableau de numéros uniques en numéros locaux.
328 *
329 * Cette opération prend en entrée le tableau \a unique_ids contenant les
330 * numéros uniques des entités du type \a item_kind et retourne dans
331 * \a local_ids le numéro local à ce sous-domaine correspondant.
332 *
333 * La complexité de cette opération dépend de l'implémentation.
334 * L'implémentation par défaut utilise une table de hachage. La complexité
335 * moyenne est donc constante.
336 *
337 * Si \a do_fatal est vrai, une erreur fatale est générée si une entité n'est
338 * pas n'est trouvée, sinon l'élément non trouvé a pour valeur NULL_ITEM_ID.
339 *
340 * \pre hasUniqueIdMap()
341 */
343 Int64ConstArrayView unique_ids,
344 bool do_fatal=true) const =0;
345
346 /*!
347 * \brief Converti un tableau de numéros uniques en numéros locaux.
348 *
349 * Cette opération prend en entrée le tableau \a unique_ids contenant les
350 * numéros uniques des entités du type \a item_kind et retourne dans
351 * \a local_ids le numéro local à ce sous-domaine correspondant.
352 *
353 * La complexité de cette opération dépend de l'implémentation.
354 * L'implémentation par défaut utilise une table de hachage. La complexité
355 * moyenne est donc constante.
356 *
357 * Si \a do_fatal est vrai, une erreur fatale est générée si une entité n'est
358 * pas n'est trouvée, sinon l'élément non trouvé a pour valeur NULL_ITEM_ID.
359 */
361 ConstArrayView<ItemUniqueId> unique_ids,
362 bool do_fatal=true) const =0;
363
364 public:
365
366 /*!
367 * \brief Positionne la fonction de tri des entités.
368 *
369 * La méthode par défaut est de trier les entités par uniqueId() croissant.
370 * Si \a sort_function est nul, c'est la méthode par défaut qui sera utilisée.
371 * Sinon, \a sort_function remplace la fonction précédente qui est détruite
372 * (via delete).
373 * Le tri est effectué via l'appel à compactItems().
374 * \sa itemSortFunction()
375 */
376 virtual void setItemSortFunction(IItemInternalSortFunction* sort_function) =0;
377
378 /*!
379 * \brief Fonction de tri des entités.
380 *
381 * L'instance de cette classe reste propriétaire de l'objet retournée
382 * qui ne doit pas être détruit ni modifié.
383 * \sa setItemSortFunction()
384 */
386
387 public:
388
389 //! Sous-domaine associé
390 ARCCORE_DEPRECATED_2020("Do not use this method. Try to get 'ISubDomain' from another way")
391 virtual ISubDomain* subDomain() const =0;
392
393 //! Gestionnaire de trace associé
394 virtual ITraceMng* traceMng() const =0;
395
396 //! Maillage associé
397 virtual IMesh* mesh() const =0;
398
399 //! Gestionnaire de parallélisme associé
400 virtual IParallelMng* parallelMng() const =0;
401
402 public:
403
404 //! Groupe de toutes les entités
405 virtual ItemGroup allItems() const =0;
406
407 //! Liste des groupes de cette famille
408 virtual ItemGroupCollection groups() const =0;
409
410 public:
411
412 //! @name opérations sur des groupes
413 //@{
414 /*!
415 \brief Recherche un groupe.
416 \param name nom du groupe à rechercher
417 \return le groupe de nom \a name ou le groupe nul s'il n'y en a pas.
418 */
419 virtual ItemGroup findGroup(const String& name) const =0;
420
421 /*!
422 * \brief Recherche un groupe
423 *
424 * \param name nom du groupe à rechercher
425 *
426 * \return le groupe trouvé ou le groupe nul si aucun groupe de nom
427 * \a name et de type \a type n'existe et si \a create_if_needed vaut \e false.
428 * Si \a create_if_needed vaux \e vrai, un groupe vide de nom \a name est créé et retourné.
429 */
430 virtual ItemGroup findGroup(const String& name,bool create_if_needed) =0;
431
432
433 /*!
434 * \brief Créé un groupe d'entités de nom \a name contenant les entités \a local_ids.
435 *
436 * \param name nom du groupe
437 * \param local_ids liste des localId() des entités composant le groupe.
438 * \param do_override si \e true et q'un groupe de même nom existe déjà,
439 * ses éléments sont remplacés par ceux donnés dans \a local_ids. Si \e false,
440 * alors une exception est levée.
441 * \return le groupe créé
442 */
443 virtual ItemGroup createGroup(const String& name,Int32ConstArrayView local_ids,bool do_override=false) =0;
444
445 /*!
446 * \brief Créé un groupe d'entités de nom \a name
447 *
448 * Le groupe ne doit pas déjà exister sinon une exception est levée.
449 *
450 * \param name nom du groupe
451 * \return le groupe créé
452 */
453 virtual ItemGroup createGroup(const String& name) =0;
454
455 /*!
456 * \brief Supprime tous les groupes de cette famille.
457 */
458 virtual void destroyGroups() =0;
459
460 /*!
461 * \internal
462 * For Internal Use Only
463 */
464 virtual ItemGroup createGroup(const String& name,const ItemGroup& parent,bool do_override=false) =0;
465
466 //@}
467
468 /*!
469 * \brief Recherche la variable de nom \a name associée à cette famille.
470 *
471 * Si aucune variable de nom \a name n'existe, si \a throw_exception vaut
472 * \a false, retourne 0, sinon lève une exception.
473 */
474 virtual IVariable* findVariable(const String& name,bool throw_exception=false) =0;
475
476 /*!
477 * \brief Ajoute à la collection \a collection la liste des variables
478 * utilisés de cette famille.
479 */
480 virtual void usedVariables(VariableCollection collection) =0;
481
482 public:
483
484 //! Prépare les données pour une protection
485 virtual void prepareForDump() =0;
486
487 //! Relit les données à partir d'une protection
488 virtual void readFromDump() =0;
489
490 /**
491 * Copie les valeurs des entités numéros @a source dans les entités
492 * numéros @a destination
493 *
494 * @param source liste des @b localId source
495 * @param destination liste des @b localId destination
496 */
497 virtual void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination) =0;
498
499 /**
500 * Copie les moyennes des valeurs des entités numéros
501 * @a first_source et @a second_source dans les entités numéros
502 * @a destination
503 *
504 * @param first_source liste des @b localId de la 1ère source
505 * @param second_source liste des @b localId de la 2ème source
506 * @param destination liste des @b localId destination
507 */
508 virtual void copyItemsMeanValues(Int32ConstArrayView first_source,
509 Int32ConstArrayView second_source,
510 Int32ConstArrayView destination) = 0;
511
512 /*!
513 * \brief Supprime toutes les entités de la famille.
514 * \warning attention à ne pas détruire des entités qui sont utilisées dans
515 * par une autre famille. En général, il est plus prudent d'utiliser IMesh::clearItems()
516 * si on souhaite supprimer tous les éléments du maillage.
517 */
518 virtual void clearItems() =0;
519
520 //! Compacte les entités.
521 virtual void compactItems(bool do_sort) =0;
522
523 public:
524
525 /*!
526 * \brief Construit les structures nécessaires à la synchronisation.
527 *
528 Cette opération doit être effectuée à chaque fois que les entités
529 du maillage changent de propriétaire (par exemple lors d'un équilibrage de
530 charge).
531
532 Cette opération est collective.
533 */
534 virtual void computeSynchronizeInfos() =0;
535
536 //! Liste des sous-domaines communiquants pour les entités.
537 virtual void getCommunicatingSubDomains(Int32Array& sub_domains) const =0;
538
539 //! @name opérations de synchronisation d'une variable
540 //@{
541
542 //! Synchroniseur sur toutes les entités de la famille
544
545 /*!
546 * \brief Synchronise les variables \a variables.
547 *
548 * Les variables \a variables doivent être toutes être issues
549 * de cette famille et ne pas être partielles.
550 */
551 virtual void synchronize(VariableCollection variables) =0;
552
553 // TODO: à rendre virtuelle pure (décembre 2024)
554 /*!
555 * \brief Synchronise les variables \a variables sur une liste d'entités.
556 *
557 * Les variables \a variables doivent être toutes être issues
558 * de cette famille et ne pas être partielles.
559 *
560 * Seules les entités listées dans \a local_ids seront synchronisées. Attention :
561 * une entité présente dans cette liste sur un sous-domaine doit être présente
562 * dans cette liste pour tout autre sous-domaine qui possède cette entité.
563 */
564 virtual void synchronize(VariableCollection variables, Int32ConstArrayView local_ids);
565 //@}
566
567 /*!
568 * \brief Applique une opération de réduction depuis les entités fantômes.
569 *
570 * Cette opération est l'opération inverse de la synchronisation.
571 *
572 * Le sous-domaine récupère les valeurs de la variable \a v sur les entités
573 * qu'il partage avec d'autres sous-domaines et l'opération de réduction
574 * \a operation est appliquée sur cette variable.
575 */
576 virtual void reduceFromGhostItems(IVariable* v,IDataOperation* operation) =0;
577 /*!
578 * \brief Applique une opération de réduction depuis les entités fantômes.
579 *
580 * Cette opération est l'opération inverse de la synchronisation.
581 *
582 * Le sous-domaine récupère les valeurs de la variable \a v sur les entités
583 * qu'il partage avec d'autres sous-domaines et l'opération de réduction
584 * \a operation est appliquée sur cette variable.
585 */
586 virtual void reduceFromGhostItems(IVariable* v,Parallel::eReduceType operation) =0;
587
588 //! Cherche une liste d'adjacence.
589 ARCANE_DEPRECATED_REASON("Y2024: use findAdjacency() instead")
591 const ItemGroup& sub_group,
592 eItemKind link_kind,
593 Integer nb_layer) = 0;
594 /*!
595 * \brief Cherche une liste d'adjacence.
596 *
597 * Cherche la liste d'entités de type \a sub_kind, liées par
598 * le type d'entité \a link_kind du groupe \a group,
599 * sur un nombre de couche \a nb_layer.
600 *
601 * Si \a group et \a sub_group sont de même genre, une entité est toujours
602 * dans sa liste d'adjacence, en tant que premier élément.
603 *
604 * Si la liste n'existe pas, elle est créée.
605 *
606 * \note pour l'instant une seule couche est autorisée.
607 */
608 virtual ItemPairGroup findAdjacencyItems(const ItemGroup& group,
609 const ItemGroup& sub_group,
610 eItemKind link_kind,
611 Integer nb_layer);
612
613 /*!
614 * \brief Retourne l'interface de la famille de particule de cette famille.
615 *
616 * L'interface IParticleFamily n'existe que si cette famille est
617 * une famille de particules (itemKind()==IK_Particle). Pour les
618 * autres genres de famille, 0 est retourné.
619 */
621
622 /*!
623 * \brief Retourne l'interface de la famille de particule de cette famille.
624 *
625 * L'interface IParticleFamily n'existe que si cette famille est
626 * une famille de particules (itemKind()==IK_Particle). Pour les
627 * autres genres de famille, 0 est retourné.
628 */
629 virtual IDoFFamily* toDoFFamily() { return nullptr; }
630
631 /*!
632 * \internal
633 * \brief Supprime les entités donnés par \a local_ids.
634 *
635 * Pour usage interne uniquement. Si on souhaite supprimer des entités
636 * du maillage, il faut passer par IMeshModifier via l'appel à IMesh::modifier().
637 */
638 virtual void internalRemoveItems(Int32ConstArrayView local_ids,bool keep_ghost=false) =0;
639
640
641 /*!
642 * \name Enregistre/Supprime un gestionnaire de connectivité.
643 *
644 * Permet de répercuter les évolutions de la famille dans les
645 * connectivites "externes" ou elle est impliquée.
646 * Ces connectivites "externes" sont aujourd'hui les connectivités
647 * utilisant les degres de liberté.
648 *
649 * \note Ces méthodes sont internes à %Arcane.
650 */
651 //@{
652 virtual void addSourceConnectivity(IItemConnectivity* connectivity) =0;
653 virtual void addTargetConnectivity(IItemConnectivity* connectivity) =0;
654 virtual void removeSourceConnectivity(IItemConnectivity* connectivity) =0;
655 virtual void removeTargetConnectivity(IItemConnectivity* connectivity) =0;
656 virtual void setConnectivityMng(IItemConnectivityMng* connectivity_mng) =0;
657 //@}
658
659 /*!
660 * \brief Alloue des entités fantômes.
661 *
662 * Après appel à cette opération, il faut appeler endUpdate() pour
663 * notifier à l'instance la fin des modifications. Il est possible
664 * d'enchaîner plusieurs allocations avant d'appeler
665 * endUpdate().
666 *
667 * Les \a unique_ids sont ceux d'items présents sur un autre
668 * sous-domaine, dont le numéro est dans le tableau owners (de même
669 * taille que le tableau unique_ids). \a items doit avoir le même
670 * nombre d'éléments que \a unique_ids et sera remplit en retour
671 * avec les numéros locaux des entités créées.
672 */
673 virtual void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items,
674 Int32ConstArrayView owners) =0;
675
676 public:
677
678 //! Interface des comportements/politiques associées à cette famille.
680
681 //! Propriétés associées à cette famille.
682 virtual Properties* properties() =0;
683
684 public:
685
686 //! Evènement pour l'ajout et la suppression d'entité
688
689 public:
690
691 /*!
692 * \brief Change le numéro unique de l'entité.
693 *
694 * \warning Cette méthode est expérimentale.
695 * \warning Modifier le uniqueId d'une entité peut engendrer des incohérences
696 * dans le maillage et la numérotation. Il est préférable de n'appeler cette méthode
697 * que sur les entités qui ne sont pas associées à d'autres (par exemple les noeuds qu'on vient
698 * de créer).
699 */
700 virtual void experimentalChangeUniqueId(ItemLocalId local_id,ItemUniqueId unique_id) =0;
701
702 public:
703
704 /*!
705 * \brief Redimensionne les variables de cette famille.
706 *
707 * Cette méthode est interne à Arcane.
708 */
709 virtual void resizeVariables(bool force_resize) = 0;
710
711 public:
712
713 //! Interface du modificateur de topologie.
715
716 public:
717
718 //! API interne à Arcane
719 virtual IItemFamilyInternal* _internalApi() =0;
720};
721
722/*---------------------------------------------------------------------------*/
723/*---------------------------------------------------------------------------*/
724
725} // End namespace Arcane
726
727/*---------------------------------------------------------------------------*/
728/*---------------------------------------------------------------------------*/
729
730#endif
Déclarations des types généraux de Arcane.
Déclarations de types sur les entités.
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Vue constante d'un tableau de type T.
Classe gérant les observateurs associés à un évènement.
Interface d'une famille de DoF.
Definition IDoFFamily.h:33
Interface des informations sur la connectivité par type d'entité.
Interface pour gérer une connectivité.
Interface des politiques d'une famille d'entités.
Interface de modification de la topologie des entités d'une famille.
Interface d'une famille d'entités.
Definition IItemFamily.h:86
virtual void partialEndUpdate()=0
Mise à jour partielle.
virtual void usedVariables(VariableCollection collection)=0
Ajoute à la collection collection la liste des variables utilisés de cette famille.
virtual IItemConnectivityInfo * localConnectivityInfos() const =0
Informations sur la connectivité locale au sous-domaine pour à cette famille.
virtual ISubDomain * subDomain() const =0
Sous-domaine associé
virtual ItemGroup findGroup(const String &name) const =0
Recherche un groupe.
virtual IVariableSynchronizer * allItemsSynchronizer()=0
Synchroniseur sur toutes les entités de la famille.
virtual Integer parentFamilyDepth() const =0
Donne la profondeur d'imbrication du maillage courant.
virtual EventObservableView< const ItemFamilyItemListChangedEventArgs & > itemListChangedEvent()=0
Evènement pour l'ajout et la suppression d'entité
virtual IParticleFamily * toParticleFamily()=0
Retourne l'interface de la famille de particule de cette famille.
virtual void notifyItemsUniqueIdChanged()=0
Notifie que les numéros uniques des entités ont été modifiées.
virtual IItemFamilyTopologyModifier * _topologyModifier()=0
Interface du modificateur de topologie.
virtual void checkUniqueIds(Int64ConstArrayView unique_ids)=0
Vérifie que les identifiants unique_ids sont bien uniques pour tous les sous-domaines.
virtual IItemFamilyPolicyMng * policyMng()=0
Interface des comportements/politiques associées à cette famille.
virtual void readFromDump()=0
Relit les données à partir d'une protection.
virtual ItemGroupCollection groups() const =0
Liste des groupes de cette famille.
virtual ItemGroup allItems() const =0
Groupe de toutes les entités.
virtual void setHasUniqueIdMap(bool v)=0
Indique si la famille possède une table de conversion uniqueId vers localId.
virtual void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination)=0
virtual void partialEndUpdateVariable(IVariable *variable)=0
Met à jour une variable.
virtual ItemInternal * findOneItem(Int64 unique_id)=0
Entité de numéro unique unique_id.
virtual ItemInternalArrayView itemsInternal()=0
Tableau interne des entités.
virtual void prepareForDump()=0
Prépare les données pour une protection.
virtual void synchronize(VariableCollection variables)=0
Synchronise les variables variables.
virtual ItemGroup createGroup(const String &name, Int32ConstArrayView local_ids, bool do_override=false)=0
Créé un groupe d'entités de nom name contenant les entités local_ids.
virtual Int32 maxLocalId() const =0
virtual void computeSynchronizeInfos()=0
Construit les structures nécessaires à la synchronisation.
virtual IItemConnectivityInfo * globalConnectivityInfos() const =0
Informations sur la connectivité globales à tous les sous-domaines.
virtual void clearItems()=0
Supprime toutes les entités de la famille.
virtual void checkValid()=0
Vérification de la validité des structures internes (interne).
virtual bool hasUniqueIdMap() const =0
Indique si la famille possède une table de conversion uniqueId vers localId.
virtual IParallelMng * parallelMng() const =0
Gestionnaire de parallélisme associé
virtual IItemFamilyCollection childFamilies()=0
Familles enfantes de cette famille.
virtual ItemPairGroup findAdjencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)=0
Cherche une liste d'adjacence.
virtual String name() const =0
Nom de la famille.
virtual ItemInfoListView itemInfoListView()=0
Vue sur la liste d'informations sur les entités.
virtual IItemFamily * parentFamily() const =0
IItemFamily parent.
virtual IItemInternalSortFunction * itemSortFunction() const =0
Fonction de tri des entités.
virtual eItemKind itemKind() const =0
Genre des entités.
virtual void checkValidConnectivity()=0
Vérification de la validité des structures internes concernant la connectivité.
virtual void copyItemsMeanValues(Int32ConstArrayView first_source, Int32ConstArrayView second_source, Int32ConstArrayView destination)=0
virtual IVariable * findVariable(const String &name, bool throw_exception=false)=0
Recherche la variable de nom name associée à cette famille.
virtual ItemPairGroup findAdjacencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)
Cherche une liste d'adjacence.
virtual ITraceMng * traceMng() const =0
Gestionnaire de trace associé
virtual String fullName() const =0
Nom complet de la famille (avec celui du maillage).
virtual void compactItems(bool do_sort)=0
Compacte les entités.
virtual IMesh * mesh() const =0
Maillage associé
virtual void notifyItemsOwnerChanged()=0
Notifie que les entités propres au sous-domaine de la famille ont été modifiées.
virtual ItemVectorView view(Int32ConstArrayView local_ids)=0
Vue sur les entités.
virtual IItemFamilyInternal * _internalApi()=0
API interne à Arcane.
virtual void itemsUniqueIdToLocalId(Int32ArrayView local_ids, Int64ConstArrayView unique_ids, bool do_fatal=true) const =0
Converti un tableau de numéros uniques en numéros locaux.
virtual void removeItems2(mesh::ItemDataList &item_data_list)=0
Supprime des entités.
virtual IDoFFamily * toDoFFamily()
Retourne l'interface de la famille de particule de cette famille.
virtual void reduceFromGhostItems(IVariable *v, IDataOperation *operation)=0
Applique une opération de réduction depuis les entités fantômes.
virtual void resizeVariables(bool force_resize)=0
Redimensionne les variables de cette famille.
virtual Properties * properties()=0
Propriétés associées à cette famille.
virtual void experimentalChangeUniqueId(ItemLocalId local_id, ItemUniqueId unique_id)=0
Change le numéro unique de l'entité.
virtual Integer nbItem() const =0
Nombre d'entités.
virtual VariableItemInt32 & itemsNewOwner()=0
Variable contenant le numéro du nouveau sous-domaine propriétaire de l'entité.
virtual void getCommunicatingSubDomains(Int32Array &sub_domains) const =0
Liste des sous-domaines communiquants pour les entités.
virtual void partialEndUpdateGroup(const ItemGroup &group)=0
Met à jour un groupe.
virtual void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners)=0
Alloue des entités fantômes.
virtual void setItemSortFunction(IItemInternalSortFunction *sort_function)=0
Positionne la fonction de tri des entités.
virtual void destroyGroups()=0
Supprime tous les groupes de cette famille.
virtual void endUpdate()=0
Notifie la fin de modification de la liste des entités.
virtual ItemVectorView view()=0
Vue sur toutes les entités de la famille.
Interface d'une fonction de tri des entités.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface d'une famille de particules.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:77
Interface du gestionnaire de traces.
Interface d'un service de synchronisation de variable.
Interface d'une variable.
Definition IVariable.h:39
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue sur une liste pour obtenir des informations sur les entités.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Tableau de listes d'entités.
Identifiant unique d'une entité.
Vue sur un vecteur d'entités.
Liste de propriétés.
Definition Properties.h:64
Chaîne de caractères unicode.
Collection de variables.
ItemVariableScalarRefT< Int32 > VariableItemInt32
Grandeur de type entier 32 bits.
eReduceType
Types des réductions supportées.
Implémentation de la concurrence.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Collection< ItemGroup > ItemGroupCollection
Collection de groupes d'éléments du maillage.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:480
Collection< IItemFamily * > IItemFamilyCollection
Collection de familles d'entités.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:478
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:451
eItemKind
Genre d'entité de maillage.
Array< Int32 > Int32Array
Tableau dynamique à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:121
std::int32_t Int32
Type entier signé sur 32 bits.