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